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

我需要在重新平衡之后执行提交吗?

  •  6
  • Benjol  · 技术社区  · 14 年前

    我刚刚将一个功能分支重新设置到另一个功能分支上(为将所有内容重新设置到我的主控形状做准备),它涉及到相当多棘手的合并解决方案。

    钢筋是否自动保存为某个地方的提交?

    这些修改在哪里?我在Gitk里什么都看不见,或者 git log --oneline .

    (同样的问题是,当我重新平衡后合并分支时。)

    3 回复  |  直到 14 年前
        1
  •  8
  •   P Shved    14 年前

    Rebase正在将提交移动到另一个分支的顶部。如果移动的提交导致合并冲突,则更改此提交以反映合并解决方案。

    重新平衡的目的是使您的提交看起来像是对您重新平衡到的分支所做的更改。所以最合乎逻辑的方法是将合并冲突合并到这些提交中。因此不需要额外的承诺。

    合并是不同的,因为它是将分散的分支合并在一起的显式操作。不更改每个分支中的提交。冲突解决反映在合并提交中。

        2
  •  5
  •   CB Bailey    14 年前

    是的,成功的重新平衡和合并进行提交。它们只会提交需要解决的冲突,但是Rebase(或合并)的输出会告诉您已经发生了这种情况,以及如何解决它。

    对于REBASE,只需解决索引中的冲突,然后 git rebase --continue .

    对于合并,您需要提交( git commit ,但它是一个合并的事实将被记住,并且将提供一个合适的默认提交消息供您编辑。

        3
  •  2
  •   VonC    14 年前

    过去(2006年,1.5.3之前和 its user manual ) git rebase presented like so :

    一个特殊的案例 樱桃采摘 如果你想移动整个分支 向新的“基础”提交。
    这是由 git-rebase .
    指定要移动的分支(默认 HEAD )以及将其移动到何处(无默认值), 还有:

    • git cherry-picks 分支的每一个补丁,
    • 在目标上应用它,
    • 并移动 refs/heads/<branch> 指向新创建提交的指针。

    因此,根据定义,将进行提交(不需要进行提交)

    REBASE的一个特殊情况是,当您想要划分您的工作、移动(并重新创建新的)提交时。
    来自同一个教程(如图所示,在重新设置后不需要进一步提交):

    假设您在当前的头部混合了两个特性的开发,一个称为“dev”的分支。

    x-x-x-x  (master)
           \ 
            -f1a-f1b-f1c-f2a-f2b-f2c (dev, HEAD)
    

    你想把它们分为“dev1”和“dev2”。假设 是一个分支机构,那么你可以通过

    git log master..HEAD
    

    或者只是得到一个提交的原始列表

    git rev-list master..HEAD
    

    不管怎样,假设您找到了一个您想要的提交列表 dev1 创建这个分支:

    git checkout -b dev1 master
    for i in `cat commit_list`; do
        git-cherry-pick $i
    done
    
            -f1a'-f1b'-f1c' (dev1, HEAD)
           /
    x-x-x-x  (master)
           \ 
            -f1a-f1b-f1c-f2a-f2b-f2c (dev)
    

    您可以使用您编辑的列表的另一半来生成 dev2 分支,但是如果你不确定你是否忘记了什么,或者只是不想做手工工作,那么你可以使用git-rebase为你做这件事。

    git checkout -b dev2 dev    # Create dev2 branch
    git-rebase --onto master dev1   # Subreact dev1 and rebase
    

    这将找到 dev 而不是在 DEV1 ,在master上应用它们,并调用结果 DEV2 .

            -f1a'-f1b'-f1c' (dev1, HEAD)
           /
    x-x-x-x  (master)
           \ 
            -f2a-f2b-f2c (dev2, HEAD)