guo*_*guo 7 git intellij-idea git-detached-head
我从master检查了一个提交/分支,然后检查回master并写了一些东西.在那之后,我承诺了,但我最终得到了一个独立的HEAD.为什么?
这是我做的:
退房回来

输入一些单词
尝试提交; 它提示有一个独立的头.

IntelliJ IDEA的控制台显示:
17:08:58.143: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:08:58.143: git init
Initialized empty Git repository in C:/Users/jiahao/IdeaProjects/testtt/src/.git/
17:09:16.331: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:09:16.331: git -c core.quotepath=false add --ignore-errors -- C.java
17:09:24.407: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:09:24.407: git -c core.quotepath=false commit --only -F C:\Users\jiahao\AppData\Local\Temp\git-commit-msg-0.txt -- C.java
[master (root-commit) 22d1c79] first commit
1 file changed, 6 insertions(+)
create mode 100644 C.java
17:09:38.060: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:09:38.060: git -c core.quotepath=false commit --only -F C:\Users\jiahao\AppData\Local\Temp\git-commit-msg-0.txt -- C.java
[master 69084f3] second commit
1 file changed, 1 insertion(+)
17:09:44.136: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:09:44.136: git -c core.quotepath=false checkout 22d1c7919eab50925411d9bbb8a9ad1575608c27
Note: checking out '22d1c7919eab50925411d9bbb8a9ad1575608c27'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 22d1c79... first commit
17:09:46.576: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:09:46.576: git -c core.quotepath=false checkout 69084f344b79a48da92855d3fb633a28a672a302
Previous HEAD position was 22d1c79... first commit
HEAD is now at 69084f3... second commit
17:18:26.999: cd C:\Users\jiahao\IdeaProjects\testtt\src
17:18:26.999: git -c core.quotepath=false commit --only -F C:\Users\jiahao\AppData\Local\Temp\git-commit-msg-0.txt -- C.java
[detached HEAD 783fbf2] third commit
1 file changed, 1 insertion(+)
Run Code Online (Sandbox Code Playgroud)
jub*_*0bs 14
仔细检查IntelliJ-IDEA日志可以发现问题的本质.创建前两个提交后,您遇到以下情况:
不知何故,你检查了你的第一次提交,这使你处于分离-HEAD状态:
然后,类似地,你检查了你的第二次提交(恰好是你的master分支的提示).这仍然让你处于分离-HEAD状态:
你写:
我从
master[...] 检查了一个提交/分支
小心.检查恰好是分支的提示的提交并不等同于检出该分支!
请注意,HEAD现在直接指向提交,而不是指向分支.这就是"分离的HEAD"的定义.这一事实HEAD指向同一个commit的master变化一无所知的事实,你的头分离.
某些IDE可能无法清楚地表明您实际上处于分离-HEAD状态.甚至git log --decorate,很长一段时间,也没有告诉你是否HEAD指向master,或分离并直接指向master尖端.
然后你做了第三次提交,正如预期的那样,仍然留给你一个独立的HEAD; 你的master分支仍指向第二次提交.
要离开分离的HEAD状态,您需要重新连接HEAD到分支(master在此处).如何取决于你想做什么.在下面,我假设您可以访问Git CLI:
如果要放弃第三次提交,只需运行即可
git checkout master
Run Code Online (Sandbox Code Playgroud)
你最终会回到这种情况:
如果您想保留第三次提交并master指出它,请运行
git branch -f master HEAD
Run Code Online (Sandbox Code Playgroud)
然后
git checkout master
Run Code Online (Sandbox Code Playgroud)
在IDE中学习Git是一种灾难.您应该首先在命令行中建立您的理解,然后才开始在GUI中使用Git,如果您认为这样做会改善您的工作流程.