我在Git中有以下情况:我做了很多重构并且分离了头部因为我在版本之间来回几次。由于分离的头部,我不再能够提交到origin / master远程分支。
HEAD是我想保留的版本。我试过的是将origin / master远程分支合并到HEAD中,这样我就可以提交该版本了。在合并期间,我说我想在有冲突的地方保持自己的变化。
结果很糟糕,有很多丢失的文件。幸运的是,我在操作之前制作了一个文件副本,所以我可以回到我刚才描述的情况。
现在我被卡住了。我不想经历每一个变化,并决定我想要保留什么(有很多)。我只想将丢失的HEAD提交回origin / master,包括新的目录结构。有没有简单的方法呢?
-
在我完成@Martin推荐的步骤后,我的状态现在是这些(请参阅评论):
答案 0 :(得分:1)
您可以结帐主人并合并你的头部。我在下面命名为good_stuff,以避免必须知道sha-1 ......
(假设你当前的HEAD已经提交了所有内容)
git checkout -b good_stuff HEAD
git checkout master
git merge good_stuff
解决冲突
git commit
答案 1 :(得分:0)
当我处于一个我想保留的超级HEAD中时,我总是首先在这一点上创建一个新的分支。假设您可以使用命令行,这就是行:
git checkout -b branch_clean_version_of_stuff
现在很容易在当前条件下找回你的工作。此外,您现在可以合并回原始主页并推回原点。
答案 2 :(得分:0)
将来执行此操作时,请不要使用分离的HEAD,进行分支。 Git的分支几乎是免费的。
要处理已经处理它的分离的HEAD,请在分离的HEAD git checkout -b whatever
处创建并检出分支,现在将其视为普通分支。您可以照常将它合并到master中。
要解决当前分离合并的问题(我怀疑您忘记查看新分支),请记下HEAD的提交ID(或标记它),然后......
git reset
会将分支标签移动到任意提交。
答案 3 :(得分:0)
在第一张图片中,很明显HEAD基于一个提交回相对master
。你在git checkout HEAD^
上做了一个master
进入一个独立状态,然后从那里开始工作。实际上,你是一个无名的分支。您可以轻松地在master
:
git rebase master
在变基之后,这些变化将从master
而不是master^
开始。换句话说,这些变化现在是快进#34;相对于master
。
此时,您仍处于分离状态。您只需切换到master
:
git checkout master
Git会警告你,你要离开一个独立的状态并给你SHA。复制SHA并执行此操作:
# on master now
git rebase SHA # fast-forward to SHA
注意:由于我们知道将master
移至SHA
的更新是快速更改,因此我们也可以使用git reset --hard SHA
进行更新。
如果你使用rebase这样做,你可以避免创建一个混乱的非线性历史特征git merges。
仅当您无法使用重新定位重写历史记录时才能进行合并(因为历史记录已发布到其他存储库)。在这种情况下,不仅没有公布历史,而且它甚至没有名字!