【问题标题】:Getting out of a 2-branch mess in git摆脱 git 中的 2 分支混乱
【发布时间】:2012-02-03 01:28:10
【问题描述】:

我在 2 个分支上的 git 乱七八糟。 Frontend 包含大量正在进行的开发工作——它应该被分割成多个分支,而且有点混乱。

情况如下——frontend 在左侧,master 的顶部在右侧:

| frontend 1: newest commit (to be pushed)  
| frontend 2: recent commit (to be pushed)  
| frontend 3: week-old commit (this was a temporary save of lots of ongoing work - it probably should have been a stash. This one cannot be pushed)  
|  
|  | master: this is the current state of the site
|  | master: previous commit
| /
|/ 
| master before `git branch frontend`

在分支frontend,我想:

  • frontend 1frontend 2 转移到master 以便现在可以推送。
  • 'cancel'frontend 3 并将代码移回暂存,以便我可以正确提交(即不在大量的一般工作中)

我是 git 的初学者,我担心如果我继续输入命令以使其变得更好,我会造成更多的伤害(就像我已经做过的那样)。如果您能提供帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: git git-branch


    【解决方案1】:
    1. 执行interactive rebase 重新排列前端提交的顺序,因此frontend 3 是最新的。
    2. 然后,在前端,执行 git reset HEAD^ 以“取消提交”前端 3,同时保留更改。
    3. git stash 按照您的意图存储来自 frontend 3 的更改
    4. 切换到主控。
    5. frontend 合并到master。 (或者变基,无论你做什么。)
    6. 在任何地方弹出隐藏的更改并继续工作。

    这假设交互式变基实际上可以干净地执行——即frontend 3 中的更改与frontend 1frontend 2 中的更改无关。

    【讨论】:

    • 非常感谢您的回答!您能否评论一下这与cherry-pick/rebase -i 的答案有何不同?
    • @sscirrus 完成所有操作后,效果将相同。我的方式是你找出 frontend 分支的历史是否可以在你推送之前而不是之后干净地重新排列,并避免用另一个混乱替换。 (尽管在进行了良好的更改后,您将有时间进行清理。)
    • @sscirrus (我有点不喜欢樱桃采摘,因为它会创建更改的副本而不是仅仅在树周围移动它们,这听起来像是在稍后您想要干净地合并分支时要求冲突。 )
    • 谢谢 - 我已经完成了一半的步骤(昨晚 vim 的一些问题!)我在第 1 步之前隐藏了我的工作树。如果我为第 3 步隐藏了frontend 3,是吗可以弹出步骤 3 的存储然后弹出步骤 1 的存储吗?到目前为止,为您的回答和 cmets +1,谢谢!
    • @sscirrus 我认为这就是隐藏的工作方式,真的。你藏起来的最后一件事将是你弹出的第一件事。因此,您在第 1 步开始之前存储您所做的任何本地更改;在步骤 3 中存储 frontend 3;然后一旦完成,弹出frontend 3并清理它;然后在那之后,弹出你必须开始的任何本地更改并继续处理它们。
    【解决方案2】:

    你可以将cherry-pick 两个你想要的提交返回到master。然后,frontend 上的 rebase -i 将让您根据需要重新排序和拆分分支上的提交。

    【讨论】:

      【解决方案3】:

      最简单的方法可能是将frontend2frontend1 选为master,然后再选frontend3 并进行软重置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多