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

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

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

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

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


当前回答

这对我来说非常有效:

1.保存本地修改的git存储

如果要放弃更改git-clean-dfgit结帐--。gitclean会删除所有未跟踪的文件(警告:虽然它不会删除.gitignore中直接提到的忽略文件,但可能会删除驻留在文件夹中的忽略文件),gitcheckout会清除所有未标记的更改。

2.git checkout master切换到主分支(假设您想使用master)3.git pull从主分支提取最后一次提交4.git状态,以便检查一切是否正常

On branch master
Your branch is up-to-date with 'origin/master'.

其他回答

这对我来说非常有效:

1.保存本地修改的git存储

如果要放弃更改git-clean-dfgit结帐--。gitclean会删除所有未跟踪的文件(警告:虽然它不会删除.gitignore中直接提到的忽略文件,但可能会删除驻留在文件夹中的忽略文件),gitcheckout会清除所有未标记的更改。

2.git checkout master切换到主分支(假设您想使用master)3.git pull从主分支提取最后一次提交4.git状态,以便检查一切是否正常

On branch master
Your branch is up-to-date with 'origin/master'.

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

git branch -f master HEAD
git checkout master

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

git push -f

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

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

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

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

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

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

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

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

git符号ref HEAD refs/heads/master

头部重新连接!

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