前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新来个技术总监:发现谁再用 Git rebase 提交合并直接开除!

新来个技术总监:发现谁再用 Git rebase 提交合并直接开除!

作者头像
民工哥
发布2023-08-25 11:53:39
2250
发布2023-08-25 11:53:39
举报

无论是开发、运维,还是测试,大家都知道 Git 在日常工作中的地位。

而且众多 Git 命令当中,Git rebase 和 Git merge 都是可以将一个分支的修改合并到当前分支当中去。

但是,如果由于使用不当会造成很多不必要的麻烦,这不,公司新来个技术总监有次就发飚了:谁再乱用 Git rebase 直接开除。。。。。

所以,今天我们一起好好探讨一下这两个命令的作用与区别在哪?到底怎么用合适?

git rebase

git rebase(变基) 命令:复制当前分支的所有最新提交,然后将这些提交添加到指定分支提交记录之上。

git rebase还提供了 6 种操作模式:

  • reword:修改提交信息
  • edit:修改此提交
  • squash:将当前提交合并到之前的提交中
  • fixup:将当前提交合并到之前的提交中,不保留提交日志消息
  • exec:在每一个需要变基的提交上执行一条命令
  • drop:删除提交

下图介绍了经过 rebase 前后提交历史的变化情况。

现在我们来用一个例子来解释一下上面的过程。

假设我们现在有2条分支,一个为 master ,一个为 feature/1,他们都基于初始的一个提交add readme进行检出分支,之后,master分支增加了3.js,和4.js的文件,分别进行了2次提交,feature/1也增加了1.js2.js的文件,分别对应以下2条提交记录。

master 分支如下图:

feature/1分支如下图

结合起来看是这样的

此时,切换到 feature/1 分支下,执行 git rebase master ,成功之后,通过 log 查看记录。

如下图所示:可以看到先是逐个应用了 mater 分支的更改,然后以 master 分支最后的提交作为基点,再逐个应用 feature/1的每个更改。

所以,我们的提交记录就会非常清晰,没有分叉,上面演示的是比较顺利的情况,但是大部分情况下,rebase 的过程中会产生冲突的,此时,就需要手动解决冲突,然后使用git addgit rebase --continue的方式来处理冲突,完成 rebase,如果不想要某次 rebase 的结果,那么需要使用 git rebase --skip来跳过这次 rebase。

git merge

fast-forward模式

no-fast-forward模式

合并冲突修复的过程 ,动画演示如下:

不同于 git rebase的是,git merge 在不是 fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似Merge branch 'xxx' into 'xxx'的一条提交信息。

另外,在解决冲突的时候,用 merge 只需要解决一次冲突即可,简单粗暴,而用 rebase 的时候 ,需要一次又一次的解决冲突。

两者的区别

git rebase 和 git merge 主要差异是什么?最近ChatGPT大火,请它来回答一下:

Git merge 将两个分支中的所有提交都合并到一起,并创建一个新的合并提交,保留了历史记录。这导致了 Git 历史记录中出现多个分支合并点的情况,从而使历史记录更加复杂。

Git rebase 是将一个分支的提交序列“拉直”,并且将其与另一个分支合并。这意味着,提交历史看起来好像是一条直线,没有分叉,因此整个提交历史看起来更加整洁,历史记录保持相对简单。

总的来说,Git rebase 可以提供更整洁的提交历史,但它需要更多的注意力和精细的操作,因为它可能导致原有的提交变得不可用。Git merge 则是更为保守的合并方法,它更简单,但历史记录更加复杂。因此,选择哪种方法取决于团队和项目的需求和偏好。

两者的使用场景

merge 命令一般用于将开发分支、热修复分支等合并到主分支上,因为该命令不会修改分支的历史信息,只会增加新节点,非常适合主分支这种稳定性且需要用于版本控制的分支上。

rebase 命令一般用于将基分支的新提交记录合并到正在进行开发任务或修复任务的分支上,因为该命令能保证开发分支的历史与基分支的历史保持一致,从而减少污染性。

但要注意,rebase 命令最好不要用于一个公共的分支,假设你们公司的开发分支是一个公用的分支,此时多人在这个分支上开发,由于rebase的修改历史的特点,可能会出现丢失修改的问题,对于这种运用,建议团队之间进行沟通后决定使用merge或rebase来保证该公用开发分支的可用和完整。

总结

rebase 和 merge优缺点和用法各个团队不一样,因人而异。业界没有定论。如果没有充分理解 rebase,还是老老实实用 merge 吧。用 merge 肯定在功能上不会出问题的!

引用官方文档一句话:总的原则是,只对尚未推送或分享给别人的本地修改执行rebase(变基)操作清理历史,从不对已推送至别处的提交执行 rebase(变基)操作,这样,你才能享受到两种方式带来的便利。

所以,千万不要乱用。

注:部分内容来自https://blog.csdn.net/qq_24147051/article/ details/118050241

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • git rebase
  • git merge
  • 两者的区别
  • 两者的使用场景
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档