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

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

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

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

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


当前回答

只需执行以下操作:

git checkout master

或者,如果要保留更改,请执行以下操作:

git checkout -b temp
git checkout -B master temp

其他回答

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

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

我在搜索“You are in”separated HEAD“状态时发现了这个问题。

在分析了我在这里所做的事情之后,与我过去所做的相比,我发现我犯了一个错误。

我的正常流量是:

git checkout master
git fetch
git checkout my-cool-branch
git pull

这次我做到了:

git checkout master
git fetch
git checkout origin/my-cool-branch
# You are in 'detached HEAD' state.

问题是我无意中做到了:

git checkout origin/my-cool-branch

而不是:

git checkout my-cool-branch

修复方法(在我的情况下)只是运行上述命令,然后继续流程:

git checkout my-cool-branch
git pull

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

git checkout -b new-branch-name

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

git log

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

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

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

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

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

git checkout origin/develop

注意:检查起源/发展。

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

then

git checkout -b develop

它有效:)

如果您在master上执行了一些提交,并且只想在那里“向后合并”master(即您希望master指向HEAD),那么一行代码将是:

git checkout -B master HEAD

这将创建一个名为master的新分支,即使它已经存在(这就像移动master,这就是我们想要的)。新创建的分支被设置为指向HEAD,也就是您所在的位置。新的分支已签出,因此之后您将成为master。

我发现这在子存储库的情况下特别有用,而子存储库也经常处于分离状态。