git rebase会继承tag吗

LuckyOven's Blog / 2023-05-11 / 原文

git rebase过程中,默认情况下不会继承tag。这是因为rebase会生成全新的提交,覆盖原来的提交。
但是,我们可以使用git rebase --autosquash或git rebase --preserve-merges选项来保留tag。
--autosquash选项会将修订后的提交压缩成一条新提交。原来的tag会移到这条新提交上,从而实现tag的继承。
--preserve-merges选项会保留所有合并提交,不对其进行压缩。原来的tag也会保留在这些提交上。
例如,有这样的提交历史:

A - B - C - D - E   (master分支)
  \
    X - Y - Z      (feature分支)

feature分支上有tag v1.0和v2.0。
现在我们在feature分支上执行:

bash
git rebase --autosquash master

会生成这样的历史:

A - B - C - D - E   (master分支)
   \     
M     (tag v1.0, v2.0) 

可以看到,tag v1.0和v2.0都被移到新提交M上,实现了继承。
如果使用--preserve-merges选项:

bash 
git rebase --preserve-merges master

会生成:

A - B - C - D - E   (master分支)
   \  
X    (tag v1.0)
Y 
Z   (tag v2.0)

tag v1.0和v2.0也都被保留在原提交上,实现继承。
所以,总结来说:
要在git rebase过程中继承tag,可以使用:

  1. --autosquash 选项,会将新旧提交压缩,tag移至新提交,实现继承
  2. --preserve-merges选项,会保留所有提交不变,tag也不变,继承实现
  3. 默认rebase选项,不会继承tag