在git中,合并–squash和rebase有什么区别?
我是新来的混帐,我想了解一个壁球和rebase之间的区别。 据我了解,你做一个壁球时,做一个rebase。
这两个git merge --squash和git rebase --interactive git merge --squash可以产生一个“压扁”的承诺。 
 但他们服务于不同的目的。 
-  git merge --squash abranch
 将在目标分支上产生压扁的提交,而不标记任何合并关系。 
  (注意:它不会立即产生提交:你需要额外的git commit -m "squash branch" ) 
 如果你想完全抛弃源代码分支,从(从SO问题中提取的模式): 
  git checkout stable X stable / a---b---c---d---e---f---g tmp 
至:
 git merge --squash tmp git commit -m "squash tmp" X-------------------G stable / a---b---c---d---e---f---g tmp 
 然后删除tmp分支。 
-  git rebase --interactive
在一个新的基础上重放你的一些或全部提交,允许你压扁(或者最近的“修复”,看到这个问题 ),直接进入:
 git checkout tmp git rebase -i stable stable X-------------------G tmp / a---b 
 如果你selectmerge --squash tmp所有提交(但是,与merge --squash相反,你可以select重播一些, merge --squash其他)。 
所以区别是:
-   merge不会触及你的源代码分支(这里是tmp),并在你想要的地方创build一个提交。
-   rebase允许你继续在同一个源分支 (仍tmp):- 一个新的基地
- 更清洁的历史
 
合并压缩将一棵树(一系列的提交)合并为一个提交。 也就是说,它压缩了n次提交中所做的所有更改。
重定基础是重新基础的,也就是为树select一个新的基础(父提交)。 也许这个更清晰的术语更清楚:他们称之为移植,因为它只是:为树select一个新的基础(父提交,根)。
在进行交互式重新分配时,您可以select压扁,select,编辑或跳过您要分配的提交。
希望是明确的!
 合并提交:保留分支中的所有提交,并在基本分支上提交它们 
 合并壁球:保留变化,但省略历史的个人承诺  
 
Rebase:这将整个特性分支移动到主分支的顶端,有效地将所有新的提交合并到主分支中
  
 
更多关于这里