之前對於git checkout
的認識停留在可以執行以下操作:
git checkout 分支名 # 用於切換分支
git checkout -b 分支名 # 用於創建分支並切換
今天突然看到了一個git checkout 歷史標號
,這個用法被稱為HEAD分離。一開始以為自己之前的筆記里有漏洞,開始懷疑起了自己。仔細查看了這個命令的用法后,才覺得自己對git的理解又加深了。
以下為自己的理解:
git實際上維護的是一串歷史記錄,每個歷史標號都是一條記錄的id,而不同的分支表示不同的指針,指向某一個歷史標號,沿着那個標號往前,可以查看所有的歷史記錄。而HEAD也是一個指針,只是我們經常情況下將其和分支指針指向同一個歷史記錄,而使用git checkout
命令就是用來移動HEAD指針的。
再回到前面的問題,把HEAD指針移動到非分支指針指向的歷史節點,就可以實現HEAD的分離。什么時候進行這樣的操作比較好呢,鏈接:https://blog.csdn.net/yunfeng482/article/details/88260894 將其總結為以下幾種情況:
-
如果臨時想基於某個commit做變更,試試新方案是否可行,就可以采用分離頭指針的方式。測試后發現新方案不成熟,直接reset回其他分支即可,省去了建、刪分支的麻煩,git會忽略管理這個沒有分支commit。
-
進行到某個commit,試試新方案,為該commit建立新的branch,可以進行特性開發。
-
分離頭指針對應的commit,你如果認為有用需要保留,那就用新分支把它保留。
-
如果當下無master分支,可以在分離頭指針狀態下,git checkout -b master HEAD