在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ 從分支移除提交
創(chuàng)建沖突
暫存更改
創(chuàng)建項(xiàng)目
Git 內(nèi)幕:.git 目錄
撤銷(xiāo)本地更改
移動(dòng)文件
移除 oops 標(biāo)簽
何為 Origin
再談結(jié)構(gòu)
撤銷(xiāo)暫存的更改
修正提交
別名
檢查狀態(tài)
給版本打標(biāo)簽
撤銷(xiāo)提交的更改
拉下共享的更改
變基
暫存與提交
合并
合并拉下的更改
更改而非文件
更改原始倉(cāng)庫(kù)
重置 master 分支
回顧克隆的倉(cāng)庫(kù)
變基 VS 合并
共享倉(cāng)庫(kù)
導(dǎo)航分支
重置 greet 分支
添加跟蹤的分支
獲得舊版本
克隆倉(cāng)庫(kù)
Git 內(nèi)幕:直接處理 Git 對(duì)象
再談設(shè)置
遠(yuǎn)程分支
從分支移除提交
合并回 master
查看分叉的分支
添加遠(yuǎn)程倉(cāng)庫(kù)
拉下更改
歷史
在 master 中更改
裸倉(cāng)庫(kù)
做更改
高級(jí)/將來(lái)的主題
推送更改
多個(gè)倉(cāng)庫(kù)
設(shè)置
提交更改
取得更改
托管你的 Git 倉(cāng)庫(kù)
創(chuàng)建分支
解決沖突

從分支移除提交

目的

學(xué)習(xí)如何從分支移除最近的提交。

上一小節(jié)的 revert 是一個(gè)讓我們撤銷(xiāo)倉(cāng)庫(kù)中的任意提交的強(qiáng)大命令。然而,原始提交和“撤銷(xiāo)”提交在分支歷史中都可見(jiàn)(使用 git log 命令)。

我們經(jīng)常做提交,并很快意識(shí)到犯了錯(cuò)誤。如果有一個(gè)“收回”命令能允許我們假裝不正確的提交從未發(fā)生過(guò)該多好啊?!笆栈亍泵钌踔吝€會(huì)阻止錯(cuò)誤的提交在 git log 歷史中的顯示。這就像錯(cuò)誤的提交從未發(fā)生過(guò)一樣。

重置命令

我們已經(jīng)介紹過(guò) reset 命令,并用它來(lái)設(shè)置暫存區(qū)以便與特定的提交保持一致(我們?cè)谥暗膶?shí)驗(yàn)中使用 HEAD 提交)。

當(dāng)給定提交引用(如哈希、分支或標(biāo)簽名)時(shí),reset 命令將:

  • 重寫(xiě)當(dāng)前分支到指向的特定提交
  • 重置暫存區(qū)到匹配特定的提交(可選)
  • 重置工作目錄到匹配特定的提交(可選)

檢查歷史

讓我們快速的檢查我們的提交歷史。

$ 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 來(lái)移除它們。

首先,標(biāo)記分支

但在我們移除提交前,讓我們使用一個(gè)標(biāo)簽來(lái)標(biāo)記最新的提交以便能夠再次找到它。

$ git tag oops

重置到 Oops 前

看看上面的日志歷史,我們將知道標(biāo)記為“v1”的提交是錯(cuò)誤提交之前的正確提交。讓我們重置分支到該位置。因?yàn)榉种б呀?jīng)標(biāo)記,所以我們可以在 reset 命令中使用標(biāo)簽名(如果它沒(méi)有被標(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)更新工作目錄以便與新的分支頭保持一致。

什么也沒(méi)丟

但錯(cuò)誤的提交發(fā)生了什么?結(jié)果是提交仍然在倉(cāng)庫(kù)中。事實(shí)上,我們?nèi)匀荒軌蛞盟鼈?。記得在本?shí)驗(yàn)開(kāi)始我們使用標(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ò)誤的提交并沒(méi)有消失。它們?nèi)匀辉趥}(cāng)庫(kù)中。它們只是不再列到 master 分支中。如果我們沒(méi)有標(biāo)記它們,它們依然在倉(cāng)庫(kù)中,但除了使用哈希值外沒(méi)有別的方法引用它們。未引用的提交保留在倉(cāng)庫(kù)中,一直到系統(tǒng)運(yùn)行垃圾回收軟件時(shí)。

重置的危險(xiǎn)性

在本地分支上重置一般是安全的。任何“事故”通常都能通過(guò)重置到想要的提交來(lái)恢復(fù)。

然而,如果分支在共享的遠(yuǎn)程倉(cāng)庫(kù)上,那么重置可能使其他用戶(hù)共享的分支混亂。