git rebase

本文对比了git merge与git rebase在合并分支上的区别,着重讲解了rebase如何整理提交历史并适用于精细化版本管理。还介绍了rebase的使用方法,包括冲突处理策略:放弃(rebase --abort), 跳过(rebase --skip)和继续(rebase --continue)。

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

首先git merge 和 git rebase的区别
https://zhuanlan.zhihu.com/p/75499871

  • git merge 操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式

  • git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性

  • 另外值得一提的是,当我们开发一个功能时,可能会在本地有无数次commit,而你实际上在你的master分支上只想显示每一个功能测试完成后的一次完整提交记录就好了,其他的提交记录并不想将来全部保留在你的master分支上,那么rebase将会是一个好的选择,他可以在rebase时将本地多次的commit合并成一个commit,还可以修改commit的描述等

git rebase 使用方式:
https://blog.csdn.net/nrsc272420199/article/details/85555911

对冲突的处理:
1、使用 $git rebase --abort

执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销rebase。

2、使用 $git rebase --skip

git rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说开发者A对c.sh文件的commit无效,开发者A自己修改的部分全部无效,因此,在使用skip时请慎重。

3、使用 $git rebase --continue

执行完$git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:

$ git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。

Git Rebase 是一种强大的工具,用于整理和优化提交历史记录。相比于 `merge` ,它可以让你的项目历史更加清晰整洁,因为所有的更改都会出现在一条直线上,仿佛是一个人完成的一样。 ### 使用场景 通常来说,当您从 master 分支拉出一个新的特性分支开始编写代码时,在这段时间里其他同事可能也在继续向 master 推送新的更改。那么到了要将您的特性和主线同步起来的时候就面临着选择:要么 merge 把两个分支的历史交织在一起形成“分叉”结构;要么采用 rebase 来把当前分支上的每一个提交都移接到最新版的主干之上。 ### 基本语法 假设我们正在 topic 分支上工作,并希望基于最新的 upstream/main 构建我们的提交: ```bash git fetch upstream # 获取远端仓库更新但不会自动合并或影响现有分支 git rebase upstream/main # 将topic branch相对于upstream/main进行变基操作 ``` 如果是在本地有未推送到远程服务器的新提交,则可以直接针对master做rebase: ```bash git checkout featureA // 先切回到需要调整顺序的branch git rebase master // 让该branch的基础变为现在的master tip ``` ### 解决冲突 在 rebase 的过程中可能会遇到一些冲突(conflicts),这是因为某些文件既有来自 base 上的变化又有来自 working tree 中的不同修改导致无法确定哪一个版本才是正确的。此时你需要手动编辑这些有问题的地方直到满意为止,然后标记它们已解决并通过命令告知 Git 继续剩下的部分。 ```bash vim filename.ext // 手动解决冲突... git add filename.ext // 标记冲突已被解决 git rebase --continue // 完成此次rebase步骤并进入下一个(如果有剩余的话) ``` 如果您不想处理冲突或者发现错误地进行了 rebase 可以随时中断整个过程恢复原状: ```bash git rebase --abort // 放弃正在进行中的rebase动作返回初始状态 ``` ### 应用实例 假设有这样一个情况图示: Before Rebasing: ``` A---B---C topic D---E---F master ``` After Running ‘git rebase master’ on Topic Branch: ``` A'--B'--C' topic / D---E---F----G master ``` 可以看到原来的 ABC 被复制成了 A'B'C',现在他们是建立于最新的 Master F 点之上的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值