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