git merge 和git rebase的区别

最近在学习git的版本控制,分支之间的同步、冲突处理,cherry-pick等有趣的功能。下面是整理的一些学习笔记。

一、git merge [branchName]

顾名思义,就是合并分支,比如你当前代码库有两个分支一个是master,另一个是dev-feature。(如下图)

Repo(two branch)

我们在dev-feature 分支,想同步master的通用修改:

git checkout dev-feature
git merge master

Git会按照修改的时间点将master分支的修改记录依次应用到dev-feature分支。 我们使用git log 可以看到修改记录依次为(从新到旧):C7←C5←C6←C3←C4←C2←C1。

二、git rebase [branchName]

按照字面意思立即就是变基,比如我们当前在dev-feature分支,执行git rebase master,Git会先找到new-feature分支和master的最近公共祖先(C2结点),然后把当前分支的后续修改依次应用于master分支。
  Git会把C4和C6节点回收,可以用git gc查看。

三、冲突解决

如果变基过程中发生冲突(比如我们修改了文件的同一行)!然后我们找到下图中标记的地方,修改代码解决冲突。
  在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引(index), 然后,你无需执行 git commit ,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用<a>--abort</a>参数来终止rebase的行动,并且"dev-feature" 分支会回到rebase开始前的状态。

$ git rebase --abort

下面是冲突代码的截图


conflict

同时我们查看版本树,发现正在将C2的修改应用于master分支的C3之上。


conflict occur

变基完成后


rebase success

《完》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容