← 上一章:【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎? 下一章:【狀況題】可以只 Commit 一個檔案的部份的內容嗎? →
【冷知識】HEAD 是什麼東西?
HEAD 是一個指標,指向某一個分支,通常你可以把 HEAD 當做「目前所在分支」看待。在 .git
目錄裡有一個檔名為 HEAD
的檔案,就是記錄著 HEAD 的內容,來看一下這東西長什麼樣子:
$ cat .git/HEAD
ref: refs/heads/master
從這個檔案看起來,HEAD 目前正指向著 master
分支。如果有興趣再深入看一下 refs/heads/master
的內容就會發現,其實所謂的 Master 分支也不過就是一個 40 個字元的檔案罷了:
$ cat .git/refs/heads/master
e12d8ef0e8b9deae8bf115c5ce51dbc2e09c8904
切換分支的時候…
假設目前我這個專案包括 master 共有三個分支,而目前正在 master 分支上:
$ git branch
cat
dog
* master
接下來我們試著切換分支到 cat
分支:
$ git checkout cat
Switched to branch 'cat'
這時候來看一下剛剛那個 HEAD 檔案的內容:
$ cat .git/HEAD
ref: refs/heads/cat
HEAD 的內容變成 refs/heads/cat
了。再試著切到 dog 分支看看:
$ git checkout dog
Switched to branch 'dog'
再確認一下 HEAD 的內容:
$ cat .git/HEAD
ref: refs/heads/dog
它又改成指到 dog 分支了。也就是說,HEAD 通常會指向目前所在的分支。不過 HEAD 也不一定總是會指向某個分支,當 HEAD 沒有指向某個分支的時候便會造成「detached HEAD」的狀態,詳情請參閱「【冷知識】斷頭(detached HEAD)是怎麼一回事?」章節說明。
而在 SourceTree 的介面裡,HEAD 是以一個「空心的小圈圈」圖示呈現:
在切換分支的同時,除了 HEAD 的內容會改變之外,在上個章節提到的 Reflog,當 HEAD 的內容改變的時候也會留下紀錄。
← 上一章:【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎? 下一章:【狀況題】可以只 Commit 一個檔案的部份的內容嗎? →
Comments