Git:如何挤压分支上的所有提交

我使用以下方法创build新分支:

git checkout -b testbranch

我做了20个提交。

现在我想压缩这20个提交。 我这样做:

git rebase -i HEAD~20

如果我不知道有多less提交,那么呢? 有没有办法做这样的事情:

git rebase -i all on this branch

压缩所有提交的另一种方法是将索引重置为master:

  git checkout yourBranch git reset $(git merge-base master yourBranch) git add -A git commit -m "one commit on yourBranch" 

这并不完美,因为这意味着你知道“yourBranch”是从哪个分支出来的。
注意:发现原始分支不容易/可能与Git ( 视觉方式往往是最简单的 ,如这里所见 )。

你在做什么很容易出错。 做就是了:

 git rebase -i master 

这将只会自动分配您的分支提交到当前最新的主。

另一个简单的方法来做到这一点:去原点分支,并做一个merge --squash 。 这个命令不会执行“squased”提交。 当你这样做,你的分支的所有提交信息将被收集。

 $ git checkout master $ git merge --squash yourBranch $ git commit # all commit messages of yourBranch in one, really useful > [status 5007e77] Squashed commit of the following: ... 

基于阅读几个Stackoverflow问题和压扁的答案,我认为这是一个很好的一行,以压扁分支上的所有提交:

 git reset --soft $(git merge-base master YOUR_BRANCH) && git commit -am "YOUR COMMIT MESSAGE" && git rebase -i master 

这是假设主人是基地分支。