代码之家  ›  专栏  ›  技术社区  ›  Senthil Kumaran

git—仅ff—压扁—将分支重新定位为master

git
  •  1
  • Senthil Kumaran  · 技术社区  · 6 年前

    我正在尝试自动化一个git场景,其中,我希望分支的提交在合并到master之前

    (一) rebased 在大师之上。

    2) 它可以应用 --ff-only 主人。我的猜测是1)涵盖了这一点。是这样吗?

    3) 我想把它压缩成一个可以在master上应用的提交,然后合并它。

    Git似乎没有为命令提供满足这些需求的选项。我有办法实现这个目标吗?

    base_branch: M1->C1->C2 master_branch: M1->M2

    我想要

    1. base_branch: M1->M2->C1->C2 2. base_branch: M1->M2->C1->C2 3. base_branch: M1->M2->C 4. merge 5. master_branch: M1->M2->C

    我想保持一个干净,线性的历史,我的主人,和所有的变化挤压到一个承诺。我怎样才能做到这一点?

    注意:如果我将更改转换为补丁,并应用到master之上,就完成了。但我在找一个好办法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   bk2204    6 年前

    Git并没有提供一种自动的方法来在rebase期间按您可能想到的方式压缩提交。然而, git rebase 提供一个交互式的rebase,它能够挤压提交。通常,交互折扣是交互的,它们会产生一个编辑器。但是,可以在环境变量中指定shell命令 GIT_SEQUENCE_EDITOR ,它将用于编辑这些提交。

    所以要以更自动化的方式做你想做的事情,你可以运行 GIT_SEQUENCE_EDITOR="sed -i -e '2,\$s/^pick/squash/'" git rebase -i master ,它将修改todo列表以将所有提交压缩在一起。然后Git将提示您将提交消息合并为一个。

    如果你在寻找一个完全没有相互影响的情况,你可以改变 squash 在上面的命令中 fixup ,这将只保留第一个提交消息,而丢弃其他消息。

    注意,在macOS上,您可能需要更改 sed -i sed -i '' 因为它的sed工作方式有点不同。