2011-08-31 37 views
1

我有一个分支mybranch,它有六个提交并来自提交C。我想创建一个新的分支,也基于提交C,它有效地包含mybranch提交的所有提交,并压缩为一个提交。最简单的方法是什么?如何创建一个包含从另一个分支到一个节点的所有提交的同级分支?

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

回答

4

为什么只推挤压扁的提交?这听起来很疯狂(和错误)。

但是,为了回答你的问题:

git checkout -b newbranch # checkout new branch 
git reset --soft C# move to commit C 
git add -u # add all changes to index 
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

生成工作树和索引状态,就好像发生了真正的合并(exc ept为合并信息),但不实际提交或移动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' 
+0

这样做了,谢谢! – Phillip

相关问题