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

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

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

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

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


当前回答

如果您完全确定HEAD状态良好:

git branch -f master HEAD
git checkout master

你可能无法推到原点,因为你的主人已经偏离了原点。如果您确定没有其他人在使用回购,则可以强制推送:

git push -f

如果您在其他人都不使用的要素分支上,则最有用。

其他回答

如果您完全确定HEAD状态良好:

git branch -f master HEAD
git checkout master

你可能无法推到原点,因为你的主人已经偏离了原点。如果您确定没有其他人在使用回购,则可以强制推送:

git push -f

如果您在其他人都不使用的要素分支上,则最有用。

当我个人发现自己处于这样一种情况时,当我发现自己在不在master中时做了一些更改(即HEAD被分离在master的正上方,并且中间没有提交),隐藏可能会有所帮助:

git stash # HEAD has same content as master, but we are still not in master
git checkout master  # switch to master, okay because no changes and master
git stash apply  # apply changes we had between HEAD and master in the first place
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 ls-remote origin
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        HEAD
6f96ad0f97ee832ee16007d865aac9af847c1ef6        refs/heads/HEAD
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        refs/heads/master

我最终解决了这个问题

git push origin :HEAD

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

git checkout origin/develop

注意:检查起源/发展。

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

then

git checkout -b develop

它有效:)