2010-12-21 58 views
15

我編輯的文件和所做的:我怎樣才能撤消我最後的git添加/提交?

git add file.py 
git commit -m 'fixed bug' 

我然後編輯另一個文件,並進行了小的bug修復。我不需要兩次提交,一個接一個地顯示'錯誤修復'。我想要一個提交'錯誤修復'。

如何撤銷上次添加/提交併更改第一個提交消息?

我一直在尋找在git resetgit revertgit undo命令,但我不想搞砸了我的回購帶猜

編輯:發現瞭如何做到這一點:http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

回答

26

如果你已經COMMITED你的第二個變化,第一復位:

git reset HEAD^ 

現在你HEAD是在第一次提交,你的本地文件的內容是不變的。

git add <the file(s) for the second bug fix> 
git commit --amend -m'bug fixes' 

如果所有跟蹤和更改的文件將被列入第二bug修復,可以改爲運行此,像往常一樣:

git commit -a --amend 

修訂提交正是這樣:

  • 將索引中的更改添加到以前的提交中(因此需要git add-a
  • 允許您將c更新你的提交信息

但要小心:如果你發佈了第一次提交,其他人的回購將會變得很奇怪。你不應該改變其他人提交的提交。


你也很可能使用git merge --squash,感覺更符合邏輯,但不一定容易。用它來合併一個包含你的兩個提交的分支,直到前一個提交。

擠壓與git rebase一起工作。

+0

隨着我編輯的兩個I文件,我已經做了'git add file; git commit'。做'git --amend -m'asd''只會編輯我以前的提交信息,不是嗎?離開日誌中的第一次提交? – dave 2010-12-21 10:32:28

+0

不,'--amend'將索引的內容添加到新創建的提交中。舊的提交消失(變得懸而未決)。很有可能您仍然可以在gitk中看到它,在gitk中運行重新加載(Ctrl + F5)以使其消失。稍後的懸掛提交會從內存中消失('git gc'應該清理掉)。 – Gauthier 2010-12-21 10:33:52

+0

你已經做過兩次了嗎?在這種情況下,你可以在'git reset HEAD ^'之前使用上面的命令。在做所有這些事情之前請先備份你的repo(確保文件夾.git在你的備份中),我不想對數據丟失負責。 – Gauthier 2010-12-21 10:38:23