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

Phi*_*lip 2 git branch commit squash

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

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

kni*_*ttl 6

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

但要回答你的问题:

git checkout -b newbranch # checkout new branch
git reset --soft C # move to commit C
git commit -m 'squashed commit'
Run Code Online (Sandbox Code Playgroud)

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

git checkout -b newbranch
git rebase -i C # now, replace every 'pick' with 'fixup'/'squash' except the first one
Run Code Online (Sandbox Code Playgroud)

同样感兴趣的是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'
Run Code Online (Sandbox Code Playgroud)