有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用--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撤銷單個檔案的修改 git撤銷檔案的修改
git撤銷某個檔案的修改,分為兩種情況 1.在工作區修改,但並未提交到暫存區 即並沒有add 對於單個檔案的撤銷修改而言,使用下面方法。git checkout 檔名 若想撤銷工作區中所有檔案的修改,則 git checkout 注意 git chekcout 是讓檔案回到最近一次該檔案git co...
git撤銷的方法
一.撤銷修改的方法 撤銷本地全部沒有git add過的修改 git checkout 使用庫上檔案覆蓋本地修改 當然是指用本地庫覆蓋 git checkout file name 回退掉某一次commit,回退方式是自動生成乙個反向的commit,不會影響其他commmitgit revert co...
git 修改 撤銷
git status 初始狀態是,什麼都沒有修改 on branch master nothing to commit working directory clean 修改了乙個檔案fu 狀態變成 root 172.18 4.100 gitlearn git status on branch mas...