設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 → 2.52.0 無更改
-
2.50.0
2025-06-16
- 2.49.1 無更改
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 無更改
-
2.48.0
2025-01-10
- 2.44.1 → 2.47.3 無更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 無更改
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 無更改
-
2.42.0
2023-08-21
- 2.38.1 → 2.41.3 無更改
-
2.38.0
2022-10-02
- 2.29.1 → 2.37.7 無更改
-
2.29.0
2020-10-19
- 2.25.1 → 2.28.1 無更改
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 無更改
-
2.22.0
2019-06-07
- 2.19.1 → 2.21.4 無更改
-
2.19.0
2018-09-10
- 2.17.0 → 2.18.5 無更改
-
2.16.6
2019-12-06
- 2.15.4 無更改
-
2.14.6
2019-12-06
- 2.10.5 → 2.13.7 無更改
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 無更改
-
2.6.7
2017-05-05
- 2.4.12 → 2.5.6 無更改
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 無更改
-
2.0.5
2014-12-17
概要
gitnotes[list[<object>]]gitnotesadd[-f] [--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-F<file> |-m<msg> | (-c|-C) <object>] [-e] [<object>]gitnotescopy[-f] (--stdin| <from-object> [<to-object>] )gitnotesappend[--allow-empty] [--[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-F<file> |-m<msg> | (-c|-C) <object>] [-e] [<object>]gitnotesedit[--allow-empty] [<object>] [--[no-]stripspace]gitnotesshow[<object>]gitnotesmerge[-v|-q] [-s<strategy> ] <notes-ref>gitnotesmerge--commit[-v|-q]gitnotesmerge--abort[-v|-q]gitnotesremove[--ignore-missing] [--stdin] [<object>…]gitnotesprune[-n] [-v]gitnotesget-ref
描述
新增、刪除或讀取附加在物件上的筆記,而不修改物件本身。
預設情況下,筆記被儲存在 refs/notes/commits 中並從中讀取,但此預設設定可以被覆蓋。請參閱下面的選項、配置和環境變數部分。如果此引用不存在,將在首次需要儲存筆記時自動建立。
筆記的一個典型用法是在不更改提交本身的情況下補充提交訊息。筆記可以與原始提交訊息一起透過 git log 顯示。為了區分這些筆記和儲存在提交物件中的訊息,筆記的縮排方式與訊息相同,在一段不縮排的行“Notes (<refname>):”(或對於 refs/notes/commits 顯示“Notes:”)之後。
使用 git format-patch 準備的補丁也可以透過使用 --notes 選項新增筆記。這些筆記在三條短線分隔符之後作為補丁註釋新增。
要更改 git log 顯示的筆記,請參閱 配置 部分中的 notes.displayRef 討論。
請參閱 notes.rewrite.<command> 配置,瞭解如何在重寫提交的命令之間傳遞筆記。
子命令
list-
列出給定物件的筆記物件。如果未給出物件,則顯示所有筆記物件及其註解的物件列表(格式為“<note-object> <annotated-object>”)。如果未給出子命令,則這是預設子命令。
add-
為給定物件(預設為
HEAD)新增筆記。如果物件已存在筆記,則中止(使用-f覆蓋現有筆記)。但是,如果您以互動方式使用add(使用編輯器提供筆記內容),則 - 代替中止 - 將在編輯器中開啟現有筆記(類似於edit子命令)。如果您指定多個-m和-F,則會在訊息之間插入一個空行。使用--separator選項插入其他分隔符。您可以使用-e在將筆記新增到物件之前,在編輯器中互動式地編輯和微調由-m和-F選項提供的訊息。 copy-
將第一個物件的筆記複製到第二個物件(預設為
HEAD)。如果第二個物件已存在筆記,或者第一個物件沒有筆記,則中止(使用-f覆蓋第二個物件的現有筆記)。此子命令等同於:gitnotesadd[-f]-C$(gitnoteslist<from-object>) <to-object>在
--stdin模式下,從標準輸入中讀取格式為<from-object> SP <to-object> [ SP <rest> ] LF
的行,並將每個 <from-object> 的筆記複製到其對應的 <to-object>。 (可選的 <rest> 被忽略,以便命令可以讀取傳遞給
post-rewrite鉤子的輸入。)--stdin不能與命令列中提供的物件名稱一起使用。 append-
將由
-m或-F選項提供的新訊息附加到現有筆記,或者將它們作為新筆記新增(如果不存在),為物件(預設為HEAD)新增。當追加到現有筆記時,將在每條新訊息前新增一個空行作為段落分隔符。可以使用--separator選項自定義分隔符。使用-e互動式(使用編輯器)編輯要由-m和-F選項提供的新訊息,然後再追加筆記。 edit-
編輯給定物件(預設為
HEAD)的筆記。 show-
顯示給定物件(預設為
HEAD)的筆記。 merge-
將給定的筆記引用合併到當前的筆記引用中。這將嘗試合併自合併基礎(如果有)以來,由給定的筆記引用(稱為“遠端”)所做的更改到當前筆記引用(稱為“本地”)中。
如果出現衝突,並且未指定自動解決衝突筆記的策略(請參閱“NOTES MERGE STRATEGIES”部分),則使用
manual解析器。此解析器將在特殊工作樹(.git/NOTES_MERGE_WORKTREE)中檢出衝突的筆記,並指示使用者在那裡手動解決衝突。完成後,使用者可以使用gitnotesmerge--commit完成合並,或使用gitnotesmerge--abort中止合併。 remove-
刪除給定物件(預設為
HEAD)的筆記。當在命令列中提供零個或一個物件時,這等同於向edit子命令指定一個空筆記訊息。在
--stdin模式下,還會刪除標準輸入中提供的物件名稱。換句話說,--stdin可以與命令列中的物件名稱結合使用。 prune-
刪除所有不存在/不可達物件的筆記。
get-ref-
列印當前的筆記引用。這提供了一種從指令碼等地方檢索當前筆記引用的簡便方法。
選項
-f--force-
向已包含筆記的物件新增筆記時,覆蓋現有筆記(而不是中止)。
-m<msg>--message=<msg>-
使用給定的筆記訊息(而不是提示)。如果給出多個
-m選項,則將它們的值連線起來作為單獨的段落。 -F<file>--file=<file>-
從指定檔案中獲取筆記訊息。使用
-從標準輸入讀取筆記訊息。 -C<object>--reuse-message=<object>-
將給定的 blob 物件(例如,另一個筆記)用作筆記訊息。(使用
gitnotescopy<object> 而不是此選項來在物件之間複製筆記。)隱含--no-stripspace,因為預設行為是逐字複製訊息。 -c<object>--reedit-message=<object>-
類似於
-C,但使用-c會呼叫編輯器,以便使用者可以進一步編輯筆記訊息。 --allow-empty-
允許儲存空的筆記物件。預設行為是自動刪除空筆記。
--separator=<paragraph-break>--separator--no-separator-
指定一個用作自定義段落分隔符的字串(在需要時會在末尾新增換行符)。如果使用
--no-separator,則不會在段落之間新增分隔符。預設為一個空行。 --stripspace--no-stripspace-
清理空格。具體來說(請參閱 git-stripspace[1])
-
刪除所有行的尾隨空格
-
將連續的多個空行合併為一個空行
-
刪除輸入開頭和結尾的空行
-
如果需要,為最後一行新增一個缺失的 \n。
--stripspace是預設設定,除非使用-C/--reuse-message。但是,請記住,這取決於相似選項的順序。例如,對於-C<object>-m<message>,將使用--stripspace,因為-m的預設設定會覆蓋之前的-C。這是一個已知限制,未來可能會得到修復。 -
--ref=<ref>-
操作 <ref> 中的筆記樹。這將覆蓋
GIT_NOTES_REF和core.notesRef配置。如果引用以refs/notes/開頭,則指定完整引用名稱;如果以notes/開頭,則refs/和否則refs/notes/會被加上字首以形成引用的完整名稱。 --ignore-missing-
請求從沒有附加筆記的物件中刪除筆記時,不視為錯誤。
--stdin-
僅對
remove和copy有效。請參閱相應的子命令。 -n--dry-run-
不刪除任何內容;僅報告將要刪除筆記的物件名稱。
-s<strategy>--strategy=<strategy>-
合併筆記時,使用給定的策略解決筆記衝突。以下策略被識別:
manual(預設)、ours、theirs、union和cat_sort_uniq。此選項覆蓋notes.mergeStrategy配置設定。有關每種筆記合併策略的更多資訊,請參閱下面的“NOTES MERGE STRATEGIES”部分。 --commit-
完成正在進行的
gitnotesmerge。當您已解決gitnotesmerge儲存在.git/NOTES_MERGE_WORKTREE中的衝突後,請使用此選項。這將透過新增.git/NOTES_MERGE_WORKTREE中的筆記來修改由gitnotesmerge建立的部分合並提交(儲存在.git/NOTES_MERGE_PARTIAL中)。儲存在.git/NOTES_MERGE_REF符號引用中的筆記引用將被更新為結果提交。 --abort-
中止/重置正在進行的
gitnotesmerge,即帶有衝突的筆記合併。這只是刪除與筆記合併相關的所有檔案。 -q--quiet-
合併筆記時,安靜地操作。
-v--verbose-
合併筆記時,更詳細。修剪筆記時,報告所有將被刪除筆記的物件名稱。
討論
提交筆記是包含有關物件額外資訊的 blob(通常是補充提交訊息的資訊)。這些 blob 來自筆記引用。筆記引用通常是一個包含“檔案”的分支,其路徑是它們描述的物件的物件名稱,為提高效能會包含一些目錄分隔符[1]。
每一次筆記更改都會在指定的筆記引用處建立一個新的提交。因此,您可以透過呼叫例如 git log -p notes/commits 來檢查筆記的歷史記錄。目前,提交訊息僅記錄觸發更新的操作,提交作者是根據常規規則確定的(請參閱 git-commit[1])。這些細節未來可能會發生變化。
也允許筆記引用直接指向一個樹物件,在這種情況下,筆記的歷史記錄可以透過 git log -p -g <refname> 讀取。
NOTES MERGE STRATEGIES
預設的筆記合併策略是 manual,它在特殊工作樹(.git/NOTES_MERGE_WORKTREE)中檢出衝突的筆記,並指示使用者在該工作樹中解決衝突。完成後,使用者可以使用 git notes merge --commit 完成合並,或使用 git notes merge --abort 中止合併。
使用者可以透過 -s/--strategy 選項或透過配置 notes.mergeStrategy 來選擇以下自動化合並策略之一。
ours 自動解決衝突筆記,偏向於本地版本(即當前筆記引用)。
theirs 自動解決筆記衝突,偏向於遠端版本(即正在合併到當前筆記引用的給定筆記引用)。
union 自動解決筆記衝突,透過連線本地和遠端版本。
cat_sort_uniq 類似於 union,但除了連線本地和遠端版本外,此策略還會對結果行進行排序,並從結果中刪除重複的行。這等同於對本地和遠端版本應用“cat | sort | uniq”的 shell 管道。如果筆記遵循基於行的格式,並且您想避免在合併結果中出現重複行,則此策略非常有用。請注意,如果本地或遠端版本在合併前包含重複行,這些行也將被此筆記合併策略刪除。
示例
您可以使用筆記來新增在提交編寫時不可用的資訊註釋。
$ git notes add -m 'Tested-by: Johannes Sixt <j6t@kdbg.org>' 72a144e2
$ git show -s 72a144e
[...]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Notes:
Tested-by: Johannes Sixt <j6t@kdbg.org>
原則上,筆記是常規的 Git blob,可以接受任何格式(或非格式)。您可以使用 git hash-object 安全地建立二進位制筆記
$ cc *.c $ blob=$(git hash-object -w a.out) $ git notes --ref=built add --allow-empty -C "$blob" HEAD
(您不能簡單地使用 git notes --ref=built add -F a.out HEAD,因為它不是二進位制安全的。)當然,用 git log 顯示非文字格式的筆記沒有多大意義,因此如果您使用此類筆記,您可能需要編寫一些專用工具來處理它們。
配置
本節中此行以上的所有內容均未包含在 git-config[1] 文件中。以下內容與該文件中的內容相同
notes.mergeStrategy-
解決 notes 衝突時預設選擇的合併策略。必須是
manual、ours、theirs、union或cat_sort_uniq之一。預設為manual。有關每種策略的更多資訊,請參閱 git-notes[1] 的“NOTES MERGE STRATEGIES”部分。此設定可以透過向 git-notes[1] 傳遞
--strategy選項來覆蓋。 notes.<name>.mergeStrategy-
在將 notes 合併到
refs/notes/<name>時選擇的合併策略。這會覆蓋更通用的notes.mergeStrategy。有關可用策略的更多資訊,請參閱 git-notes[1] 的“NOTES MERGE STRATEGIES”部分。 notes.displayRef-
除了由
core.notesRef或GIT_NOTES_REF預設設定之外,還從哪個 ref(或 refs,如果是 glob 或指定多次)讀取 notes,用於在顯示提交訊息時(使用 git-log[1] 系列命令)。此設定可以透過
GIT_NOTES_DISPLAY_REF環境變數覆蓋,該變數必須是一個以冒號分隔的引用或 glob 列表。對於不存在的引用將發出警告,但與任何引用不匹配的 glob 將被靜默忽略。
此設定可以透過 git-log[1] 系列命令的
--no-notes選項停用,或透過這些命令接受的--notes=<ref>選項。core.notesRef的有效值(可能被GIT_NOTES_REF覆蓋)也會隱式新增到要顯示的引用列表中。 notes.rewrite.<command>-
使用 <command>(當前為
amend或rebase)重寫提交時,如果此變數為false,則 git 不會從原始提交複製 notes 到重寫的提交。預設為true。另請參閱下面的notes.rewriteRef。此設定可以透過
GIT_NOTES_REWRITE_REF環境變數覆蓋,該變數必須是一個以冒號分隔的引用或 glob 列表。 notes.rewriteMode-
複製重寫筆記時(請參閱
notes.rewrite.<command> 選項),確定在目標提交已包含筆記時應執行的操作。必須是以下值之一:overwrite、concatenate、cat_sort_uniq或ignore。預設為concatenate。此設定可以透過
GIT_NOTES_REWRITE_MODE環境變數覆蓋。 notes.rewriteRef-
在重寫期間複製備註時,指定(完全限定的)要複製備註的引用。可以是一個 glob,在這種情況下,所有匹配引用中的備註都將被複制。您也可以多次指定此配置。
沒有預設值;您必須配置此變數才能啟用備註重寫。將其設定為
refs/notes/commits以啟用預設提交備註的重寫。可以透過
GIT_NOTES_REWRITE_REF環境變數覆蓋。有關其格式的進一步描述,請參見上面的notes.rewrite.<command>。
環境變數
GIT_NOTES_REF-
操作筆記的引用,而不是
refs/notes/commits。這會覆蓋core.notesRef設定。 GIT_NOTES_DISPLAY_REF-
冒號分隔的引用列表或萬用字元,指示除了
core.notesRef或GIT_NOTES_REF的預設值外,還從哪些引用讀取筆記來顯示提交訊息。這會覆蓋notes.displayRef設定。對於不存在的引用將發出警告,但與任何引用不匹配的 glob 將被靜默忽略。
GIT_NOTES_REWRITE_MODE-
在重寫時複製筆記,如果目標提交已具有筆記,該如何處理。必須是
overwrite、concatenate、cat_sort_uniq或ignore之一。這會覆蓋core.rewriteMode設定。 GIT_NOTES_REWRITE_REF-
重寫提交時,從原始提交複製哪些筆記到重寫的提交。必須是冒號分隔的引用列表或萬用字元。
如果未在環境變數中設定,要複製的筆記列表取決於
notes.rewrite.<command> 和notes.rewriteRef設定。