代码之家  ›  专栏  ›  技术社区  ›  Matthew Savage

在Git中回滚或重新创建主分支?

  •  1
  • Matthew Savage  · 技术社区  · 15 年前

    我有一个git repo,它有几个分支——有一个主分支,它是我们稳定工作的版本,然后有一个开发/分段分支,我们正在其中进行新的工作。

    不幸的是,我似乎没有想到我对重新平衡有点过于热心,在一段时间内(大约80次提交)将所有的分段代码都拉到master中。是的,我知道,愚蠢,笨手笨脚,糟糕的代码人船等等。

    由于这个原因,我很难对我们的应用程序(一个Rails应用程序)的当前版本做一些小的修改,并且在不推出我们还不想发布的“分阶段”新功能的情况下推出更改。

    我想知道是否可以执行以下操作:

    1. 确定最后一次“trunk”提交
    2. 从这一点开始接受所有提交,并将它们移动到一个单独的分支,或多或少地回滚更改。
    3. 开始使用树枝。

    不幸的是,尽管如此,我仍然在不断地学习关于git的知识,所以我对在这里真正要做什么有点困惑。

    顺便说一句,承诺已经被推到了一个远程,但我不介意用——强制,我是唯一一个推远程的人。

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community CDub    8 年前

    将发行出版物(即您必须:

    • 强制将新主机推到遥控器
    • 与已从该遥控器拔出的任何人通信,以便他们将主控器重置为遥控器。 )

    如果您的情况是:

    m1-m2-m3-m4-s1-s2-s3-s4 (master,stage)
    

    也就是说,如果您当前的主控形状实际上也是当前的阶段分支,那么一个简单的重置是有序的(如knittl在 his answer )

    但如果你的情况是:

    m1-m2-m3-m4-s1-s2-s3-s4-m5-m6 (master)
                           \
                            -s5-s6 (stage)
    

    如:“我已经将舞台融入大师,然后继续在大师身上工作!”
    ,然后A rebase --onto 按顺序排列:

    git checkout master
    git reset --HARD m4
    git rebase --onto master s4 m6
    

    你会得到:

    m1-m2-m3-m4-m5'-m6' (master)
               \
                -s1-s2-s3-s4-s5-s6 (stage)
    
        2
  •  0
  •   knittl    15 年前

    是否已将提交推送到远程存储库?如果你没有,你可以简单地使用 git reset <commit> (请务必阅读之前的手册页,重置可能会造成危险和混乱)