git checkout 命令詳解—— Git 學習筆記 15
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 權威指南》