我有一个分支,mybranch,有六个提交,源于提交C.我想创建一个新的分支,也基于提交C,有效地包括mybranch的所有提交,压缩成一个提交。最简单的方法是什么?
我需要这样做,因为在你git-push之前“壁球”的口号。对于新分支,我不希望在推送到远程服务器的历史记录中提及 mybranch 。我想创建一个用于推送的全新分支的原因是因为我想保留 mybranch 中的所有提交以供参考。
答案 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'