如何将分离的HEAD与master / origin协调?

十年热恋 提交于 2019-12-29 11:26:04

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我是Git分支复杂的新手。 我总是在一个分支上工作并提交更改,然后定期推送到我的远程源。

在最近的某个地方,我重置了一些文件以使它们脱离提交暂存,后来又做了一个rebase -i来摆脱最近几次本地提交。 现在我处于一种我不太了解的状态。

在我的工作区域, git log显示了我所期待的 - 我在正确的列车上,我不想要的提交,以及那里的新提交等。

但是我只是推送到远程存储库,并且有什么不同 - 我在rebase中杀死的一些提交被推送,而本地提交的新提交不存在。

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


#1楼

将您的分离提交放到自己的分支上

只需运行git checkout -b mynewbranch

然后运行git log ,你会看到提交现在是这个新分支的HEAD


#2楼

我遇到了这个问题,当我读到最高投票答案:

HEAD是当前签出的提交的符号名称。

我想:啊哈! 如果HEAD是为currenlty结账符号名提交,我可以调和这对master通过衍合靠在master

git rebase HEAD master

这个命令:

  1. 检查出master
  2. HEAD的父提交标识回HEADmaster分开的点
  3. master之上播放那些提交

最终结果是所有在HEAD但不是master中的提交都是mastermaster仍然检查出来。


关于遥控器:

我在rebase中杀死的几个提交被推了出来,而那些在本地提交的新提交不在那里。

无法再使用您的本地历史记录快速转发远程历史记录。 您需要强制推送( git push -f )来覆盖远程历史记录。 如果您有任何协作者,通常有必要与他们协调,以便每个人都在同一页面上。

master推送到远程origin ,将更新远程跟踪分支origin/master以指向与master相同的提交。


#3楼

这样做:

git checkout master

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

git checkout -b temp
git checkout -B master temp

#4楼

我陷入了一个非常愚蠢的状态,我怀疑其他人会发现这个有用......但为了以防万一

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

我最终解决了

git push origin :HEAD

#5楼

如果你只有主分支并想回到“开发”或功能只是这样做:

git checkout origin/develop

注意:签出原产地/开发

你处于独立的HEAD状态。 您可以环顾四周,进行实验性更改并提交它们,并且您可以放弃在此状态下进行的任何提交,而不会通过执行另一次检出来影响任何分支...

然后

git checkout -b develop

有用 :)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!