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

一、git merge [branchName]

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

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

git checkout dev-feature git merge master

two-branch-merge

  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-master-show

三、冲突解决

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

$ git rebase –continue

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

$ git rebase –abort

下面是冲突代码的截图 conflict-occur-01

同时我们查看版本树,发现正在将C2的修改应用于master分支的C3之上。 conflict-occur-02 变基完成后 rebase-result

《全文完》