代码之家  ›  专栏  ›  技术社区  ›  Oliver Hausler

在Git中使用当前HEAD的简单方法?

  •  1
  • Oliver Hausler  · 技术社区  · 10 年前

    我在Git中遇到了以下情况:我做了很多重构,并分离了头部,因为我在版本之间来回了几次。由于头部分离,我无法再提交到原始/主远程分支。

    branches

    HEAD是我想要保留的版本。我所尝试的是将原始/主远程分支合并到HEAD中,这样我就可以将该版本提交回去。在合并过程中,我说过,无论哪里发生冲突,我都希望保留自己的更改。

    结果是一片混乱,有很多丢失的文件。幸运的是,我在手术前复制了一份文件,这样我就可以回到刚才描述的情况。

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

    --

    在我完成了@Martin推荐的步骤之后,我的状态现在是这样的(也请参见评论):

    new status

    4 回复  |  直到 10 年前
        1
  •  1
  •   Martin G    10 年前

    您可以签出master并合并HEAD。我将其命名为good_stuff,以避免永远了解sha-1。。。

    (假设您当前的HEAD上已经提交了所有内容)

    git checkout -b good_stuff HEAD
    git checkout master
    git merge good_stuff
    

    解决冲突

    git commit
    
        2
  •  0
  •   Frido Emans    10 年前

    当我处于一个分离的HEAD中时,我总是首先在这一点上创建一个新的分支。假设您可以使用命令行,这是一行:

    git checkout -b branch_clean_version_of_stuff
    

    现在很容易在当前条件下找到你的工作。现在,您也可以合并回原点主控形状并推回到原点。

        3
  •  0
  •   Schwern    10 年前

    当你以后这样做的时候,不要在分离的HEAD上工作,做一个分支。Git中的分支实际上是免费的。

    要处理一个有工作的分离HEAD,请在分离HEAD处创建并检查一个分支, git checkout -b whatever ,现在将其视为正常分支。您可以按正常方式将其合并到master中。

    要解决当前合并分离的问题(我怀疑您忘记签出新分支),请注意HEAD的提交ID(或标记它),然后。。。

    • 切换到主分支
    • git重置--硬

    git reset 将分支标签移动到任意提交。

        4
  •  0
  •   Kaz    10 年前

    在第一张图中,很明显HEAD是基于一个提交返回的相对 master 。你做了 git checkout HEAD^ 在…上 主人 进入分离状态,然后从那里开始工作。实际上,你在一个无名的分支上。您可以轻松地在 主人 :

    git rebase master
    

    在重新启动后,这些更改将从 主人 而不是 master^ 换句话说,相对于 主人 .

    此时,您仍处于分离状态。您只需切换到 主人 :

    git checkout master
    

    Git会警告你,你正在离开一个分离状态,并给你SHA。复制SHA并执行以下操作:

    # on master now
    git rebase SHA   # fast-forward to SHA
    

    注意:由于我们知道要移动的更新 主人 SHA 是一个快速的变化,我们可以用 git reset --hard SHA 而且

    如果使用rebase这样做,可以避免创建git合并的混乱、非线性历史特征。

    只有当您无法使用重新基址重写历史记录时(因为历史记录已发布到其他存储库),才能进行合并。在这种情况下,历史不仅没有出版,甚至连名字都没有!