如何取消本地git提交

個人問題是我已經更改了一個文件,例如:README, 爲個人測試行添加了一行新 '並保存了文件,而後我發出瞭如下命令 php

git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

我沒有將代碼推送到github,如今我想取消這個提交。 git

爲此我用過 github

git reset --hard HEAD~1

可是我從README文件中丟失了新增的「 個人測試行 」。 這不該該發生。 我須要內容。 有沒有辦法保留內容並取消個人本地提交? vim


#1樓

使用--soft而不是--hard標誌: app

git reset --soft HEAD^

#2樓

若是您正處於提交的中間(即已在編輯器中),則能夠經過刪除第一個#上方的全部行來取消它。 這將停止提交。 編輯器

所以,您能夠刪除全部行,以便提交消息爲空,而後保存文件: 測試

它看起來應該是這樣的。

而後,您將收到一條消息,指出Aborting commit due to empty commit message.spa

編輯code

您也能夠刪除全部行,結果將徹底相同。 索引

要刪除vim中的全部行(若是這是您的默認編輯器),一旦進入編輯器,鍵入gg轉到第一行,而後鍵入dG刪除全部行。 最後,使用wq寫入並退出文件,您的提交將被停止。


#3樓

只需使用沒有--hard標誌的git reset

git reset HEAD~1

PS:在基於Unix的系統上,你可使用等於HEAD~1 HEAD^ 。 在Windows上, HEAD^將沒法工做,由於^表示行繼續。 因此你的命令提示符只會問你More?


#4樓

使用下面的命令:$ git reset HEAD~1以後你還能夠查看文件恢復以下面的響應。

重置後的未分級更改:M application / config / config.php M application / config / database.php


#5樓

您能夠經過使用如下參數之一告訴Git如何處理索引(將成爲下一個提交的文件集)和工做目錄:

--soft :只會--soft提交,而不會更改索引和工做目錄。

--mixed :這將重置索引以匹配HEAD,而不會觸及工做目錄。 全部更改都將保留在工做目錄中並顯示爲已修改。

--hard :它重置全部內容(提交,索引,工做目錄)以匹配HEAD。

在您的狀況下,我會使用git reset --soft來保留您在Index和工做目錄中修改的更改。 請務必查看此內容以獲取更詳細的說明。

相關文章
相關標籤/搜索