我有一个分支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,然后删除它
发布于 2016-11-01 23:49:22
如果您看到文字文本字符串:
磁头在展开时分离
(例如,在git status输出中),这意味着名称develop不是分支。(更确切地说,它不是一个分支名称-“分支”一词在Git中是模棱两可的。见What exactly do we mean by "branch"?)
例如,在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这是因为名称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'.从长远来看,在Git中,分支名称并不是很重要。在短期内(当您在工作时),它们是重要的和有用的,但最终像fix-bug-1234或test-new-feature这样的分支要么工作成功,然后被合并到一个长期存在的开发或发布分支中,然后被删除,要么被完全删除,要么被“忽略合并”,将其终止为一个死胡同,然后将其名称删除。
有什么重要的事
在Git中,真正重要的是承诺本身。
分支名称只是查找提交的一种方法。标签名也是如此。每个名称都允许Git找到一个提交-该名称存储大的丑陋散列,比如6ebdac1...,-and,提交本身,让Git查找更早的提交。
分支名称和标记名称之间的关键区别是,分支名称应该移动,实际上,当您对分支进行新的提交时,分支名称将自动移动。为此,git checkout branch-name将您“放在”分支上,以便Git在运行git commit时知道如何移动分支。
任何其他名称,Git通常都被视为原始散列ID的名称,这给您提供了一个“独立的头”。出于git status的目的,Git试图记住进入“分离头”状态的名称。但真正重要的是身份。
当删除分支名称时,提交本身会停留一段时间--通常至少30天。你可以在Git的"reflogs“中找到他们的身份证。这有点让人头疼,因为如果运行git reflog,就会发现大量难以搜索的东西。但是提交文件还在里面。您只需找到您所关心的人(例如,使用git show 08bb350查看提交08bb350)并“复活”它们:
$ git branch zombie 08bb350例如,如果您希望作为分支返回提交,则为08bb350。
https://stackoverflow.com/questions/40368022
复制相似问题