如何压缩分支中的所有合并?

时间:2014-10-26 18:14:56

标签: git branch squash

我有这样的分支:

A---B---B1---B2---D---E---E1---E2---G---H
     \           /     \           /
      C1---C2---’       F1---F2---’

我想重写它并使它像这样:

A---B---B1---B2---D---E---E1---E2---G---H

这意味着,压缩所有合并。

分支很长。如何自动完成?

修改

这不是历史线性化。我想压缩所有合并,比如D和G.

1 个答案:

答案 0 :(得分:2)

这应该可以解决问题。由于我们选择提交消息,作者和作者日期将与原始提交相同,包括合并。

或者,您可以通过在第一个条件中添加以下行来获取合并之前最后一次提交到分支的提交消息和作者信息,即合并的第二个父级:

git commit --amend -C $(git rev-parse $rev^2)

如果经常这样做,这些命令很容易转换为脚本。

Checkout base commit(处于分离状态):

git checkout A~0

Cherry挑选所有提交:

for rev in $(git rev-list  HEAD..branch-name --first-parent --reverse)
do
    if [[ $(git show --summary --format="%P" $rev | wc -w ) -gt 1 ]]
    then
        git cherry-pick $rev --mainline 1
        # git commit --amend -C $(git rev-parse $rev^2)
    else
        git cherry-pick $rev
    fi
done

强制旧分支和结帐:

git branch -f branch-name HEAD
git checkout branch-name