2013-03-05 62 views
6

我有两个提交在同一分支,一个接一个。我将文件A的更改添加到第一次提交中,然后对其他文件进行了一些更改,然后再进行了一次提交。现在我希望文件A的更改在第二次提交而不是第一次提交。什么是最优雅的方式?我应该如何将更改从一个提交移动到另一个提交?

+1

你可以检查git的变基[这里](https://git-scm.com/docs/git-rebase#_splitting_commits) – rumman0786 2017-04-21 16:15:14

+0

这个问题是“挤压我最后一个X使用Git一起提交”的特例https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using - git – 2017-05-24 20:41:03

回答

6

如果他们是小提交,并承诺应始终小混帐,最简单的办法就是git reset HEAD^^,然后就再次做他们。请注意,任何解决方案都涉及重写历史记录,如果您已经在某处推送了这些提交,那么除非您知道自己在做什么,否则不应该这样做。

+2

“和提交应该总是小git” 当然... – Betamos 2017-11-03 02:24:21

0

在刚刚创建这些提交的事件中,撤消第二次提交git reset HEAD^,然后将更改添加到第一次提交git commit --amend

在更有可能发生的事件中,您已经提交并且提交过去的某个时间点,重新分配是您的最佳选择。如果不知道确切的情况,引用一个可以解释它的参考文献可能是最好的。

在第一个和第二个事件中,Pro Git书籍关于重写历史的部分都很好地解释了这些选项 - 无论是何时应该使用它们,以及何时应该谨慎使用。

6.4 Git Tools - Rewriting History

3

我写了一个脚本,以满足这一目的。你可以结帐here

使用脚本这将是这么简单:

mv-changes HEAD~ HEAD fileA 
0

另一种解决这个问题

  • 找到刚才的两次提交(可能这是master分支)
  • 之前提交
  • 运行git rebase -i <commit before commits to be reordered>(大多数情况下为git rebase -i master
  • 在文本编辑器中,交换提交的顺序(对于vim,请使用sequ ENCE ddp而上线应该下移)
  • 保存,退出,并让git的底垫做休息
相关问题