git rebase会继承tag吗

先说结论:
假如在feature分支上 rebase master分支,master上的tag可以被继承,但feature上的tag不会被继承,除非指定相应参数才可以被继承
rebase的时候会将master分支上的commit按照提交顺序在不改变commit的情况下放到feature分支下,但是feature分支下
原来的commit会重新生成,由于tag是跟commit绑定的,所以rebase的时候master分支上的tag会被继承到feature分支

如果现在有master分支和feature分支,在feature分支上rebase master分支,
会发现master上那些commit-id rebase后不会变,在master上打的tag也会被继承,
但feature上的commit id都变了,生成了新的提交,所以feature上的tag不会被继承

但是,我们可以使用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

posted @ 2023-05-11 09:39  LuckyOven  阅读(126)  评论(0)    收藏  举报