W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
學(xué)習(xí)如何從分支移除最近的提交。
上一小節(jié)的 revert
是一個(gè)讓我們撤銷倉庫中的任意提交的強(qiáng) 大命令。然而,原始提交和“撤銷”提交在分支歷史中都可見(使 用 git log
命令)。
我們經(jīng)常做提交,并很快意識(shí)到犯了錯(cuò)誤。如果有一個(gè)“收回”命 令能允許我們假裝不正確的提交從未發(fā)生過該多好啊?!笆栈亍泵?令甚至還會(huì)阻止錯(cuò)誤的提交在 git log
歷史中的顯示。這就 像錯(cuò)誤的提交從未發(fā)生過一樣。
我們已經(jīng)介紹過 reset
命令,并用它來設(shè)置暫存區(qū)以便與特 定的提交保持一致(我們在之前的實(shí)驗(yàn)中使用 HEAD
提交)。
當(dāng)給定提交引用(如哈希、分支或標(biāo)簽名)時(shí),reset
命令 將:
讓我們快速的檢查我們的提交歷史。
$ 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]
我們看到在該分支中的最后兩個(gè)提交為“Oops”和“Revert Oops”。 讓我們使用 reset
來移除它們。
但在我們移除提交前,讓我們使用一個(gè)標(biāo)簽來標(biāo)記最新的提 交以便能夠再次找到它。
$ git tag oops
看看上面的日志歷史,我們將知道標(biāo)記為“v1”的提交是錯(cuò)誤 提交之前的正確提交。讓我們重置分支到該位置。因?yàn)榉种?已經(jīng)標(biāo)記,所以我們可以在 reset
命令中使用標(biāo)簽名( 如果它沒有被標(biāo)記,那么我們只能使用哈希值)。
$ git reset --hard v1
$ git hist
$ git reset --hard v1
HEAD is now at 1f7ec5e Added a comment
$ git hist
* 1f7ec5e 2013-04-13 | Added a comment (HEAD, v1, master) [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]
我們的 master 分支現(xiàn)在指到 v1 提交,并且 Oops 和 Revert Oops 提 交已經(jīng)不在分支中。--hard
參數(shù)表示應(yīng)當(dāng)更新工作目錄以便與新的分 支頭保持一致。
但錯(cuò)誤的提交發(fā)生了什么?結(jié)果是提交仍然在倉庫中。事實(shí)上,我們?nèi)匀?能夠引用它們。記得在本實(shí)驗(yàn)開始我們使用標(biāo)簽“oops”標(biāo)記了還原的提交。 讓我們看看所有的提交。
$ git hist --all
$ git hist --all
* a10293f 2013-04-13 | Revert "Oops, we didn't want this commit" (oops) [Jim Weirich]
* 838742c 2013-04-13 | Oops, we didn't want this commit [Jim Weirich]
* 1f7ec5e 2013-04-13 | Added a comment (HEAD, v1, master) [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]
在這兒我們看到錯(cuò)誤的提交并沒有消失。它們?nèi)匀辉趥}庫中。它們只是不再 列到 master 分支中。如果我們沒有標(biāo)記它們,它們依然在倉庫中,但除了 使用哈希值外沒有別的方法引用它們。未引用的提交保留在倉庫中,一直到 系統(tǒng)運(yùn)行垃圾回收軟件時(shí)。
在本地分支上重置一般是安全的。任何“事故”通常都能通過重置到想要的提 交來恢復(fù)。
然而,如果分支在共享的遠(yuǎn)程倉庫上,那么重置可能使其他用戶共享的分支 混亂。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: