2013-03-05 11 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的底墊做休息
相關問題