压缩提交的标签会发生什么?

Jim*_*Jim 11 git git-commit git-tag git-squash

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

Mad*_*ist 10

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

前:

(HEAD) B - tag-B
       |
       A - tag-A
       |
       X
Run Code Online (Sandbox Code Playgroud)

后:

         B - tag-B
         |
(HEAD) C A - tag-A
       |/
       X
Run Code Online (Sandbox Code Playgroud)

这里C是壁球AB。它开始了一个全新的历史,在其中A并且B不会参与。分支负责人将移到C那里并从那里继续。


Jos*_*ber 7

两者都会被分配给压缩的提交吗?

不。

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

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


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

git tag -f tag-A
git tag -f tag-B
Run Code Online (Sandbox Code Playgroud)