各位看官好,git reset和checkout是git中比較常用的兩種方法,今天我想來總結一下reset和checkout的原理和架構。
一、reset的原理
二、reset的三種應用
三、checkout的原理
四、checkout的應用
1、reset的原理
1.1 關於git中三個區的說明
要說明git reset的原理,首先要簡單說一下git的三個區和HEAD問題。在git中一共有三個區,分別是工作區,暫存區和提交區。其三者的對應關系是這樣的:
工作區通過git add添加到暫存區,而暫存區通過git commit添加到提交區,這樣一個流程。
1.2 關於git中HEAD指針的問題
git中存在一個HEAD指針,即為每次提交一次HEAD指針就會向前進一位,這里要說明的是HEAD指針存在於暫存區和提交區,而不存在於工作區。也就是說在上一版的基礎上,如果我們使用git add命令,那么此時HEAD指針會進入到暫存區,繼續用git commit,此時會進入到提交區。
1.3 關於git reset的原理說明
那么說完了這些,我們就說一下git reset的原理。git reset的原理簡單來說就是把HEAD指針回退一位。即如果你在提交區,那么你回退一位就是暫存區,如果你在暫存區,那么指針會回退到上一次的提交區。
2.1 git reset的三種使用方法
git命令中對reset命令制定了三種使用方法。分別是--soft --mixed --hard,這三種方式。
即為git reset --soft
git reset --mixed
git reset --hard
其中soft就是reset中最原始的用法,只是將HEAD指針移動到上一次。而mixed則對其又進了一步,除了將HEAD指針移動到上一次的提交,還將暫存區的內容也一並清空。hard命令則對其又進了一步,除了HEAD指針移動到上一次的提交和將暫存區的內容也一並清空外,還將工作區的內容也一並清空。即:
soft:移動指針
mixed:移動指針+清空暫存區
hard:移動指針+清空暫存區+清空工作區。
3、checkout的原理
說完了git reset,我們來說一下checkout命令,checkout的原理基礎也是和HEAD有關。checkout命令就是把把當前代碼更新成頭指針指向的提交。
4、checkout的應用
checkout的應用有很多種,但是最常用的還是兩種,第一種就是切換分支,第二種就是更新工作區。
第一種應用場景:
git checkout <branch> 這種原理就是將HEAD指針指向另一個分支,同時將其覆蓋
第二種應用場景:
git checkout <file> 這種使用的前提就是頭指針指向的提交與當前你所在的區域不是一個,使用該命令可以使其內容更新成上一版提交。
當然,checkout的應用有很多種,這兩種只是我目前為止用過的。
總結:
這回我們說了reset的原理,應用,以及checkout的原理和應用。總結一下:
1、reset的原理就是將頭指針回退到上一個。
2、其應用可以分成三個部分,soft,mixed,hard三種
3、checkout的原理就是把當前代碼更新成頭指針指向的提交
4、其應用有兩個,第一,切換分支。第二,更新當前內容。