個人問題是我已經更改了一個文件,例如: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
使用--soft
而不是--hard
標誌: app
git reset --soft HEAD^
若是您正處於提交的中間(即已在編輯器中),則能夠經過刪除第一個#
上方的全部行來取消它。 這將停止提交。 編輯器
所以,您能夠刪除全部行,以便提交消息爲空,而後保存文件: 測試
而後,您將收到一條消息,指出Aborting commit due to empty commit message.
。 spa
編輯 : code
您也能夠刪除全部行,結果將徹底相同。 索引
要刪除vim中的全部行(若是這是您的默認編輯器),一旦進入編輯器,鍵入gg
轉到第一行,而後鍵入dG
刪除全部行。 最後,使用wq
寫入並退出文件,您的提交將被停止。
只需使用沒有--hard
標誌的git reset
:
git reset HEAD~1
PS:在基於Unix的系統上,你可使用等於HEAD~1
HEAD^
。 在Windows上, HEAD^
將沒法工做,由於^
表示行繼續。 因此你的命令提示符只會問你More?
。
使用下面的命令:$ git reset HEAD~1以後你還能夠查看文件恢復以下面的響應。
重置後的未分級更改:M application / config / config.php M application / config / database.php
您能夠經過使用如下參數之一告訴Git如何處理索引(將成爲下一個提交的文件集)和工做目錄:
--soft
:只會--soft
提交,而不會更改索引和工做目錄。
--mixed
:這將重置索引以匹配HEAD,而不會觸及工做目錄。 全部更改都將保留在工做目錄中並顯示爲已修改。
--hard
:它重置全部內容(提交,索引,工做目錄)以匹配HEAD。
在您的狀況下,我會使用git reset --soft
來保留您在Index和工做目錄中修改的更改。 請務必查看此內容以獲取更詳細的說明。