我有一个这样的分支:
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。
这应该可以解决问题。由于我们正在挑选提交消息,因此作者和作者日期将与原始提交相同,包括合并。
或者,您可以通过在第一个条件中添加以下行来获取合并之前对分支(即合并的第二个父级)的最后一次提交的提交消息和作者信息:
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