設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
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
概要
git
notes
[list
[<object>]]git
notes
add
[-f
] [--allow-empty
] [--
[no-
]separator
|--separator=
<paragraph-break>] [--
[no-
]stripspace
] [-F
<file> |-m
<msg> | (-c
|-C
) <object>] [-e
] [<object>]git
notes
copy
[-f
] (--stdin
| <from-object> [<to-object>] )git
notes
append
[--allow-empty
] [--
[no-
]separator
|--separator=
<paragraph-break>] [--
[no-
]stripspace
] [-F
<file> |-m
<msg> | (-c
|-C
) <object>] [-e
] [<object>]git
notes
edit
[--allow-empty
] [<object>] [--
[no-
]stripspace
]git
notes
show
[<object>]git
notes
merge
[-v
|-q
] [-s
<strategy> ] <notes-ref>git
notes
merge
--commit
[-v
|-q
]git
notes
merge
--abort
[-v
|-q
]git
notes
remove
[--ignore-missing
] [--stdin
] [<object>…]git
notes
prune
[-n
] [-v
]git
notes
get-ref
描述
新增、移除或讀取附加到物件的備註,而不更改物件本身。
預設情況下,備註儲存到 refs/notes/commits
並從中讀取,但此預設值可以被覆蓋。請參閱下面的 OPTIONS、CONFIGURATION 和 ENVIRONMENT 部分。如果此引用不存在,則在首次需要儲存備註時會靜默建立。
備註的一個典型用途是補充提交訊息,而不更改提交本身。備註可以透過 git
log
與原始提交訊息一起顯示。為了區分這些備註與提交物件中儲存的訊息,備註會像訊息一樣縮排,前面有一行不縮排的“Notes (<refname>):”(或者對於 refs/notes/commits
來說是“Notes:”)。
備註也可以透過使用 --notes
選項新增到使用 git
format-patch
準備的補丁中。此類備註作為補丁註釋新增在三條破折號分隔線之後。
要更改 git
log
顯示哪些備註,請參閱 CONFIGURATION 中 notes.displayRef
的討論。
請參閱 notes.rewrite.
<command> 配置,瞭解如何在重寫提交的命令中保留備註。
子命令
list
-
列出給定物件的備註物件。如果未給定物件,則顯示所有備註物件及其註釋的物件列表(格式為“<note-object> <annotated-object>”)。這是未給定子命令時的預設子命令。
add
-
為給定物件(預設為
HEAD
)新增備註。如果物件已有備註則中止(使用-f
覆蓋現有備註)。但是,如果您以互動方式使用add
(使用編輯器提供備註內容),則 - 不會中止 - 現有備註將在編輯器中開啟(類似於edit
子命令)。如果您指定多個-m
和-F
,則訊息之間會插入一個空行。使用--separator
選項插入其他分隔符。您可以使用-e
在新增備註之前互動式地(使用編輯器)編輯和微調從-m
和-F
選項提供的訊息。 copy
-
將第一個物件的備註複製到第二個物件(預設為
HEAD
)。如果第二個物件已有備註,或者第一個物件沒有備註,則中止(使用-f
覆蓋第二個物件的現有備註)。此子命令等同於:git
notes
add
[-f
]-C
$
(git
notes
list
<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
-
將給定的備註引用合併到當前備註引用中。這將嘗試將給定備註引用(稱為“遠端”)自合併基礎(如果有)以來的更改合併到當前備註引用(稱為“本地”)中。
如果發生衝突且未給定自動解決衝突備註的策略(參見“備註合併策略”部分),則使用
manual
解決器。此解決器將在特殊工作區(.git/NOTES_MERGE_WORKTREE
)中檢出衝突的備註,並指示使用者在那裡手動解決衝突。完成後,使用者可以使用git
notes
merge
--commit
完成合並,或使用git
notes
merge
--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 物件(例如,另一條備註)作為備註訊息。(使用
git
notes
copy
<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
配置設定。有關每種備註合併策略的更多資訊,請參閱下面的“備註合併策略”部分。 --commit
-
完成正在進行的
git
notes
merge
。當您已解決git
notes
merge
儲存在.git/NOTES_MERGE_WORKTREE
中的衝突時,使用此選項。這會透過新增.git/NOTES_MERGE_WORKTREE
中的備註來修改由git
notes
merge
建立的部分合並提交(儲存在.git/NOTES_MERGE_PARTIAL
中)。儲存在.git/NOTES_MERGE_REF
符號引用中的備註引用將更新為結果提交。 --abort
-
中止/重置正在進行的
git
notes
merge
,即有衝突的備註合併。這隻會移除所有與備註合併相關的檔案。 -q
--quiet
-
合併備註時,靜默操作。
-v
--verbose
-
合併備註時,更詳細地操作。修剪備註時,報告所有被移除備註的物件名稱。
討論
提交備註是包含物件額外資訊(通常是補充提交訊息的資訊)的 Git blob。這些 blob 取自備註引用。備註引用通常是一個分支,其中包含“檔案”,其路徑是它們所描述的物件的物件名稱,並出於效能原因包含一些目錄分隔符[1]。
每次備註更改都會在指定備註引用上建立一個新提交。因此,您可以透過呼叫例如 git
log
-p
notes/commits
來檢查備註的歷史記錄。目前,提交訊息僅記錄觸發更新的操作,提交作者由通常的規則確定(參見 git-commit[1])。這些細節將來可能會改變。
還允許備註引用直接指向一個樹物件,在這種情況下,備註的歷史記錄可以透過 git
log
-p
-g
<refname> 讀取。
備註合併策略
預設的備註合併策略是 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
-
解決備註衝突時預設選擇的合併策略。必須是
manual
、ours
、theirs
、union
或cat_sort_uniq
之一。預設為manual
。有關每種策略的更多資訊,請參閱 git-notes[1] 的“備註合併策略”部分。此設定可以透過向 git-notes[1] 傳遞
--strategy
選項來覆蓋。 notes.
<name>.mergeStrategy
-
當將備註合併到
refs/notes/
<name> 時選擇的合併策略。這會覆蓋更通用的notes.mergeStrategy
。有關可用策略的更多資訊,請參閱 git-notes[1] 的“備註合併策略”部分。 notes.displayRef
-
除了由
core.notesRef
或GIT_NOTES_REF
設定的預設集合之外,在使用git
log
系列命令顯示提交訊息時,從哪個引用(或多個引用,如果是 glob 或多次指定)讀取備註。此設定可以透過
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 將不會將備註從原始提交複製到重寫後的提交。預設為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
-
冒號分隔的引用或 glob 列表,指示除了
core.notesRef
或GIT_NOTES_REF
的預設值之外,在顯示提交訊息時從哪些引用讀取備註。這會覆蓋notes.displayRef
設定。對於不存在的引用將發出警告,但與任何引用不匹配的 glob 將被靜默忽略。
GIT_NOTES_REWRITE_MODE
-
在重寫期間複製備註時,如果目標提交已包含備註,則如何處理。必須是
overwrite
、concatenate
、cat_sort_uniq
或ignore
之一。這會覆蓋core.rewriteMode
設定。 GIT_NOTES_REWRITE_REF
-
重寫提交時,將哪些備註從原始提交複製到重寫後的提交。必須是冒號分隔的引用或 glob 列表。
如果在環境中未設定,要複製的備註列表取決於
notes.rewrite.
<command> 和notes.rewriteRef
設定。