git操作笔记(五)git中的merge和rebase

1,207 阅读2分钟

我们借助sourcetree的树状图来进行讲解(git命令行查看树状图命令:git log --graph)

需求:把开发分支 develop 代码,合入到 master 分支

直接 sourcetree 从master分支上检出 develop 分支

merge

创建完分支后,分别在master分支和develop分支修改代码并提交。

  1. 在master分支提交更改1

  2. 在 develop 分支提交更改 2 3

image.png

  1. 直接合入到master分支,此时主流程多出一条 merge 记录,,(合入的三条命令)

    切换到master分支,git checkout master

    合入develop,git merge develop

    解决冲突后,git push,推送到远程一条带有merge记录的提交

  2. 如果develop分支需要继续开发,并且需要master中新提交的代码

    执行git merge master把 master 合并到 develop 分支

rebase

本地的两个分支rebase

新建如下提交,master提交两次,dev提交两次

image.png

在master分支上执行 rebase

  1. git checkout master 切换到master分支

  2. git rebase develop 执行 rebase

  3. 解决冲突,git add .

  4. git rebase --continue 继续执行 rebase

  5. 重复上述rebase步骤,直到 REBASE 消失

image.png

日常开发中与远程代码冲突rebase操作

如小明没有拉取远端最新代码 就 push,,(直接拉取则merge)

image.png

  1. 执行 git pull --rebase 操作 (git pull的默认行为是git fetch + git merge,git pull --rebase则是git fetch + git rebase.)

    重复上述动作

image.png

整体流程图如下:

image.png

备注

git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;即回到撤销 rebase,回到没有 pull 时的状态

git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);

git rebase --continue 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run “git rebase --continue”)

git pull -r 即 git pull --rebase,相当于 git fetch + fit rebase

merge和rebase有什么区别

  1. merge可以准确的体现出时间线,rebase时间线容易混乱

  2. rebase看起来简洁,可以做到只有一条树状图,而merge不会