我试过这样的事情:
git branch temp
Run Code Online (Sandbox Code Playgroud)
创建一个新的分支,但不要移动HEAD.但我得到:
# Not currently on any branch.
Run Code Online (Sandbox Code Playgroud)
我不想合并任何东西,我只想要一个新的分支HEAD.
与Git合作,我不得不回到特定的提交.我做了一些更改,现在我想提交它们.这样做的正确方法是什么?
我的项目现在处于分离-HEAD状态.如果我提交,我的更改是否会被保存
git commit
Run Code Online (Sandbox Code Playgroud)
?否则,我该怎么做才不会丢失我的更改?
这一直困扰着我关于git.我有一个包含多个遥控器的存储库,我需要将修补程序应用于遥控器的主分支.所以,我尝试做:
git fetch remote1 master
git checkout remote1/master
Run Code Online (Sandbox Code Playgroud)
但是,我总是处于一个独立的头状态.检查远程主控并应用补丁的正确方法是什么?
我从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 …Run Code Online (Sandbox Code Playgroud) 这是我所做的:
签出远程 git 存储库。
添加到以下[remote "origin]部分.git/config:
fetch = +refs/heads/release/BranchName:refs/remotes/origin/release/BranchName
git checkout origin/release/BranchName
之后git status报道:
HEAD 与 origin/release/BranchName 分离
添加并检查了一些修改。
试图git push。这导致了错误消息:
致命:您当前不在分支上。现在要推送导致当前(分离的 HEAD)状态的历史记录,请使用
Run Code Online (Sandbox Code Playgroud)git push origin HEAD:<name-of-remote-branch>
git push origin HEAD:origin/release/BranchName
并得到以下信息:
错误:无法推送到不合格的目的地:origin/release/BranchName 目的地 refspec 既不与远程上的现有 ref 匹配,也不以 refs/ 开头,我们无法根据源 ref 猜测前缀。错误:未能将一些引用推送到“RepositoryName”
因此,问题是:我做错了什么?如何解决这个问题并推动更改?
我知道,在Git的说法中,"分离的HEAD"对应于符号引用HEAD未指向任何分支的状态.我也知道git branch,例如,会告诉我我是否处于分离-HEAD状态,例如
* (detached from 9a2ef02)
master
Run Code Online (Sandbox Code Playgroud)
或不,例如
* master
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有办法使输出git log --decorate完全明确,我是否处于分离-HEAD状态.这是一个用"明确的"来解释我的意思的例子.

说我在master,我的历史看起来如下:
4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
Run Code Online (Sandbox Code Playgroud)
如果我跑
git checkout 9a2ef02
Run Code Online (Sandbox Code Playgroud)
那么输出git log --decorate --oneline就是
9a2ef02 (HEAD) Correct typo in header
f0badb5 Add to-do section to README
Run Code Online (Sandbox Code Playgroud)
因为HEAD此输出旁边没有列出分支引用,所以我确信我有一个分离的HEAD.
但是,如果我跑
git checkout 4d860e9
Run Code Online (Sandbox Code Playgroud)
然后HEAD不指向master,但直接提交 …
git status 说:
HEAD detached at e1997bd
Run Code Online (Sandbox Code Playgroud)
并git rev-parse HEAD说:
e1997bd
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我认为HEAD脱离意味着HEAD没有指向分支尖端.
我有一个本地分支“master”跟踪远程分支“origin/master”。
当我像这样结账时:
git checkout refs/heads/master
Run Code Online (Sandbox Code Playgroud)
我最终得到了一个独立的头:
注意:查看“refs/heads/master”。
您处于“分离 HEAD”状态。您可以环顾四周,进行实验性更改并提交它们,并且可以通过执行另一次签出来放弃在此状态下所做的任何提交,而不会影响任何分支。
显然我可以直接查看“master”,但这恰好是一个不明确的参考。我只想知道在不分离 HEAD 的情况下消除分支名称歧义的“git 方式”是什么。
介绍和搜索
所以我认为我犯了一个严重的错误,我很担心。我已经解析了论坛上的超脱头脑,我已经接近找到答案了,但是场景太具体了,不适用于我所处的位置。如果您找到回答我问题的特定线程,请链接我。
例如:如何将分离的 HEAD 与 master/origin 协调?
那家伙已经做了git rebase -i,而我没有。我试过变基,但它没有解决我的问题。
小背景:
问题:
要使用工作代码访问旧提交,我做了(可能是错误的事情):
git log
git checkout <hash-of-desired-old-commit>
Run Code Online (Sandbox Code Playgroud)
我继续完成代码。感谢上帝的版本控制!但是射击,为什么 git 这么复杂?我如何保存这项工作?我现在处于一个超脱的头脑中。Origin/Master 在未来的一些提交中最好全部删除。
我尝试过的:
git add -A跟着git commit -m "oh shit, detached head commit"和git rebase mastergit reset --hard HEAD~3根据此处的建议:检查旧提交并使其成为新提交问题:我如何将我的超然头与原点/大师调和?一旦和解,我是否需要git push --force或其他什么(特别是--force旗帜)?这个独立的头有工作,我读到我等待的时间越长,垃圾收集可能会来吃我丢失的分支。抱歉,我确实缺乏任何正式的 git 培训……我几乎准备好检查 origin master 然后重写代码。
先感谢您。
最近在一个git仓库中工作时,我想在一个旧的提交( 68cce45)处查看代码,所以我做了
git checkout 68cce45
Run Code Online (Sandbox Code Playgroud)
查看更改后,我想返回到存储库的当前版本并继续工作。由于2bcfd11是最近的提交,我做了
git checkout 2bcfd11
Run Code Online (Sandbox Code Playgroud)
然后我做了一些改变并做了
git add *
Run Code Online (Sandbox Code Playgroud)
进而
git status
Run Code Online (Sandbox Code Playgroud)
这给了我警告:HEAD detached at 2bcfd11。
我糊涂了。如果我检出的最后一次提交是在几个版本之前,我可以理解为什么我会处于“分离的 HEAD 状态”。但是由于我检出的最后一次提交是存储库的最新版本,那么为什么我会处于分离的 HEAD 状态?HEAD 现在不是指向存储库的“顶部”吗?