匿名
尚未登入
登入
DILA Wiki
搜尋
檢視 Pro Git 2.4 撤銷操作 (Undo) 的原始碼
出自DILA Wiki
命名空間
頁面
討論
更多
更多
頁面操作
閱讀
檢視原始碼
歷史
←
Pro Git 2.4 撤銷操作 (Undo)
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
任何時候,你都有可能需要撤銷剛才所做的某些操作。接下來,我們會介紹一些基本的撤銷操作相關的命令。請注意,有些操作並不總是可以撤銷的,所以請務必謹慎小心,一旦失誤,就有可能丟失部分工作成果。 =修改最後一次提交= 有時候我們提交完了才發現漏掉了幾個檔沒有加,或者提交資訊寫錯了。想要撤銷剛才的提交操作,可以使用 --amend 選項重新提交: <syntaxhighlight lang="XML"> $ git commit --amend </syntaxhighlight> 此命令將使用當前的暫存區域(staging area)執行提交。如果剛才提交完沒有作任何改動,直接執行此命令的話,相當於有機會重新編輯提交說明,而所提交的文件快照和之前的一樣。 啟動文字編輯器後,會看到上次提交時的說明,編輯它確認沒問題後保存退出,就會使用新的提交說明覆蓋剛才失誤的提交。 如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,然後再運行 --amend 提交: <syntaxhighlight lang="XML"> $ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend </syntaxhighlight> 上面的三條命令最終得到一個提交,第二個提交命令修正了第一個的提交內容。 =取消已經暫存的檔 (Unstaging a Staged File)= 接下來的兩個小節將示範如何取消暫存區域中的檔,以及如何取消工作目錄中已修改的檔。<br> 不用擔心,查看檔案狀態的時候就提示了該如何撤銷,所以不需要死記硬背。<br> 來看下面的例子,有兩個修改過的檔,我們想要分開提交,但不小心用 git add * 全加到了暫存區域。該如何撤銷暫存其中的一個檔呢?git status 命令的輸出會告訴你怎麼做: <syntaxhighlight lang="XML"> $ git add . $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # modified: benchmarks.rb # </syntaxhighlight> 就在 “Changes to be committed” 下面,括弧中有提示,可以使用 git reset HEAD <file>... 的方式取消暫存。好吧,我們來試試取消暫存 benchmarks.rb 文件: <syntaxhighlight lang="XML"> $ git reset HEAD benchmarks.rb benchmarks.rb: locally modified $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # # 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: benchmarks.rb # </syntaxhighlight> 這條命令看起來有些古怪,先別管,能用就行。現在 benchmarks.rb 檔又回到了之前已修改未暫存的狀態。 =取消對檔案的修改 (Unmodifying a Modified File)= 如果覺得剛才對 benchmarks.rb 的修改完全沒有必要,該如何取消修改,回到之前的狀態(也就是修改之前的版本)呢?git status 同樣提示了具體的撤銷方法,接著上面的例子,現在未暫存區域看起來像這樣: <syntaxhighlight lang="XML"> # 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: benchmarks.rb # </syntaxhighlight> 在第二個括弧中,我們看到了拋棄檔修改的命令(至少在 Git 1.6.1 以及更高版本中會這樣提示,如果你還在用老版本,我們強烈建議你升級,以獲取最佳的用戶體驗),讓我們試試看: <syntaxhighlight lang="XML"> $ git checkout -- benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: README.txt # </syntaxhighlight> 可以看到,該檔已經恢復到修改前的版本。你可能已經意識到了,這條命令有些危險,所有對檔的修改都沒有了,因為我們剛剛把之前版本的檔複製過來重寫了此檔。所以在用這條命令前,請務必確定真的不再需要保留剛才的修改。如果只是想回退版本,同時保留剛才的修改以便將來繼續工作,可以用下章介紹的 stashing 和分支來處理,應該會更好些。 記住,任何已經提交到 Git 的都可以被恢復。即便在已經刪除的分支中的提交,或者用 --amend 重新改寫的提交,都可以被恢復(關於資料恢復的內容見第九章)。所以,你可能失去的資料,僅限於沒有提交過的,對 Git 來說它們就像從未存在過一樣。
返回到「
Pro Git 2.4 撤銷操作 (Undo)
」。
導覽
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
wiki工具
wiki工具
特殊頁面
頁面工具
頁面工具
使用者頁面工具
更多
連結至此的頁面
相關變更
頁面資訊
頁面日誌