git rebase 使用详解

本文深入探讨Git中rebase与merge的区别,包括操作流程、冲突处理及应用场景。通过实例对比,帮助读者理解两种工作流的特点,掌握高效版本控制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rebase

本地两个分支 一个我的分支 test 一个主分支 master

现在我修改的部分要合并到 master 上,可以有两种选择 merge 或者 rebase

两者的最后得到的结果是一样的,但是区别是 rebase操作不会生成新的节点,是将两个分支融合成一个线性的操作

而merge 则还是两个分支,只不过在merge后这个点交汇

图示

merge

这里写图片描述

rebase

这里写图片描述
为了让分支树看起来更简化,所以我们选用rebase

如何rebase 呢?

首先我的本地代码库都不是最新的,所以先从远端仓库pull一下

git checkout master`
git pull
 
  • 1
  • 2

然后 开始和test分支rebase

git checkout test
git rebase master
 
  • 1
  • 2

这个时候就开始rebase 了,一般情况下rebase都是会有冲突的,详细查看冲突可以用命令git status然后就会显示哪个文件有冲突,然后打开有冲突的哪个文件,会发现有一些“<<<<<<<”, “=======”, “>>>>>>>” 这样的符号。

<<<<<<<” 表示冲突代码开始

“=======” 表示testmaster冲突代码分隔符

“>>>>>>>" 表示冲突代码的结束

<<<<<<<  
所以这一块区域test的代码

=======  
这一块区域master的代码


>>>>>>> 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

rebase 和 merge的另一个区别是rebase 的冲突是一个一个解决,如果有十个冲突,先解决第一个,然后用命令

git add -u 
git rebase --continue 
 
  • 1
  • 2

继续后才会出现第二个冲突,直到所有冲突解决完,而merge 是所有的冲突都会显示出来。
另外如果rebase过程中,你想中途退出,恢复rebase前的代码则可以用命令
git rebase --abort

所以rebase的工作流就是

git rebase 
while(存在冲突) {
    git status
    找到当前冲突文件,编辑解决冲突
    git add -u
    git rebase --continue
    if( git rebase --abort )
        break; 
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最后冲突全部解决,rebase成功!!

然后我需要把本地的test 分支push 到远端test分支上然后再给远端的master分支 PR。

但是git push 以后总是提示不让我push 百度了一下发现原因:

比如远端仓库的代码 A 和 B 都 clone 了一份,然后B修改了x.txt文件后push到了仓库, 这个时候 A 就不能直接push了,因为A的x.txt文件没有修改,所以此时A应该把远端的仓库pull一下,merge掉x.txt文件的冲突,才能push所以我这里就犯了一个错误,应该在rebase 前,先把原来本地的test分支push到远端,否则rebase之后就相当于两个人一个人改了文件。另一个人就无法push了。

所以这里需要pull一下
git pull
因为是merge所以这里会出现所有的conflict
git status
查看 编辑冲突后再 git pull一下,就合并了。
最后把本地分支test push到远端分支
git pull
git push origin test
最后PR(pull request)即可。

总结

rebase 工作流:

git rebase 
while(存在冲突) {
    git status
    找到当前冲突文件,编辑解决冲突
    git add -u
    git rebase --continue
    if( git rebase --abort )
        break; 
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

merge工作流 :

1.git pull  (或fetch && merge) 
2.编辑冲突文件
3.git pull
 
  • 1
  • 2
  • 3
      <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet">
              </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值