2010-10-13 27 views
110

我經常會有類似下面的工作流程:修改提交,這不是以前的承諾

  1. 提交更改一組文件的
  2. 提交更改到不同的文件組
  3. 實現我錯過了在屬於一些變化第一次提交
  4. 詛咒

我不能利用git commit --amend因爲它不是TH e最近需要更改的提交。在不觸及第二個提交的情況下將最新提交的更改添加到的最佳方式是什麼?

+1

另請參閱http://stackoverflow.com/questions/3940266/edit-the-commit-message-of-any-commit/3940887#3940887瞭解腳本版本。 – VonC 2010-10-15 09:15:03

+2

我爲此目的創建了一個Bash腳本:https://github.com/colinodell/git-amend-old安裝完成後,您可以像這樣使用它:'git amend-old abcd123',其中'abcd123 '是你想要修改你的階段性變化的舊承諾。希望有人認爲它有用! – 2014-05-27 17:56:41

回答

148

您可以使用git rebase來解決這個問題。運行git rebase -i sha1~1其中sha1是您想要更改的提交散列。找到您想要更改的提交,並用「編輯」替換「選擇」,如rebase編輯器的評論中所述。當你從那裏繼續時,你可以編輯該提交。

請注意,這將改變該提交的sha1以及所有子項 - 換句話說,這將重寫該點的歷史。你可以打破這樣做的倉庫,但如果你沒有推,這不是什麼大不了的事情。

+26

@rspeicher:您可能還想檢查'HEAD〜N',而不是'sha1',其中N是您希望開始變形的'HEAD'之前的提交數量。 – 3lectrologos 2010-10-13 18:46:04

+0

看起來像它。謝謝! – 2010-10-13 18:47:13

+0

@ 3lectrologos或任何其他提交方式: – MatrixFrog 2010-11-25 07:54:20