git merage和git rebase合并分支

git merage和git rebase合并分支

在日常开发中,一般工作流程如下:

从主分支上拉取自己的工作分支
修改代码,完成工作
在自己分支上进行了commit
和主分支代码进行合并
推送到远端
向主分支提出合并请求

在完成工作的过程中,主分支上可能已经有了新的内容合入,所以需要合并工作分支和主分支的代码。

合并不同分支一般有两种方式:merage和rebase

git rebase

下面展示用rebase合并分支,达到的“变基”的效果:

  • A\B\C\M\N等表示分支上的commit改动
  • 变基的通俗解释:work分支是从master的B处拉出的分支,即基底是B;rebase之后,将work的基底变为master的C
rebase之前:
master: A --- B --- C
               \
work:           M --- N

rebase之后:
master: A --- B --- C
                     \
work:                 M' --- N'

rebase操作的思路

$ git checkout work
$ git rebase master
or
$ git rebase master work
#切换回自己的工作分支,执行rebase操作
#中途可以git rebase --abort,让分支还原到开始的状态

#git会提示哪些文件冲突,解决完冲突添加修改的文件
$ git add xxx
$ git rebase --contiune
#rebase是按照commit依次合并,所以可能需要多次contiune
#直到rebase完成

#如果推送到远端,需要-f强制推送
$ git push --force origin xxx

模拟实际操作

feature_work是自己的工作分支,从master分支分离之后,已经有其他内容合入了master分支。

也就是feature_work的主分支基,已经落后于当前master,我们需要把当前master的基替换到feature_work分支下。

操作完成后相当于:feature_work的基底是master最新的(自己修改的一些commit也会替换在最新的master基础上),这样就可以再提交合入主分支的申请。

  1. 更新本地master分支代码
$ git checkout master
$ git pull
  1. 切换回工作分支,执行rebase操作
$ git checkout feature_work
$ git rebase master

可以看到信息为"rebase readme"的commit执行合并
并且README.md文件冲突,需要去代码解决
  1. 添加修改后的冲突文件,执行rebase continue
$ git add README.md
$ git rebase --continue

信息为"start modification"的commit执行合并
start.cpp冲突,重复上述操作,直到所有的commit合并完成
  1. 这里如果更多commit有冲突,需要重复执行"解决冲突-add file-continue"的操作
$ git add start.cpp
$ git rebase --continue
Applying: start modification
#合并完成,最新的基底已经应用到'start modification'上了
  1. 提交到远端
#这时代码由于解决了和master的冲突,大概率会和当前分支远端存在冲突;并且没有新的commit产生,所以这时直接push不会成功
#-f强制推送到远端,注意当前分支上其他人的代码
$ git push origin feature_work --force

git merage

git merage操作分支的结构示意

  • O是merage后在work分支上新增的commit
merage之前:
master: A --- B --- C
               \
work:           M --- N

merage之后:
master: A --- B --- C ---
               \          \
work:           M --- N --- O

操作示例

#确保master代码更新,切换回工作分支
$ git checkout master
$ git pull
$ git checkout work

#执行merage操作,会产生一个Merage xx to xx ...的commit
$ git merage master

#也可以用git merage --abort放弃合并
解决冲突

#添加冲突文件,提交commit
$ git add xxx
$ git commit -m "xxx"

#推送到远端
$ git push origin work

两者的适用场景

在工作分支只有自己在修改的时候,使用git rebase可以减少多余的commit,
但分支是公共分支,有多人修改的时候,rebase可能会扰乱协作,应该使用merage合并分支。

git merage会产生记录merage步骤的commit,有时候会需要这些信息记录。

参考地址
https://blog.csdn.net/weixin_42310154/article/details/119004977
https://blog.csdn.net/mocas_wang/article/details/106750498

posted @ 2023-02-10 17:15  WuYunTaXue  阅读(249)  评论(0编辑  收藏  举报