3

我创建了一个 git 标签,但随后我做了一些其他的提交,其中一个需要在标签中,其他的则不需要。

例如:

git commit 123
git commit 456
git commit 789
git commit 1011
git commit 1213

我在 point 处做了一个标签1011,但现在我想添加提交123,而不是介于两者之间的任何一个。有什么办法吗?

4

3 回答 3

10

从您的标签开始,您需要挑选要包含的单个提交。然后,您将移动标签以指向新状态。

git checkout my_tag
git cherry-pick commit_123
git tag -f my_tag

将标签视为分支可能会有所帮助。就像分支一样,标签是指提交历史中的特定点。所以你想要做的是有效地创建一个具有不同提交历史的新分支,然后标记该新状态。检查你当前的标签会让你回到原来的点,cherrypicking 拉入你想要添加的单个提交,然后重新标记保存新的分支状态。您需要-f“移动”标签的选项,否则您会收到tag 'my_tag' already exists错误消息。

于 2012-07-20T18:42:41.070 回答
7

我认为您的术语混淆了。

  • 标签是附加到单个提交的字符串标签。它不“包含”提交,它只是命名被标记的提交的另一种方式。
  • 分支是一组有序的提交,使用git commit时会将提交添加到当前分支。

目前尚不清楚您是否只是指分支而不是标签,或者您是否在问为什么 eg 的输出git log mytag显示自 1011 年以来的所有提交。

git log mytag将记录标记为的提交mytag及其所有父项。

如果您的意思是分支并且您创建的分支在其历史记录中尚未包含提交 123,那么您可以git cherry-pick

写这篇文章,我意识到您可能还意味着如何将提交 123 添加到由git log mytag. 为此,您需要在该点创建一个新分支git checkout -b mybranch mytag,然后樱桃选择提交 123,然后将标签移动到新提交,使用git tag -f. 然后你可以回到你以前的分支(例如git checkout master)。然后,您以前的分支将有不同的历史,分支已经分道扬镳。

于 2012-07-20T18:34:05.730 回答
0

如果所有更改仍然是本地的,您应该能够压缩1213提交1011并重新标记压缩的提交。

于 2012-07-20T18:34:00.243 回答