我做了一個承諾,但現在它是一種很難看到什麼我都變了。我可以關閉過程做一個git的差異,但我寧願撤消最後一次提交,並讓我的機智所有的變化,使我的IDE(PyCharm)只是表明我哪些文件已被更改。如何撤消git中的最後一個提交,但保留我的更改爲unstaged?
那麼,有沒有辦法撤消上次提交(真的將其刪除),但仍保持我的變化機智?歡迎所有提示!
我做了一個承諾,但現在它是一種很難看到什麼我都變了。我可以關閉過程做一個git的差異,但我寧願撤消最後一次提交,並讓我的機智所有的變化,使我的IDE(PyCharm)只是表明我哪些文件已被更改。如何撤消git中的最後一個提交,但保留我的更改爲unstaged?
那麼,有沒有辦法撤消上次提交(真的將其刪除),但仍保持我的變化機智?歡迎所有提示!
這聽起來像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.
所以提交被撤銷,但文件仍然期待他們之前的方式。沒有什麼東西上演到索引。
正如彼得說,我會跟git reset --soft
去這應該離開你的這兩個指標,在機智工作目錄。在你的情況下,如果你想返回1提交,你可以使用git reset --soft HEAD~
指向當前HEAD的父提交的分支;您的索引和工作目錄仍將包含您更改的文件。
我想撇下了--soft
在其他兩個答案,一個簡單的git reset @^
去(或git reset HEAD^
在舊版本的Git),這將默認爲git reset --mixed @^
。不同之處在於軟重置會使文件進行提交,這不像您想要的那樣。如果你真的想撤銷提交,你應該也可以取消這些更改,這是默認的做法。在一般情況下,我發現這比軟重置更有用,這可能是爲什麼混合是默認設置。
這應該是被接受的答案 - 更簡單,正是OP想要的。 – chetstone
小一點:你真的不永遠_remove_從git的歷史承諾。相反,你刪除指向它們的指針(即分支)。最終他們將被垃圾收集。如果你搞砸了某些東西並想回去,你可以在'reflog'中找到這些懸而未決的提交。 –