接下來,我們會介紹一些基本的撤消操作相關的命令。請注意,有些操作並不總是可以撤消的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。
有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用--amend
選項重新提交:
$git commit --amend -m"修改 提交 說明"
此命令將使用當前的暫存區域快照提交。如果剛才提交完沒有作任何改動,直接執行此命令的話,相當於有機會 重新編輯提交說明,但將要提交的檔案快照和之前的一樣。
啟動文字編輯器後,會看到上次提交時的說明,編輯它確認沒問題後儲存退出,就會使用新的提交說明覆蓋剛才失誤的提交。
如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,然後再執行--amend
提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面的三條命令最終只是產生乙個提交,第二個提交命令修正了第乙個的提交內容。
接下來的兩個小節將演示如何取消暫存區域中的檔案,以及如何取消工作目錄中已修改的檔案。不用擔心,檢視檔案狀態的時候就提示了該如何撤消,所以不需要死記硬背。來看下面的例子,有兩個修改過的檔案,我們想要分開提交,但不小心用git add .
全加到了暫存區域。該如何撤消暫存其中的乙個檔案呢?其實,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
#
這條命令看起來有些古怪,先別管,能用就行。現在 benchmarks.rb 檔案又回到了之前已修改未暫存的狀態。
如果覺得剛才對 benchmarks.rb 的修改完全沒有必要,該如何取消修改,回到之前的狀態(也就是修改之前的版本)呢?git status
同樣提示了具體的撤消方法,接著上面的例子,現在未暫存區域看起來像這樣:
# 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
#
可以看到,該檔案已經恢復到修改前的版本。你可能已經意識到了,這條命令有些危險,所有對檔案的修改都沒有了,因為我們剛剛把之前版本的檔案複製過來重寫了此檔案。所以在用這條命令前,請務必確定真的不再需要保留剛才的修改。如果只是想回退版本,同時保留剛才的修改以便將來繼續工作,可以用下章介紹的 stashing 和分支來處理,應該會更好些。
記住,任何已經提交到 git 的都可以被恢復。即便在已經刪除的分支中的提交,或者用--amend
重新改寫的提交,都可以被恢復(關於資料恢復的內容見第九章)。所以,你可能失去的資料,僅限於沒有提交過的,對 git 來說它們就像從未存在過一樣。
git 使用詳解(6) 撤消操作
接下來,我們會介紹一些基本的撤消操作相關的命令。請注意,有些操作並不總是可以撤消的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用 amend選項重新提交 git commit amend m...
Git 基礎 撤消操作
任何時候,你都有可能需要撤消剛才所做的某些操作。接下來,我們會介紹一些基本的撤消操作相關的命令。請注意,有些撤銷操作是不可逆的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用 amend選項重...
Git 基礎 撤消操作
任何時候,你都有可能需要撤消剛才所做的某些操作。接下來,我們會介紹一些基本的撤消操作相關的命令。請注意,有些撤銷操作是不可逆的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用 amend選項重...