我一直進入分離狀態的狀態。我不知道爲什麼,我不知道它是什麼。如何避免在git中進入獨立頭部狀態?
每次我試圖從這個狀態恢復,我丟失了一些文件(從最後一次提交我做了脫離頭狀態)。
是否有可能完全避免這種狀態或它是由設計?
我一直進入分離狀態的狀態。我不知道爲什麼,我不知道它是什麼。如何避免在git中進入獨立頭部狀態?
每次我試圖從這個狀態恢復,我丟失了一些文件(從最後一次提交我做了脫離頭狀態)。
是否有可能完全避免這種狀態或它是由設計?
獨立國家元首並且通常無法關閉。您可以進入分離的頭的狀態,只有當你克隆你的倉庫後,例如做這樣的事情
git checkout $specific_commit
,如果你是在一個名爲分支master
#1 -> #2 -> #3
^
master
^
HEAD
的尖端和你做
git checkout HEAD~
在HEAD當前指向之前提交。然後你會在下面的狀態
#1 -> #2 -> #3
^ ^
| master
|
HEAD
從這一點你是在分離的頭的狀態,最終即在一個特定的頭點提交,而不是在分支標籤。在此之前,HEAD指向分支標籤master
,該分支標籤又指向特定的提交(分支尖端)。現在提交的內容將使它們位於沒有分支標籤(即參考)的單獨分支上。運行git branch
會告訴你,如果你在脫離頭部狀態。
$ git branch
* (detached from 60e425a)
master
注意星號*
,它表示您當前的分支。 如果你現在做出新的提交git repo將如下所示。
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
HEAD
,如果你這樣做git checkout master
現在切換回主然後HEAD
將切換,當你創建提交#5
將不再有任何標記,即一個符號引用導航犯#5
已創建master
和分支。這意味着您的提交實際上已經丟失。
因此,你有兩個選擇。
git checkout $specific_commit
。始終保持在同一個命名分支的末端,例如master
。您可以通過運行git branch
來驗證。如果你發現自己在分離的頭的狀態,也許你已經作出承諾,你不想「寬鬆」,那麼,作爲流上述建議,你需要創建像這樣
新的分支標籤/參考git的結帳-b myNewBranch
這將使你的倉庫看起來像這樣
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
myNewBranch
^
HEAD
然後,如果你這女巫回到master
您隨時可以返回做git checkout myNewBranch
提交#5
和所有分支上的後續提交。
只與當地分支機構合作,然後您將永遠不會進入分離狀態。例如,而不是git checkout origin/master
做git checkout master && git pull origin master
,另請參閱分支的跟蹤選項。
爲了避免丟失的變化已經坐在一個分離的頭,創建一個分支爲他們:git branch someNameForTheBranch
如果用來做git checkout sha1
,你應該添加-b
選項來自動創建一個新的分支上提交SHA1和移動上它。
重要的是要避免處於這種狀態。如果要糾正脫離頭部的情況,你可以做
git stash
git checkout -b StartingPointOfYourBranch
git stash pop
「StartingPointOfYourBranch」必須是一個參考:SHA1,產地/主,...在設計git的存在
'混帳reflog'是你的朋友。 – AD7six
避免'git checkout sha1'。這裏sha1可以是HEAD,FETCH_HEAD。還有一些其他情況導致HEAD狀態分離。如果你確切地知道你正在使用哪個分支,可以保持分離的HEAD狀態。 – ElpieKay