Git在标记上重新设置基础,而不是单个提交

Git在标记上重新设置基础,而不是单个提交,git,git-rebase,git-commit,git-tag,Git,Git Rebase,Git Commit,Git Tag,我有一个项目,其中我的开发分支在我的稳定分支之前有两个标记版本,但我想删除第一个标记的更改集(这是我不再需要的一系列功能),但将最新标记的更改(第二个标记)应用到稳定标记上 例如: 承诺: [tag] 3.0 - sdaf213 Some Commit of the tag 3 sdaas34 Some other commit in this tag [tag] 2.0 - wert78 Some commit of tag 2 werg99 Another commit of tag 2

我有一个项目,其中我的开发分支在我的稳定分支之前有两个标记版本,但我想删除第一个标记的更改集(这是我不再需要的一系列功能),但将最新标记的更改(第二个标记)应用到稳定标记上

例如:

承诺:

[tag] 3.0 - 
sdaf213 Some Commit of the tag 3
sdaas34 Some other commit in this tag
[tag] 2.0 -
wert78 Some commit of tag 2
werg99 Another commit of tag 2
werh55 And another of tag 2
[tag] 1.0 (Stable) -
pry77 Commits of tag 1
...older commits

是否有一种方法可以在标记上重新设置基址而不是提交,这样我就可以在[tag]1.0的基础上重新设置[tag]3.0的所有提交的基址,但排除[tag]2.0中的所有内容?

您只需通过以下方法即可:

git rebase --onto 1.0 2.0 BRANCH
其中BRANCH是要应用重基的分支的名称

这将使用1.0标记作为父标记,然后按顺序重播3.0标记的提交:

sdaf213 Some Commit of the tag 3
sdaas34 Some other commit in this tag
1.0 (Stable) -
pry77 Commits of tag 1
...older commits
如您所见,3.0标记将不会重新应用到历史记录的末尾。您将不得不创建一个新的,尽管这是有意义的,因为历史已经改变,您可能希望使这2.1或3.1适合您的需要

此外,您可以在一系列标记上使用它。例如,如果您现在使用[tag]4.0,并且希望摆脱[tag]2.0和3.0:

git rebase --onto 1.0 3.0 BRANCH
标记是提交的(标识符)。您几乎总是可以使用标记而不是SHA