Git頭指標分離狀態

2021-09-24 23:56:20 字數 2375 閱讀 4637

我們知道在git中分支是指向提交,而head指標指向分支。所謂的分離頭指標狀態就是head不再指向分支,而是直接指向某個commit。

對於下圖,此時分支master分支指向c1(c1是某次提交的commit id),head指向master。

進行任意一次提交,master分支會重新指向新的提交。

如果執行git checkout commitid就會導致head指向該次提交,而不在指向分支。

如果我們執行git checkout c2(c2是該次提交的commit id),結果如下:

可以看到此時head指標不在指向master而是直接指向c2提交,此時頭指標就處於分離狀態。

如果這時候修改了工作區的內容然後提交會怎樣呢?

可以看到此時這個提交不在任何分支上。如果此時切換回master分支,你會發現剛剛在分離頭指標狀態下對檔案做了修改提交在master分支下是看不到的,並且由於c3這次提交不在任何分支上,在未來極有可能會被git清理掉。我們知道如何合併分支,但是沒辦法將c3這個提交給合併過來,難道我們剛剛在c3上做的大量修改都要重寫?聰明的git早就給我們提示了,可以給這個分離的提交建立乙個分支,然後在將這個分支合併到master中,最後刪除這個臨時的分支。

通過git branch branchname commitid給這個提交建立乙個臨時的分支,這個分支是基於頭指標分離下修改提交的commit id建立的。

合併分支:git merge temp

最後刪除臨時分支:git branch -d temp

建立乙個倉庫,在工作區增加test.txt,然後基於這個檔案做兩次commit。

可以清楚的看到此時的head是指向master的(head -> msstaer),,而master指向最近一次提交。看一下test.txt檔案:

現在開始分離head指標,讓head直接指向最近一次提交。

注意觀察,當我們執行git checkout 8fcba5e37c,git會提示我們當前處於分離頭指標狀態,並且head指向8fcba5e37c這次提交。

執行git status看看

現在head指標指向的是提交,這時我們再修改test.txt檔案,然後提交。

git提示我們再分離head指標狀態下提交了修改。再開啟test.txt檔案看一眼:enmmm,沒毛病。

重點來了!現在切換回master分支:

ok!成功切換了,但是git給我們警告了,有乙個未被關聯在任何分支上的提交,並且告訴我們可以使用git branch branchname 5e2e3f7為5e2e3f7這次提交建立乙個分支。先來瞅一眼此時的test.txt檔案:

enmm,確實少了789。如果我們執行gitk --all命令會彈出乙個介面如下:

從這個介面我們可以發現,只能看到兩次提交記錄,關於789的提交記錄看不到,這是因為它沒有關聯在任何分支上,並且在未來git也極有可能會把它清理掉。

執行git branch temp 5e2e3f7為該提交建立乙個temp分支,然後合併分支,最後刪除temp分支:

最後再瞅一眼test.txt。enmm,沒毛病。

分離頭指標(detached HEAD)

通常,我們工作在某乙個分支上,比如 master 分支。這個時候 master 指標和 head 指標是一起前進的,每做一次提交,這兩個指標就會一起向前挪一步。但是在某種情況下 例如 checkout 了某個具體的 commit master 指標 和 head 指標這種 繫結 的狀態就被打破了,變...

頭資訊 系統掌握Git之 分離頭指標與合併操作

分離頭指標表示我們在工作在沒用分支的情況下,我們通過git log 列印日誌,選擇中間的乙個commitid,然後進行checkout操作,git checkout 82fdac4baac702ad0473c講git切換到這次提交。在通過git branch檢視分支,可見當前分支在 頭指標分離於 8...

Git游離指標狀態

問題描述 有次在idea中提交git發生了這樣的情況,當初上乙個操作之前還提示了stash changes的,然後就進入了游離指標狀態 在這裡可以發現這裡的git分支指向的不是當前任何分支 游離狀態 本質上是 本地的head 指向了乙個 未知的分支,head不會指向任何分支,嚴謹的說是head指向了...