git checkout 命令詳解—— Git 學習筆記 16

ARM的程式設計師敲著詩歌的夢發表於2018-10-06

git checkout 命令詳解

概覽

git checkout 這條命令的常用格式如下:

用法一

git checkout [<commit>] [--] <paths>

用於拿暫存區的檔案覆蓋工作區的檔案,或者用指定提交中的檔案覆蓋暫存區和工作區中對應的檔案。

用法二

git checkout <branch>

用於切換分支。

用法三

git checkout -b <new_branch> [<start_point>]

用於建立並切換分支。

詳細說明

1. git checkout [<commit>] [--] <paths>

第一種用法在命令中包含路徑 <paths>。為了避免路徑<paths>和引用(或者提交)<commit> 同名而衝突,可以在<paths>前用兩個連續的短線減號作為分隔。

<commit> 是可選項,如果省略則相當於從暫存區(index)檢出。這和 git reset 重置命令(例如 git reset HEAD <file>)大不相同:重置的預設值是 HEAD,而檢出的預設值是暫存區。因此重置一般用於重置暫存區(除非使用--hard引數,否則不重置工作區),而檢出命令主要是覆蓋工作區(如果<commit>不省略,也會替換暫存區中相應的檔案)。

第一種用法(包含了路徑 <paths> 的用法)不會改變 HEAD 頭指標,主要是用於拿指定版本的檔案覆蓋工作區中對應的檔案。如果省略<commit>,則會拿暫存區的檔案覆蓋工作區的檔案,否則用指定提交中的檔案覆蓋暫存區和工作區中對應的檔案。

2. git checkout <branch>

第二種用法(不使用路徑<paths>的用法)則會改變 HEAD 頭指標。之所以後面的引數寫作<branch>,是因為只有 HEAD 切換到一個分支才可以對提交進行跟蹤,否則仍然會進入“分離頭指標”(Detached HEAD)的狀態。在“分離頭指標”狀態下的提交不能被引用關聯到而可能會丟失。所以用法二最主要的作用就是切換分支。

3. git checkout -b <new_branch> [<start_point>]

-b 選項表示建立新分支。如果指定了 <start_point> ,那麼新的分支將指向<start_point> ,否則新的分支指向當前的 HEAD. 新分支和我們熟悉的 master 分支並沒有什麼實質的不同,都是在refs/heads名稱空間下的引用。第三種用法用於分支的建立並切換。


參考資料

《Git 權威指南》

相關文章