如何创建包含从另一个分支到一个节点的所有提交的兄弟分支?

时间:2011-08-31 21:31:18

标签: git branch commit squash

我有一个分支,mybranch,有六个提交,源于提交C.我想创建一个新的分支,也基于提交C,有效地包括mybranch的所有提交,压缩成一个提交。最简单的方法是什么?

我需要这样做,因为在你git-push之前“壁球”的口号。对于新分支,我不希望在推送到远程服务器的历史记录中提及 mybranch 。我想创建一个用于推送的全新分支的原因是因为我想保留 mybranch 中的所有提交以供参考。

1 个答案:

答案 0 :(得分:6)

为什么只推送压缩提交?这听起来很疯狂(而且是错误的)。

但要回答你的问题:

git checkout -b newbranch # checkout new branch
git reset --soft C # move to commit C
git commit -m 'squashed commit'

另一种可能性是使用rebase -i将所有提交压缩/修复为一个提交:

git checkout -b newbranch
git rebase -i C # now, replace every 'pick' with 'fixup'/'squash' except the first one

同样感兴趣的是git merge --squash

  

生成工作树和索引状态,好像发生了真正的合并(合并信息除外),但实际上没有提交或移动HEAD,也没有记录$ GIT_DIR / MERGE_HEAD导致下一个git commit命令创建合并提交。这允许您在当前分支之上创建单个提交,其效果与合并另一个分支(或章鱼的情况下更多)相同。

git checkout -b newbranch C # create newbranch at commit C
git merge --squash mybranch
git commit -m 'squashed commit'