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

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

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

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

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


当前回答

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

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

我最终解决了这个问题

git push origin :HEAD

其他回答

我遇到了同样的问题,我已经通过以下步骤解决了它。

如果您需要保留更改

首先,您需要运行gitcheckoutmaster命令,以返回到master树枝如果需要保留更改,只需运行git checkout-b changes并git checkout-B主更改

如果您不需要更改

要从分支中删除所有未跟踪的文件,请运行gitclean-df。然后,您需要清除存储库中所有未标记的更改。为了做到这一点,您必须运行git checkout--最后,您必须使用gitcheckoutmaster命令将分支放回主分支。

而不是执行git签出origin/master

只需执行git结账大师

然后gitbranch将确认您的分支。

git checkout checksum  # You could use this to peek previous checkpoints
git status # You will see HEAD detached at checksum
git checkout master # This moves HEAD to master branch

对我来说,这就像再次删除本地分支一样简单,因为我没有任何要推送的本地提交:

所以我做到了:

git branch -d branchname

然后再次检查分支:

git checkout branchname

我今天刚刚遇到这个问题,我很确定我通过以下方式解决了这个问题:

git branch temp
git checkout master
git merge temp

当我在工作电脑上发现如何做到这一点时,现在我在个人电脑上遇到了同样的问题。所以我必须等到星期一我回到工作电脑前,看看我是怎么做到的。