2014-03-12 68 views
10

我做了一個承諾,但現在它是一種很難看到什麼我都變了。我可以關閉過程做一個git的差異,但我寧願撤消最後一次提交,並讓我的機智所有的變化,使我的IDE(PyCharm)只是表明我哪些文件已被更改。如何撤消git中的最後一個提交,但保留我的更改爲unstaged?

那麼,有沒有辦法撤消上次提交(真的將其刪除),但仍保持我的變化機智?歡迎所有提示!

+2

小一點:你真的不永遠_remove_從git的歷史承諾。相反,你刪除指向它們的指針(即分支)。最終他們將被垃圾收集。如果你搞砸了某些東西並想回去,你可以在'reflog'中找到這些懸而未決的提交。 –

回答

8

這聽起來像git reset --soft工作,他們的幫助(git help reset)這樣說:

--soft 
    Does not touch the index file nor the working tree at all 
    (but resets the head to <commit>, just like all modes do). 
    This leaves all your changed files "Changes to be 
    committed", as git status would put it. 

所以提交被撤銷,但文件仍然期待他們之前的方式。沒有什麼東西上演到索引。

+0

我只是跑'git的復位--soft',但是當我運行'git hist'我仍然看到我的最後一次提交的在那裏。所以我想這不是我的問題的解決方案。任何其他想法? – kramer65

+1

提交仍在歷史中,但「HEAD」不再指向它。這是一個懸而未決的參考,並將被垃圾收集。 –

+1

作爲提示;最後通過'git reset --soft <最後提交的散列>'成功完成。插入已經爲我解決了。不管怎麼說,還是要謝謝你! – kramer65

2

正如彼得說,我會跟git reset --soft去這應該離開你的這兩個指標,在機智工作目錄。在你的情況下,如果你想返回1提交,你可以使用git reset --soft HEAD~指向當前HEAD的父提交的分支;您的索引和工作目錄仍將包含您更改的文件。

約重置一個方便的文章:http://git-scm.com/blog/2011/07/11/reset.html

4

我想撇下了--soft在其他兩個答案,一個簡單的git reset @^去(或git reset HEAD^在舊版本的Git),這將默認爲git reset --mixed @^。不同之處在於軟重置會使文件進行提交,這不像您想要的那樣。如果你真的想撤銷提交,你應該也可以取消這些更改,這是默認的做法。在一般情況下,我發現這比軟重置更有用,這可能是爲什麼混合是默認設置。

+0

這應該是被接受的答案 - 更簡單,正是OP想要的。 – chetstone