代码之家  ›  专栏  ›  技术社区  ›  mozillalives

在Git分支中后退几次修订

git
  •  4
  • mozillalives  · 技术社区  · 16 年前

    我对Git还是个新手,所以请忍受我。我开始在我当前的分支中将一个特性添加到我的项目中并提交它,然后发现我需要首先添加一个更重要的特性。(如果我考虑过的话,我会把新功能放到另一个分支上,但遗憾的是,事后诸葛亮是20/20。)

    我想回到以前的提交,添加更重要的功能,然后添加已经提交的不太重要的功能。有什么想法吗?

    事先谢谢。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    这意味着重写分支的提交历史记录,这是可能的(实际的),前提是您还没有将该分支推送到另一个回购。

    如果您不推动该分支,您可以:

    o---x---x---F1a---F1b---F1c <-- current branch
    

    标记为分支F1

    $ git branch F1
    
    o---x---x---F1a---F1b---F1c <-- current branch, F1
    

    将当前分支重置为F1之前的分支

    $ git reset x
    
    o---x---x---F1a---F1b---F1c <-- F1
            ^
            |
           current branch    
    

    使您的功能0 f0(在f1之前应该完成的功能)

    $ git commit ...
    
    o---x---x---F0a---F0b <-- current branch
            ^
            |
            ---F1a---F1b---F1c <-- F1
    

    在当前分支的顶部重新设置F1分支

    $ git checkout F1
    $ git rebase current
    $ git checkout current
    $ git merge F1 # fast-formward merge
    
    o---x---x---F0a---F0b---F1a'---F1b'---F1c' <-- current branch, F1
    

    如果您已经推出了该功能,则会按顺序进行一些恢复(请参见 Diego's answer )

        2
  •  8
  •   CB Bailey    16 年前

    最好的方法可能是基于您想要添加新特性的点签出一个新的分支。

    git checkout -b newfeature <oldcommit>
    

    在哪里? <oldcommit> 是提交ID或相对引用,例如(例如) HEAD~3 电流前三次 HEAD .

    功能完成后,您可以返回到原始分支并选择将其合并或在 newfeature 分支。关于Git的一个伟大的事情是,你不必按顺序排列你的所有工作,事实上,不将你的历史强制成一个线性的承诺序列通常更为合理。

        3
  •  0
  •   Diego Dias    16 年前

    如果你刚把钱交给当地的分部,那是件容易的事。

    • 转到另一个分支: git checkout -b moreimportantfeature . 新的分支将没有您提交的更改。因此,您可以添加新功能并推送到远程回购,或者执行 git rebase otherbranch 推动两种变化

    如果您已推动回购:

    • 使用 git revert HEAD (或者,如果您想重新提交更多的内容,可以使用变量头^n)。然后推动你的改变。