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

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

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

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

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


当前回答

我遇到了这个问题,当我读到最热门的答案时:

HEAD是当前签出提交的符号名称。

我想:啊哈!如果HEAD是当前签出提交的符号名称,我可以通过对master重新设置基址来将其与master进行协调:

git rebase HEAD master

此命令:

签出主机标识HEAD的父提交返回到HEAD从master分支的点在master之上播放这些提交

最终的结果是,所有在HEAD中而不是在master中的提交都在master中。master仍处于检出状态。


关于遥控器:

我在rebase中杀死的几个提交被推送了,而本地提交的新提交不在那里。

远程历史记录不能再使用本地历史记录快速转发。您需要强制push(gitpush-f)来覆盖远程历史记录。如果你有任何合作者,与他们进行协调通常是有意义的,这样每个人都在同一页上。

将master推送到远程源之后,远程跟踪分支origin/master将被更新为指向与master相同的提交。

其他回答

在我的例子中,我运行了gitstatus,我发现我的工作目录中有一些未跟踪的文件。

为了使重新底座工作,我只需要清洁它们(因为我不需要它们)。

最简单的解决方案是创建一个新分支,

git checkout -b new-branch-name

然后通过命令检查提交日志,

git log

如果所有匹配,则按:q退出

现在通过命令将所有更改推送到新分支

git push --set-upstream origin new-branch-name

现在,问题解决了,您的本地gitHEAD连接到新分支,您可以从门户提出pull请求。

我今天遇到了这个问题,我更新了一个子模块,但没有在任何分支上。我已经承诺了,所以藏东西、结账、拆洗都不起作用。我最终选择了那个超然的脑袋。因此,在我提交后(推送失败时),我立即:

git checkout master
git cherry-pick 99fe23ab

我的想法是:我头脑冷静,但我想成为主人。假设我的分离状态与主状态没有太大的不同,如果我能将我的承诺应用于主状态,我就做好了。这正是樱桃树的作用。

我陷入了一种非常愚蠢的状态,我怀疑其他人会觉得这很有用。。。。但以防万一

git ls-remote origin
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        HEAD
6f96ad0f97ee832ee16007d865aac9af847c1ef6        refs/heads/HEAD
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        refs/heads/master

我最终解决了这个问题

git push origin :HEAD

简单地说,分离的HEAD状态意味着您没有签出任何分支的HEAD(或提示)。

通过示例了解

在大多数情况下,分支是多个提交的序列,如:

提交1:主-->分支_HEAD(123be6a76168aca712aea16076e971c23835f8ca)

提交2:主-->123be6a76168aca712aea16076e971c23835f8ca-->分支_HEAD

如上所述,在提交序列的情况下,分支指向最近的提交。因此,在这种情况下,如果您签出提交123be6a76168aca712aea16076e971c23835f8ca,那么您将处于分离的头部状态,因为分支的head指向100644a76168ca712aea16086e971c2 3835f8Ca,从技术上讲,您在没有分支的HEAT签出。因此,您处于分离的HEAD状态。

理论解释

在这个博客中,它清楚地指出Git存储库是一个提交树,每个提交都指向其祖先,每个提交指针都会更新,指向每个分支的这些指针都存储在.Git/refs子目录中。标记存储在.git/refs/Tags中,分支存储在.gt/refs/heads中。如果您查看任何文件,您都会发现每个标记对应一个文件,具有40个字符的提交哈希,正如@Chris Johnsen和@Yaroslav Nikitenko所解释的,您可以查看这些引用。