如何将新更改添加到中间的提交中,我的意思是不添加到顶部提交。
git log
commit1 <--- HEAD
commit2
commit3
如何直接将更改添加到commit3,而不删除commit1和commit2,然后将更改添加到commit3。
我需要使用藏匿处吗?
如果可能,请提供链接。
答案 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,但其更改仍然存在。