Git修改最后一次提交

Git修改最后一次提交

有時候我們提交完了才發(fā)現(xiàn)漏掉了幾個文件沒有加,或者提交信息寫錯了。想要撤消剛才的提交操作,可以使用--amend選項重新提交:

$ git commit --amend

此命令將使用當前的暫存區(qū)域快照提交。如果剛才提交完沒有作任何改動,直接運行此命令的話,相當于有機會重新編輯提交說明,而所提交的文件快照和之前的一樣。

啟動文本編輯器后,會看到上次提交時的說明,編輯它確認沒問題后保存退出,就會使用新的提交說明覆蓋剛才失誤的提交。

如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,然后再運行--amend提交:

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

上面的三條命令最終得到一個提交,第二個提交命令修正了第一個的提交內(nèi)容。

取消已經(jīng)暫存的文件

接下來的兩個小節(jié)將演示如何取消暫存區(qū)域中的文件,以及如何取消工作目錄中已修改的文件。不用擔心,查看文件狀態(tài)的時候就提示了該如何撤消,所以不需要死記硬背。來看下面的例子,有兩個修改過的文件,我們想要分開提交,但不小心用git add *全加到了暫存區(qū)域。該如何撤消暫存其中的一個文件呢?git status命令的輸出會告訴你怎么做:

$ git add .

$ git status

# On branch master

# Changes to be committed:

# ? (use "git reset HEAD ..." to unstage)

#

# ? ? ? modified: ? README.txt

# ? ? ? modified: ? benchmarks.rb

#

就在 “Changes to be committed” 下面,括號中有提示,可以使用git reset HEAD ...的方式取消暫存。好吧,我們來試試取消暫存 benchmarks.rb 文件:

$ git reset HEAD benchmarks.rb

benchmarks.rb: locally modified

$ git status

# On branch master

# Changes to be committed:

# ? (use "git reset HEAD ..." to unstage)

#

# ? ? ? modified: ? README.txt

#

# Changed but not updated:

# ? (use "git add ..." to update what will be committed)

# ? (use "git checkout -- ..." to discard changes in working directory)

#

# ? ? ? modified: ? benchmarks.rb

#

這條命令看起來有些古怪,先別管,能用就行。現(xiàn)在 benchmarks.rb 文件又回到了之前已修改未暫存的狀態(tài)。

取消對文件的修改

如果覺得剛才對 benchmarks.rb 的修改完全沒有必要,該如何取消修改,回到之前的狀態(tài)(也就是修改之前的版本)呢?git status同樣提示了具體的撤消方法,接著上面的例子,現(xiàn)在未暫存區(qū)域看起來像這樣:

# Changed but not updated:

# ? (use "git add ..." to update what will be committed)

# ? (use "git checkout -- ..." to discard changes in working directory)

#

# ? ? ? modified: ? benchmarks.rb

#

在第二個括號中,我們看到了拋棄文件修改的命令(至少在 Git 1.6.1 以及更高版本中會這樣提示,如果你還在用老版本,我們強烈建議你升級,以獲取最佳的用戶體驗),讓我們試試看:

$ git checkout -- benchmarks.rb

$ git status

# On branch master

# Changes to be committed:

# ? (use "git reset HEAD ..." to unstage)

#

# ? ? ? modified: ? README.txt

#

可以看到,該文件已經(jīng)恢復到修改前的版本。你可能已經(jīng)意識到了,這條命令有些危險,所有對文件的修改都沒有了,因為我們剛剛把之前版本的文件復制過 來重寫了此文件。所以在用這條命令前,請務必確定真的不再需要保留剛才的修改。如果只是想回退版本,同時保留剛才的修改以便將來繼續(xù)工作,可以用下章介紹 的 stashing 和分支來處理,應該會更好些。

記住,任何已經(jīng)提交到 Git 的都可以被恢復。即便在已經(jīng)刪除的分支中的提交,或者用--amend重新改寫的提交,都可以被恢復(關于數(shù)據(jù)恢復的內(nèi)容見第九章)。所以,你可能失去的數(shù)據(jù),僅限于沒有提交過的,對 Git 來說它們就像從未存在過一樣。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 只是針對第一次提交 如果發(fā)現(xiàn)最后一次的提交出現(xiàn)了錯誤,需要重新提交,就可以用git commit --amend。...
    磚用冰西瓜閱讀 6,004評論 0 6
  • GIT分布式版本控制系統(tǒng)最佳實踐 這篇文章來自于老男孩教育高級架構師班12期的徐亮偉同學。 首先感謝老男孩架構師班...
    meng_philip123閱讀 3,809評論 4 36
  • 我發(fā)現(xiàn),一件事情如果不去做,只是心里想,想得很美好,最后動手去做了,往往效果不是很好。 這個感悟來源于裝飾房間。我...
    Yoscool閱讀 201評論 2 1
  • 瑣事記 一、引子 我問過身邊的許多人:“你昨天做過什么!”他們總是什么也想不起來,連最簡單的瑣事也沒有印象。于是我...
    小棕櫚閱讀 351評論 0 1
  • 行走在今時今日, 卻恍若穿行于 前世來生, 所有的遇見和預見, 似乎早已發(fā)生, 亦或命中注定, 亦夢亦幻,教我分不...
    心芳菲閱讀 130評論 0 0

友情鏈接更多精彩內(nèi)容