git merge 和 git rebase

git merge简要说明

  1. git merge会产生一次新的commit版本,并且此版本会有2个或者更多个父提交,可以通过HEAD^1,HEAD^2,HEAD^n方法来引用此提交的父提交。
  2. git merge是非破坏性的(non-destructive)操作,没有负作用,并且被合并的这些分支都可以git push发布到remote公共仓库中。
  3. 由于每次合并会产生一次新的提交历史,如果主分支非常活跃,就会产生很多这种合并分支的提交历史,会对项目本身的提交历史产生污染。
    git-rebase-test.sh测试脚本

git rebase简要说明

  1. git rebase 会产生一个修改过的很干净的项目提交历史,例如在feature分支上git rebase master,会将feature分支上的提交添加到master分支的最顶端。
  2. git rebase操作有负面效果,影响项目提交历史的安全性(safety)和可追溯性(traceability)。
  3. git rebase -i master可以交互式压缩提交(squash)或者忽略指定提交。
  4. git rebase使用黄金守则: NEVER USE IT ON PUBLIC BRANCHES.
  5. 不要将主分支rebase到特性分支上(don’t rebased master onto your feature branch: git rebase feature)。
  6. 其他开发者提交的新特性和修改(如patch)应该创建一个临时分支apply这些修改,再使用git merge合并修改到主分支上,而不是使用git rebase方式操作,因为rebase操作修改了提交历史,很难追溯哪些提交新增了这些特性和修改。