在Git中继续使用当前HEAD的简便方法?

时间:2015-02-05 19:53:01

标签: git git-merge git-commit

我在Git中有以下情况:我做了很多重构并且分离了头部因为我在版本之间来回几次。由于分离的头部,我不再能够提交到origin / master远程分支。

branches

HEAD是我想保留的版本。我试过的是将origin / master远程分支合并到HEAD中,这样我就可以提交该版本了。在合并期间,我说我想在有冲突的地方保持自己的变化。

结果很糟糕,有很多丢失的文件。幸运的是,我在操作之前制作了一个文件副本,所以我可以回到我刚才描述的情况。

现在我被卡住了。我不想经历每一个变化,并决定我想要保留什么(有很多)。我只想将丢失的HEAD提交回origin / master,包括新的目录结构。有没有简单的方法呢?

-

在我完成@Martin推荐的步骤后,我的状态现在是这些(请参阅评论):

new status

4 个答案:

答案 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 checkout master
  • git reset --hard

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。

仅当您无法使用重新定位重写历史记录时才能进行合并(因为历史记录已发布到其他存储库)。在这种情况下,不仅没有公布历史,而且它甚至没有名字!