git rebase 和 merge 的区别

git rebasegit merge 解决了相同的问题。都是将一个分支的提交合并到另外一分支上,那它们有哪些不一样喃?前端

git merge

master 分支合入到 feature 分支git

git checkout feature
git merge master

// 或者
git merge master feature

git merge 的优点是它保留了分支的结构与历史提交目录,但同时这也致使了提交历史会被大量的 merge 污染github

git rebase

rebase 命令是一个常常听到,可是大多数人掌握又不太好的一个命令。rebase 合并每每又被称为 「变基」面试

它是将把全部的提交压缩成一个 patch 。而后把 patch 添加到目标分支里。rebasemerge 不一样的是,rebase 经过为原始分支中的每一个提交建立全新的 commits 来重写项目历史记录算法

master 分支为基,对 feautre 分支进行变基:编辑器

git checout feature
git rebase master

git rebase 的优点是能够得到更清晰的项目历史。首先,它消除了 git merge 所需的没必要要的合并提交;其次,正如你在上图中所看到的,rebase 会产生完美线性的项目历史记录,你能够在 feature 分支上没有任何分叉的状况下一直追寻到项目的初始提交。url

可是, rebase 会丢失合并提交的上下文, 使咱们没法看到真实的更改是什么时候合并到目标分支上的.net

交互式 Rebase

这个命令比 git rebase 更为强大,它将会在 commits 移动到新分支时更改这些 commits ,一般,这用于在合并 feature 分支到 master 以前清理其杂乱的历史记录。code

git checkout feature
git rebase -i master

这将打开一个文本编辑器,列出即将移动的全部提交:blog

pick 6633b5a Message for commit #1
pick 3a03f0d Message for commit #2
pick 657897b Message for commit #3

它清晰地展现了分支在 rebase 后的样子。经过从新调整,提交历史能够变成任何你想要的样子。

消除这种无心义的提交使你的功能历史更容易理解。这是 git merge 根本没法作到的事情。

至于 commits 条目前的 pickfixupsquash 等命令,在 git 目录执行 git rebase -i 便可查看到,你们按需重排或合并提交便可,注释说明很是清晰,在此不作过多说明

git merge vs git rebase

git merge:

  • 记录下合并动做,不少时候这种合并动做是垃圾信息
  • 不会修改原 commit ID
  • 冲突只解决一次
  • 分支看着不大整洁,可是能看出合并的前后顺序
  • 记录了真实的 commit 状况,包括每一个分支的详情

git rebase:

  • 改变当前分支 branch out 的位置
  • 获得更简洁的项目历史
  • 每一个 commit 都须要解决冲突
  • 修改全部 commit ID

个人建议

随着团队增加,经过 merge 策略很难管理和追踪到每一个提交。为了提交历史更清晰、更易于理解,使用 rebase 是一个明智、高效的选择。

下面是针对不一样环境的建议,能够最大限度地发挥 rebase 的优点:

**本地开发:**若是你没有和别人协同工做,你应该使用 rebasing 而不是 merging ,这样历史记录会很清晰。若是你已经从仓库拉取了你的我的 fork,而且不许备和别的开发者一块儿工做,在分支 pushrebase 也是能够的。

你的代码准备好了被 review :你建立了 pull request。别人正在 review 你的代码,可能把它拉到了本地 review 。若是这样,你最好别 rebase 你的代码。你应该建立一个 “rework” 提交来更新你的 feature 分支。它会让 pull request 的可塑性更强,也能避免历史忽然丢失。

review 已经完成而且已经准备好了合并到目标分支。恭喜!你就要删除你的 feature 分支了。因为别的开发者不须要拉取、合并这些更改,这是你清理记录的好机会。你能够改写记录,折叠原始提交、“pr rework” 提交和 "merge" 提交,使之成为一整个清晰的提交。做为可选,你还能够给这些提交建立一个明确的 merge ,这样作实际上颇有用。它会记录 feature 并入 master 的时间。

参考:

Merging vs. Rebasing

An introduction to Git merge and rebase: what they are, and how to use them

天天三分钟,进阶一个前端小 tip 面试题库 算法题库

相关文章
相关标签/搜索