3

我有一个这样的分支:

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。

4

1 回答 1

2

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

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

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

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

签出基本提交(处于分离状态):

git checkout A~0

樱桃挑选所有提交:

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
于 2014-12-16T22:17:23.307 回答