如果您有这样的git提交树,会发生什么:
A-B-C-D D <-- v0.9 (tag)
Run Code Online (Sandbox Code Playgroud)
并且您接受一个pull请求,该请求的更改早于之前标记的提交; 标签现在是否包含合并拉取请求的提交?
A-F-B-G-C-D D <-- ? v0.9 (tag)
Run Code Online (Sandbox Code Playgroud)
在git中,标记指向特定的提交对象.如果您确实已经完成了,git pull --rebase那么您的图形如下所示:
A-B-C-D
A-F-B'-G-C'-D'
Run Code Online (Sandbox Code Playgroud)
实际的提交对象取决于树和父项的状态,因此即使从C到D的diff与C'和D'之间的diff完全相同,它们也是不同的提交对象.
因此,您的问题的答案是v0.9标签在第一次创建标签时始终指向D的版本.因此,如果您重写了历史记录,那么您将拥有一个标记,该标记指向不在当前分支树中的提交.
但是,如果你只是意味着有人已经提交并推送到FBG和C分支,那么在你推动BC和D之前,那么会发生什么将取决于当你做所需的拉动以更新你的时候你是做合并还是变基具有现有历史的本地分支.
默认是合并.这会使您的图形看起来像这样:
A-F-B-G-C
\ \
B-C-D---M
Run Code Online (Sandbox Code Playgroud)
你的分支头指向M并且树的每个分支中的B和C将是不同的(即使你们从其他地方挑选了相同的提交).
UPDATE
TL;博士: