在git中回滚或重新创建master分支?

时间:2010-04-22 08:33:00

标签: git workflow branch

我有一个git repo,它有一些分支 - 有主分支,这是我们稳定的工作版本,然后有一个开发/暂存分支,我们正在做新的工作。

不幸的是,似乎没有想到我对于变基有点过于热心,并且在一段时间内将所有登台代码拉到了Master中(大约80次提交......是的,我知道,愚蠢,笨拙,代码差-man-ship等......)。

由于这个原因,我很难对当前版本的应用程序(一个rails应用程序)进行微小的修复并推出更改而不会推出我们尚未推出的“暂存”新功能想要发布。

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

  1. 确定最后一次'主干'提交
  2. 从该点开始提交所有提交并将它们移动到一个单独的分支中,或多或少地回滚更改
  3. 开始使用它们的分支。
  4. 不幸的是,我仍然在不断地学习git,所以我对这里真正要做的事情感到有些困惑。

    顺便说一下,提交已经被推到了一个遥控器,但是我不介意用--force重新推动,我是唯一一个推动遥控的人。

    谢谢!

2 个答案:

答案 0 :(得分:2)

会有出版问题(意味着您必须:

  • 强制将新主人推送到您的远程
  • 与已从该遥控器拉出的任何人进行通信,以便他们将主人重置为远程主人 )

如果你的情况是:

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

也就是说,如果你当前的主人它实际上也是当前的阶段分支,那么就按顺序进行简单的重置(如his answer中提到的那样)

但如果你的情况是:

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

如:“我已经将舞台融入主人,然后继续为师傅工作!”
,然后 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)

答案 1 :(得分:0)

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