git rebase会继承tag吗
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,可以使用:
- --autosquash 选项,会将新旧提交压缩,tag移至新提交,实现继承
- --preserve-merges选项,会保留所有提交不变,tag也不变,继承实现
- 默认rebase选项,不会继承tag