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

何时需要Git Rebase?

  •  17
  • hasen  · 技术社区  · 16 年前

    每次我读到git-rebase文档,我都会迷路。我觉得这是一种低级的操作(读:黑暗魔法)。

    引用文档:

    假设存在以下历史记录 当前分支是“主题”:

           A---B---C topic
          /
     D---E---F---G master 
    

    从这一点上来说, 以下命令:

    git rebase master 
    git rebase master topic 
    

    将是:

                   A'--B'--C' topic
                  /
     D---E---F---G master
    

    问题是: 为什么会有人想做这样的事?

    首先,它似乎“重写”了历史,就好像分支是从不同的点开始的;本质上,提交历史就是“一堆谎言”。

    还有一点,感觉不安全。我试过一次,有很多冲突,所有的地狱都爆发了。我不记得我到底是如何解决这个问题的,但是如果我记得正确的话,它是在一个临时的测试分支或者类似的东西上。

    另一个问题是: 我是否因为不知道如何使用而错过了一些真正酷/省时的功能集? git-rebase ?

    编辑:

    相关问题: Undoing a git rebase

    4 回复  |  直到 14 年前
        1
  •  8
  •   Dustin    16 年前

    首先,在Git中没有不安全的操作。REBASE有一个中止操作,所有操作都会使其返回到reflog,因此您可以撤消任何操作。事实上,情况恰恰相反。

    它让你可以自由地在任何时候提交你想要的,而不必有一个“好”的建设,而你正在一条道路上制造一个。你的修改 出版 可以通过将一路上所采取的所有步骤压缩为一个提交来实现。

    我一直在使用REBASE(通常是通过拉来实现的,我通常在获取阶段之后配置它来实现REBASE)。不要把它看作是重写历史——把它看作是在发布之前为您清理草稿提供的工具。

    从现在开始的一年中,您的项目中的任何人都应该知道您确实是在反对修订的情况下开始这个特性的吗? E 而不是修订 G ?

    不必要的递归合并掩盖了历史中更重要的部分。

        2
  •  8
  •   Metiu    16 年前

    例如,当你想提交一个补丁给别人修改过的代码时,你需要使用它。例如,如果您从软件的版本1.56分支,同时维护人员转到版本1.57,那么他/她可能只接受版本1.57上的补丁。

    您可以将分支重新设置为1.57版,更正所有冲突,验证并重新提交补丁。

        3
  •  4
  •   bayer    16 年前

    一旦将“主题”合并回“主控形状”,无论如何都会有这些冲突。因此,最好不时地将“主题”重新定位到“主控”上(如果你做一些小的步骤比你做一个大的步骤更容易——至少在IMO上)。如果在合并之前重新平衡,那么所有“冒险”的事情都发生在分支中,合并之后就很容易了。

        4
  •  4
  •   Jakub Narębski adamtaub    16 年前

    git rebase: keeping your branches current 詹姆斯·鲍斯的博客文章