我对Git的分支复杂性很陌生。我总是在一个分支上工作,提交更改,然后定期推送到远程源。

最近的某个时候,我对一些文件进行了重置,以使它们脱离提交阶段,后来又进行了重新base-I,以消除最近的几个本地提交。现在我处于一种我不太理解的状态。

在我的工作区,git日志显示了我所期望的一切——我在正确的火车上,有我不想要的提交,还有新的提交,等等。

但我只是推到了远程存储库,这是不同的——我在rebase中删除的几个提交被推送了,而本地提交的新提交不在那里。

我认为“master/origin”与HEAD是分离的,但我不完全清楚这意味着什么,如何使用命令行工具将其可视化,以及如何修复它。


当前回答

我也有同样的问题。我把零钱藏在git stash并将本地的分支硬重置为先前的提交(我认为这是导致的),然后执行git pull,我现在无法将其头部分离。别忘了git stash再次申请更改。

其他回答

正如Chris所指出的,我有以下情况

git符号ref HEAD失败,出现致命错误:ref HEAD不是符号ref

然而,git rev parse refs/heads/master指向了一个好的提交,我可以从中恢复(在我的案例中,最后一次提交,您可以通过使用git show[SHA]看到该提交)

在那之后我做了很多乱七八糟的事情,但似乎已经解决了,

git符号ref HEAD refs/heads/master

头部重新连接!

查看此处了解分离头部的基本说明:

http://git-scm.com/docs/git-checkout

使其可视化的命令行:

git branch

or

git branch -a

您将得到如下输出:

* (no branch)
master
branch1

*(无分支)表示您处于分离状态。

您可以通过执行git checkout somecommit等来达到此状态,它会警告您以下内容:

您处于“分离HEAD”状态。你可以四处看看,做实验更改并提交它们,您可以放弃你在这方面的任何承诺状态而不影响任何分支通过执行另一次结账。如果要创建新分支到保留您创建的提交,您可以这样做所以(现在或以后)使用-b和再次执行checkout命令。例子:git checkout-b new_branch_name

现在,要让他们找到主人:

执行git reflog,甚至只执行git log,并记录您的提交。现在git checkout master和git合并提交。

git merge HEAD@{1}

编辑:

此外,使用gitrebase-i不仅可以删除/删除不需要的提交,还可以编辑它们。只需在提交列表中提到“edit”,您就可以修改提交,然后发出gitrebase——继续。这将确保你永远不会进入一个分离的头部。

如果您在Eclipse中使用EGit:假设你的硕士是你的主要发展分支

将更改提交到一个分支,通常是一个新的分支然后从遥控器拉出然后右键单击项目节点,选择团队,然后选择显示历史记录然后右键单击主控形状,选择“检出”如果Eclipse告诉,有两个主服务器一个本地一个远程,请选择远程

之后,您应该能够重新附着到原点主控形状。

我也有同样的问题。我把零钱藏在git stash并将本地的分支硬重置为先前的提交(我认为这是导致的),然后执行git pull,我现在无法将其头部分离。别忘了git stash再次申请更改。

如果你有一个主分支,想回到“开发”或功能,就这样做:

git checkout origin/develop

注意:检查起源/发展。

您处于分离HEAD状态。你可以四处看看,做实验更改并提交它们,您可以放弃在此过程中所做的任何提交通过执行另一个签出,状态而不影响任何分支。。。

then

git checkout -b develop

它有效:)