不能'重新附加'分离的HEAD git

lmo*_*523 0 git branch github git-detached-head

我有一个bug-fix被另一个分支切掉的分支develop

在将我的更改合并bug-fix到之后develop,我通过github删除了分支,但是我相信当我删除它时我仍然被检入分支.

我在分支中也有一个未跟踪的文件 bug-fix

之后bug-fix假想删除我检查了出来develop,看见HEAD detached at develop

这是我试图修复分离头的一切:

1)首先,bug-fix当我运行时,被删除但不再出现在github上的分支仍然显示出来git branch 我尝试git fetch更新它.还是出现了

2)我签出bug-fix并删除了未跟踪的文件

3)我尝试创建一个新分支temp然后删除它

tor*_*rek 5

如果您看到文字文本字符串:

HEAD detached at develop
Run Code Online (Sandbox Code Playgroud)

(例如,在git status输出),这意味着该名称develop不是分支.(更确切地说,它不是分支名称 - 术语"分支"在Git中是模棱两可的.请参阅"分支"究竟是什么意思?)

例如,在Git的这个Git存储库中,如果我运行:

$ git checkout v2.10.0
Note: checking out 'v2.10.0'.
[snip]
HEAD is now at 6ebdac1... Git 2.10
$ git status
HEAD detached at v2.10.0
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

这是因为名称v2.10.0标签,而不是分支.

为了回到master(这一个分支名称)我只是:

$ git checkout master
Previous HEAD position was 6ebdac1... Git 2.10
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Run Code Online (Sandbox Code Playgroud)

从长远来看,Git中的分支名称确实不是很重要.在短期内(当你正在工作时)它们重要且有用的,但最终是一个分支fix-bug-1234或者test-new-feature要么工作,并且被合并到一个长期的开发或发布分支中,因此被删除,或者结果是失败并且要么被完全删除,要么"忽略合并"以将其作为死角终止,然后删除其名称.

重要的是提交

在Git中,唯一真正重要的是提交本身.

分支名称只是用作查找提交的方式.标签名称也是如此.每个名称都允许Git找到一个提交 - 名称存储像丑陋的大丑陋6ebdac1...- 并且提交本身让Git找到之前的提交.

分支名称和标记名称之间的主要区别在于分支名称应该移动,实际上,当您在分支上进行新的提交时,它将自动移动.为此,将您"放在"分支上,以便Git知道在运行时移动分支.git checkout branch-namegit commit

任何其他名称,Git主要将其视为原始哈希ID的名称.这些给你一个"独立的HEAD".出于git status目的,Git试图记住您用于进入这个"分离的HEAD"状态的名称.但这才是真正重要的ID.

删除分支名称时,提交本身会暂停一段时间 - 通常至少30天.你可以在Git的"reflogs"中找到他们的ID.这对屁股来说是一种痛苦,因为如果你跑步,git reflog你会得到很多难以搜索的东西.但提交仍在那里.你只需要找到你关心的那个(使用,例如,git show 08bb350看到提交08bb350)并"复活"它们:

$ git branch zombie 08bb350
Run Code Online (Sandbox Code Playgroud)

例如,如果您想要作为分支返回的提交是08bb350.