聊下git pull --rebase

本文探讨了在多人并行开发中使用 Git 的良好习惯,特别是如何利用 git pull --rebase 来保持代码整洁,避免不必要的 merge commit,从而简化发布分支的管理。

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

有一种场景是经常发生的。

大家都基于develop拉出分支进行并行开发,这里的分支可能是多到数十个。然后彼此在进行自己的逻辑编写,时间可能需要几天或者几周。在这期间你可能需要时不时的需要pull下远程develop分支上的同事的提交。这是个好的习惯,这样下去就可以避免你在一个无用的代码上进行长期的开发,回头来看这些代码不是新的代码。甚至是会面临很多冲突需要解决,而这个时候你可能还需要对冲突的部分代码进行测试回归,这就很麻烦了。

那么我们来看一下你在pull时候需要习惯性的加上—rebase参数,这样可以避免很多问题。--rebase的本意是想让事情的发展看起来很连续和优美,而不是多出很多无用的merge commit 。

你在有些时候pull代码的时候会有这样的一个提示:

1

这个时候你是习惯性的,”esc :wq“,直接默认commit注释。然后你的commit log就多了一笔很不好看的log。

2

如果你不懂的在最后release的时候合并掉这些无意义的commit,最后你的release分支就会被你搞的很丑陋。(合并commit请参考:聊下git merge –squash)

这个问题的出现是正常的,我们来看下为什么会出现这个问题。正常情况下的分支commit路线:

3

当前develop分支上有三个commit。现在我们两个项目开始启动,需要分别拉出两个分支独立开发。

4

我们分别checkout –b 出来两个分支,独立开发互不干扰。正常情况下,如果这两个分支的改动都没有重贴或者冲突的时候,一切都很顺利的。(重贴是指可以被系统自动合并的修改,而冲突是需要你手动解决的。你要重现这个现象还是有点小麻烦的,你要修改刚好可以重贴的位置,而不是直接导致冲突的地方)

我在develop_newfeature_authorcheck里修改了点东西,push到develop。然后checkout 到develop_newfeature_apiwrapper。

git pull

这将会把develop_newfeature_authorcheck分支的修改直接拉下来于本地代码merge,且产生一个commit,也就是merge commit。

5

你可以使用 git pull –rebase 这样的结局就完全不一样。—rebase 并不会产生一个commit提交,而是会将你的E commit附加到D commit的结尾处。在看commit log时,不会多出你所不知道的commit出来。其实此处的F commmit是无意义的,它只是一个merge commit。而且这里面的message里面的branch日后也不存了,这些分支都会被清除掉。

git pull –rebase 会使commit看起来很自然。

6

因为代码都有一个前后依赖,只是这个依赖在开发的时候谁先谁后的问题。

### 比较 `git pull --rebase` 和 `git pull` #### 工作原理 当执行 `git pull` 时,Git 默认会先获取远程仓库的变化并尝试通过一次合并提交来集成这些变化到本地分支。这会在历史记录中创建一个新的合并提交节点[^1]。 而使用 `git pull --rebase` 则不同,它实际上做了两步操作:首先是像普通的 `git pull` 那样从远程抓取最新的改动(`git fetch`);但是之后不是做合并而是重播(replay)本地未推送的提交于最新版本之上(`git rebase`),从而保持线性的项目历史记录[^3]。 ```bash # 执行标准pull命令 git pull origin main # 使用rebase方式pull git pull --rebase origin main ``` #### 提交历史的影响 采用常规 `git pull` 方式可能会引入额外的合并提交,使得提交日志变得复杂难以阅读。相比之下,`git pull --rebase` 可以使提交历史更加整洁有序,因为所有的变更都像是按顺序发生的一样[^2]。 #### 处理冲突的方式 两者在面对冲突时都需要开发者手动解决。不过,在完成冲突解决方案后,对于基于合并的工作流 (`git pull`) 来说只需要简单的添加已解决问题文件再提交即可;而对于基于变基的工作流 (`git pull --rebase`) ,还需要运行 `git rebase --continue` 继续剩余的操作直到整个过程结束[^4]。 #### 推荐使用的场景 - **推荐使用 `git pull`:** - 当团队成员希望保留完整的开发流程记录,包括每次同步时产生的合并点。 - **推荐使用 `git pull --rebase`:** - 对于那些追求简洁明了的历史记录以及更易于理解和追踪的提交链路的情况特别有用。 - 如果你所在的团队遵循严格的线性历史策略,则应优先考虑此选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值