【推荐】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
这个命令:
- 检查出
master
- 将
HEAD
的父提交标识回HEAD
与master
分开的点 - 在
master
之上播放那些提交
最终结果是所有在HEAD
但不是master
中的提交都是master
。 master
仍然检查出来。
关于遥控器:
我在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
有用 :)
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3149155