在Git中间添加对提交的更改

时间:2011-08-04 14:13:19

标签: git

如何将新更改添加到中间的提交中,我的意思是不添加到顶部提交。

git log
commit1 <--- HEAD
commit2
commit3

如何直接将更改添加到commit3,而不删除commit1和commit2,然后将更改添加到commit3。

我需要使用藏匿处吗?

如果可能,请提供链接。

4 个答案:

答案 0 :(得分:13)

你必须做一个互动的rebase。有关详细信息,请阅读git rebase的帮助页面。简短的回答是,您将继续像往常一样提交“中间”更改,然后运行git rebase -i HEAD~4。它将在文本编辑器中显示最后3个提交的列表。只需重新排序最新提交放在中间的提交,然后保存并退出编辑器。然后Git将尝试以新顺序重建历史记录。它可能因冲突而停止。如果是这样,请像修改合并冲突一样修复它们,然后在修复并添加后运行git rebase --continue。当你遇到冲突时它会告诉你所有这些,所以只需阅读错误信息就可以了。

编辑:实际上,您似乎想要编辑现有提交。在这种情况下,当编辑器出现时,将新的临时提交移到commit3旁边,然后将命令从“pick”更改为“squash”:

pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1

EDIT2:如果分支和commit1,commit2和commit3已经公开,那么你不应该进行变基。再说一遍,你不应该修改提交,所以整个问题都没有实际意义。我假设这是一个私人分支,或者其他人希望被重新定位和重绕的分支。

答案 1 :(得分:8)

您可以使用git-rebase执行此操作:

git rebase -i commit3^

在弹出的文件中,将pick commit3更改为edit commit3。保存并退出,然后进行更改。像往常一样提交它们,然后使用git rebase --continue。完成后,您将看到commit3和commit2之间的新变化。

(这将与Sjoerd的答案相同;它只是一种不同的思考方式。如果你的变化与commit2冲突,你将不得不处理这两种方式。)

答案 2 :(得分:2)

创建一个新分支,它是commit3的副本。添加您的更改并提交。然后,将commit2和commit1合并到该分支。

答案 3 :(得分:0)

您可以使用git reset --soft HEAD [commit3-hash]。该命令从历史记录中删除了commit1和commit2,但其更改仍然存在。