我一直处于超然状态。我不知道为什么,也不知道它是什么。
每次我试图从这种状态中恢复时,我都会丢失一些文件(来自上次我在分离头状态下所做的提交)。
是否可以完全避免这种状态,或者是设计使然?
最佳答案
Detached head state 存在于 git 中,通常无法关闭。只有当你在克隆你的存储库之后,做这样的事情时,你才能进入分离的头部状态
git checkout $specific_commit
例如,如果您位于指定分支的顶端 master
#1 -> #2 -> #3
^
master
^
HEAD
你也是
git checkout HEAD~
这是在 HEAD 当前指向的位置之前提交的。然后你将处于以下状态
#1 -> #2 -> #3
^ ^
| master
|
HEAD
从这一点开始,您处于分离的 head 状态,即 HEAD 指向特定的提交而不是分支标签。在此之前,HEAD 指向分支标签 master
,它又指向特定的提交(分支的尖端)。现在,无论您提交什么,它们都将位于没有分支标签(即引用)的单独分支上。正在运行 git branch
会告诉你是否处于分离的头部状态。
$ git branch
* (detached from 60e425a)
master
注意星星*
,表示您当前的分支。
如果您现在进行新提交,git repo 将如下所示。
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
HEAD
如果您现在通过执行 git checkout master
切换回 master然后HEAD
将切换master
和创建提交时创建的分支 #5
将不再有任何标签,即导航到提交的符号引用 #5
.这意味着您的提交实际上丢失了。
因此您有两个选择。
- 如果你不想以分离的头状态结束,那就不要做
git checkout $specific_commit
.始终停留在同名分支的顶端,例如master
.您可以通过运行git branch
来验证这一点. 如果您确实发现自己处于分离的头脑状态,并且您可能已经做出不想“松散”的提交,那么,正如上面建议的 Flows,您需要创建新的像这样的分支标签/引用
git checkout -b myNewBranch
这将使您的存储库看起来像这样
#1 -> #2 -> #3
| ^
| master
|
\----> #5
^
myNewBranch
^
HEAD
然后如果你回到master
您始终可以导航回提交 #5
以及通过执行 git checkout myNewBranch
在该分支上的所有后续提交.
关于git - 如何避免在 git 中进入分离的头部状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37512333/