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

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

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

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

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


当前回答

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

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

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

其他回答

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 checkout origin/develop

注意:检查起源/发展。

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

then

git checkout -b develop

它有效:)

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

git checkout master
git cherry-pick 99fe23ab

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

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

git checkout -b new-branch-name

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

git log

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

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

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

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

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

所以我做到了:

git branch -d branchname

然后再次检查分支:

git checkout branchname