Git 初学札记(十)—— Reset 回退的三种状态解析
引言
工作中經(jīng)常會(huì)涉及到需要本地代碼覆蓋更新的操作。有時(shí)候可能是從遠(yuǎn)端git 上直接覆蓋更新,或者是其他本地分支覆蓋更新當(dāng)前分支等等。這個(gè)時(shí)候就需要用到 reset 操作。
reset 操作分為三種類型:Soft、Mixed、Hard。今天我們就來說說這三種類型究竟如何使用。
一、Git 提交的三種狀態(tài)
在解釋 reset 的三種類型之前,我們需要了解 Git 提交的三種托管狀態(tài)。不論你是用命令行,還是用圖形化界面,都是如此。
第一種狀態(tài)是“未暫存”、第二種狀態(tài)是“已暫存”、第三種狀態(tài)是“已提交”。
“未暫存”狀態(tài),是一種代碼剛剛被修改過的狀態(tài)。Git 不會(huì)記錄你未暫存狀態(tài)下多次修改之間的區(qū)別,它可以比較未暫存的代碼與已提交代碼之間的差異。
“已暫存”狀態(tài),是一種 Git 對(duì)修改代碼進(jìn)一步托管的狀態(tài),Git 管暫存區(qū)叫 Index。在 Index 區(qū)中的代碼可以理解為處于一種即將提交的狀態(tài)。
“已提交”狀態(tài),是一種 Git 對(duì)修改代碼完成追蹤的狀態(tài),Git 會(huì)記錄本次提交,同時(shí)在時(shí)間線上生成一條 commit 記錄,每條 commit 記錄都會(huì)有一個(gè)唯一的 commit Id 。?
如何理解提交的三種狀態(tài)?我們可以以電商購(gòu)物為例,來打個(gè)比方:
當(dāng)我們?yōu)g覽到我們喜歡的商品,給他們添加了一些備注或者將他們收藏,可以理解為一種簡(jiǎn)單的修改,那么此時(shí),該商品已經(jīng)處于“未暫存”狀態(tài)。
如果我們對(duì)收藏的商品情有獨(dú)鐘,我們可以將?購(gòu)物車理解為 暫存區(qū)(Index),將商品加入購(gòu)物車的操作就可以理解為將修改代碼添加到暫存區(qū),此時(shí)商品就處于“已暫存”狀態(tài)。
終于,我們下定決心購(gòu)買這件商品,填寫了必要的購(gòu)買信息,比如電話、收貨地址等后,點(diǎn)擊付款,于是商品就處于了一種“已提交”的狀態(tài),并生成了一條訂單號(hào),可以類比我們的 commit id。
針對(duì)圖形化的界面,如 Eclipse 中的 Git 插件,我們可以看到這樣的區(qū)域:
二、Reset 三種類型
Reset 需要有一個(gè)參考標(biāo)準(zhǔn),可以是本分支的其他提交點(diǎn),也可以是本地其他分支的提交點(diǎn),也可以是遠(yuǎn)程分支上的提交點(diǎn)。
比如,如果你希望直接將遠(yuǎn)程分支直接覆蓋到本地,那么reset 的參考系就是遠(yuǎn)程分支上的最新一次 提交點(diǎn)。
當(dāng)我們打開 Reset 對(duì)話框,可以看到我們需要選擇的參考系,我們此時(shí)可以選擇遠(yuǎn)程分支的最新提交點(diǎn)作為 reset 的參考系,在選擇 Reset type 的時(shí)候,有三種選項(xiàng):
Soft ,意思是只回退 HEAD 指針,HEAD 指針是 Git 在提交時(shí)間線上的某一個(gè) 提交點(diǎn),一般而言,HEAD 和最新的提交是一致的。因?yàn)?git 有三級(jí)提交機(jī)制,因此 Soft 只回退 HEAD 的話,會(huì)回退與參考系提交點(diǎn)不同的所有提交記錄,但暫存區(qū)和未暫存區(qū)會(huì)保留全部修改,同時(shí)被回退的提交記錄中的所有修改會(huì)全部回退到暫存區(qū)。可以將 Soft 簡(jiǎn)單理解為將所有提交退回到暫存區(qū),所有修改都會(huì)保留。
Mixed,意思是回退 HEAD 和 暫存區(qū)。即與參考提交點(diǎn)不同的所有提交,以及所有暫存區(qū)中未提交的修改,會(huì)全部回退到未暫存區(qū)。這是比較常用的 Reset 類型,它既會(huì)保留你的全部修改,同時(shí)又統(tǒng)一回退到所有代碼“未暫存”狀態(tài)。
Hard ,意思是強(qiáng)制回退或覆蓋本地全部代碼。這種回退類型不僅會(huì)回退與參考提交點(diǎn)不同的全部提交的代碼,同時(shí)也會(huì)回退暫存的和未暫存的代碼,將本地的全部代碼與參考提交點(diǎn)完全保持一致,并且拋棄所有修改,不做保留。一般如果想直接覆蓋本地代碼,就可以選擇 Hard 類型來操作。
總結(jié)
Reset 三種類型包括 Soft、Mixed、Hard。
從回退的力度來講 Soft —> Mixed—> Hard 依次加重,分別對(duì)應(yīng)
回退“已提交”—> 回退“已提交+已暫存”—> 回退“已提交+已暫存+未暫存” 。
兩種常用場(chǎng)景:
1、如果想回退所有本地與遠(yuǎn)程不同的 commit ,同時(shí)又保留所有修改,可以選擇 Soft 或 Mixed,推薦 Mixed。
2、如果想覆蓋或回退本地代碼,又不需要保留任何本地修改,可以選擇 Hard 。
?
總結(jié)
以上是生活随笔為你收集整理的Git 初学札记(十)—— Reset 回退的三种状态解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言的数据类型复数型,C语言数据类型
- 下一篇: Android Studio 内存不足