Dim*_*ims 2 git git-detached-head
我一直都处于独立状态。我不知道为什么,我也不知道它是什么。
每次尝试从该状态恢复时,我都会丢失一些文件(从我在分离头状态下进行的最后一次提交)。
是否可以完全避免这种状态,或者是设计使然?
只与当地分支机构合作,这样你就永远不会陷入脱离状态。例如,另请参阅分支的跟踪选项,而不是git checkout origin/masterdo 。git checkout master && git pull origin master
为了避免丢失已经位于分离 HEAD 中的更改,请为它们创建一个分支:git branch someNameForTheBranch
小智 5
分离的磁头状态通过设计存在于git中,并且通常无法关闭。仅当克隆存储库后执行以下操作时,您才能进入独立状态
git checkout $specific_commit
Run Code Online (Sandbox Code Playgroud)
例如,如果您位于命名分支的顶端 master
#1 -> #2 -> #3
^
master
^
HEAD
Run Code Online (Sandbox Code Playgroud)
你也是
git checkout HEAD~
Run Code Online (Sandbox Code Playgroud)
这是在HEAD当前指向之前的提交。然后您将处于以下状态
#1 -> #2 -> #3
^ ^
| master
|
HEAD
Run Code Online (Sandbox Code Playgroud)
从这一点开始,您处于分离的head状态,即HEAD指向特定的提交而不是分支标签。在此之前,HEAD指向分支标签master,而分支标签又指向特定的提交(分支的尖端)。现在,无论提交什么内容,您都将使它们位于没有分支标签(即引用)的单独分支上。跑步git branch会告诉您是否处于分离状态。
$ git branch
* (detached from 60e425a)
master
Run Code Online (Sandbox Code Playgroud)
注意星号*,它指示您当前的分支。如果您现在进行新提交,则git repo将如下所示。
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
HEAD
Run Code Online (Sandbox Code Playgroud)
如果你这样做,现在切换回主git checkout master,然后HEAD将切换master,当你创建提交所创建的分支#5将不再有任何标签,即象征性的参考导航提交#5。这意味着您的提交实际上已丢失。
因此,您有两个选择。
git checkout $specific_commit。始终停留在相同命名分支的尖端,例如master。您可以通过运行进行验证git branch。如果确实发现自己处于分离状态,并且可能已经做出了不想“松散”的提交,则如上面的流程所建议的,您需要像这样创建新的分支标签/引用
git checkout -b myNewBranch
这将使您的存储库看起来像这样
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
myNewBranch
^
HEAD
Run Code Online (Sandbox Code Playgroud)
然后,如果您返回原处,则master可以始终执行操作以导航回该提交#5以及该分支上的所有后续提交git checkout myNewBranch。
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |