如果你有一个这样的 git commit 树会发生什么:
A-B-C-D D <-- v0.9 (tag)
并且您接受了一个拉取请求,该请求的更改早于先前标记的提交;标签现在是否包含来自合并拉取请求的提交?
A-F-B-G-C-D D <-- ? v0.9 (tag)
如果你有一个这样的 git commit 树会发生什么:
A-B-C-D D <-- v0.9 (tag)
并且您接受了一个拉取请求,该请求的更改早于先前标记的提交;标签现在是否包含来自合并拉取请求的提交?
A-F-B-G-C-D D <-- ? v0.9 (tag)
在 git 中,标签指向特定的提交对象。如果您实际上已经完成了,git pull --rebase
那么您的图表如下所示:
A-B-C-D
A-F-B'-G-C'-D'
实际的提交对象取决于树的状态和父系,因此即使从 C 到 D 的差异与 C' 和 D' 之间的差异完全相同,它们也是不同的提交对象。
因此,您的问题的答案是,该v0.9
标签将始终指向第一次创建标签时的 D 版本。因此,如果您重写了历史记录,您将拥有一个标签,该标签指向一个不再位于当前分支树中的提交。
但是,如果您的意思是在您推送 BC 和 D 之前有人已经提交并推送到分支 FBG 和 C,那么会发生什么将取决于您在执行所需的 pull 以更新您的具有现有历史的本地分支机构。
默认是合并。这将使您的图表如下所示:
A-F-B-G-C
\ \
B-C-D---M
您的分支头指向 M 的位置,而树的每个分支中的 B 和 C 会有所不同(即使您俩都从其他地方挑选了相同的提交)。
更新
tl;博士: