目的
學(xué)習(xí)如何還原已經(jīng)提交到本地倉庫的更改。
有時候你意識到已經(jīng)提交的更改不正確并想撤銷該提交。有幾種方式可以處理這種問題,我們在本實驗中所用的方式總是安全的。
實際上我們將通過創(chuàng)建新的提交來撤銷原來不想要更改的提交。
更改 hello.rb 文件成下列內(nèi)容:
# This is an unwanted but committed change
name = ARGV.first || "World"
puts "Hello, #{name}!"
$ git add hello.rb
$ git commit -m "Oops, we didn't want this commit"
要撤銷已提交的更改,我們需要創(chuàng)建一個提交來移除由不想要的提交所引入的更改。
$ git revert HEAD
這將帶你到編輯器中。你可以編輯默認(rèn)的提交信息,或直接離開它。保存并關(guān)閉文件。你應(yīng)該看到:
$ git revert HEAD --no-edit
[master a10293f] Revert "Oops, we didn't want this commit"
1 files changed, 1 insertions(+), 1 deletions(-)
因為我們將撤銷我們做的最后提交,所以我們可以使用 HEAD
作為還原的參數(shù)。通過簡單的指定哈希值,我們可以撤銷早期歷史中的任意提交。
注意:命令中的 --no-edit
可被忽略。在不打開編輯器生成輸出時需要它。
檢查日志來顯示我們倉庫中不想要及還原的提交。
$ git hist
$ git hist
* a10293f 2013-04-13 | Revert "Oops, we didn't want this commit" (HEAD, master) [Jim Weirich]
* 838742c 2013-04-13 | Oops, we didn't want this commit [Jim Weirich]
* 1f7ec5e 2013-04-13 | Added a comment (v1) [Jim Weirich]
* 582495a 2013-04-13 | Added a default value (v1-beta) [Jim Weirich]
* 323e28d 2013-04-13 | Using ARGV [Jim Weirich]
* 9416416 2013-04-13 | First Commit [Jim Weirich]
這種技術(shù)將處理任何提交(雖然你可能必須解決沖突)。在公開分享的遠(yuǎn)程倉庫上使用分支更加安全。
接下來,讓我們看看從倉庫歷史中移除最近提交所用的技術(shù)。