压缩提交的标签会怎样?

What happens to tags of squashed commits?

如果我提交 A 标记了标签,例如tag-A,然后下一个提交 B 标记为 tag-B;如果我压缩这 2 个提交,标签会发生什么?两者都会分配给压缩的提交吗?

Will both be assigned to the squashed commit?

没有。

每个标签都指向一个特定的提交,并且它永远不会自行离开该提交。每个标签指向的提交仍然存在,只是不在您的任何分支中。

压缩两个提交创建一个单独的新提交,只有 原始提交的内容。这个新提交将没有任何标记指向它。


您可以手动移动这两个标签以指向您的新提交:

git tag -f tag-A
git tag -f tag-B

标签不会移动,因为 rebase 会重写历史记录。原始提交将具有标签,因为标签不会移动。这是一张照片:

之前:

(HEAD) B - tag-B
       |
       A - tag-A
       |
       X

之后:

         B - tag-B
         |
(HEAD) C A - tag-A
       |/
       X

这里CAB的南瓜。它开始了一个全新的历史,其中 AB 将不会参与。分支负责人将移至 C 并从那里继续。