问题 我应该如何将更改从一个提交移动到另一个提交?


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


1955
2018-03-05 00:41


起源

你可以检查git rebase 这里 - rumman0786
这个问题是“使用Git将我的最后一次X提交压缩”的一个特例 stackoverflow.com/questions/5189560/... - Andrew Palmer


答案:


如果它们是小型提交,并且git中的提交总是很小,那么最简单的方法就是 git reset HEAD^^ 然后再做一次。请注意,任何解决方案都涉及重写历史记录,如果您已经将这些提交推送到某个地方,除非您知道自己在做什么,否则不应该这样做。


7
2018-03-05 00:51



“并且提交应该总是小的git”当然...... - Betamos


我写了一个脚本来达到这个目的。你可以结帐 这里

使用脚本就像下面这样简单:

mv-changes HEAD~ HEAD fileA

4
2018-01-31 20:28



奇迹般有效 - Ishan Srivastava


相关的答案,但基本上你Squash和Rebase。

看这里: http://davidwalsh.name/squash-commits-git


0
2018-03-05 00:43





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

在更有可能的事件中,您已经过去并且提交在过去的某个时刻,变基是您的最佳选择。在不知道您的确切情况的情况下,引用一个解释得很好的参考可能是最好的。

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

6.4 Git工具 - 重写历史


0
2018-03-05 02:28





这个问题的另一个解决方案

  • 在两次提交之前找到提交(可能这是主分支)
  • git rebase -i <commit before commits to be reordered> (git rebase -i master 在多数情况下)
  • 在文本编辑器中,交换提交的顺序(对于vim,使用序列 ddp 在应该向下移动的线上)
  • 保存,退出,让git rebase完成剩下的工作

0
2018-02-18 01:52