首页 > 其他分享 >git合并代码方法

git合并代码方法

时间:2024-07-08 19:52:00浏览次数:7  
标签:git 项目 代码 合并 merge rebase 分支

你合并代码用 merge 还是用 rebase ?

macrozheng 2024年07月08日 14:10 江苏 1人听过  

以下文章来源于古时的风筝 ,作者风筝

古时的风筝.

写代码是一种爱好,写文章是一种情怀。

图片

mall学习教程官网:macrozheng.com

你们平时合并代码的时候用 merge 还是 rebase?

我问了一圈,发现有些人不仅没用过 rebase,而且根本就没听说过。别慌,不要紧,没有 rebase 也不影响开发,不影响合并,不影响发版!

我用 Git 很长时间也一直根本没听过 rebase 为何物,只知道合并分支就是 merge ,直到有一个新入职的同事跟我说:“为什么合并分支不用 rebase 呢?我之前公司都用 rebase,不怎么用merge。"

在那之后,我还头一次听说 rebase 这个命令。

只有在涉及到分支合并的时候才谈到 merge 和 rebase,如果没有合并的需求,那怎么整都无所谓,就像我自己的小产品,从头到尾都只有个 main 分支,开发人只有我自己,也没有冲突一说,有时候写好几天都不带push一次的。

用到分支合并基本都是多人协作的团队项目,通常会有一个主分支,然后有开发分支,有时候还会有一些临时的 feature 分支。

merge 合并分支

同一个分支也可能出现 merge 的情况,例如我这边有一个老项目平时基本上没其他人动,所以我在修改这个项目的时候基本上想不起来要先pull 一下,当然了,这是一个非常不好的习惯,所以有时候一push代码,发现有人竟然提交新代码上去了,所以这种情况下就自动 merge 一下。

今天主要讨论的是分支合并时的 merge。

下图是 merge 合并分支时前后版本变化的情况。

图片

merge 会创建一个新的合并提交,将两个分支的历史记录保留在一起。

它的特点就是日志保存完整,不管你之前合并进来的那个版本有多少个提交历史,都会被完整的合并到目标分支。

以下是使用 merge 合并后的主分支 Graph 情况,看上去是不是有点乱。

图片

这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + JDK 17 + Vue 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!

  • Boot项目:https://github.com/macrozheng/mall
  • Cloud项目:https://github.com/macrozheng/mall-swarm
  • 视频教程:https://www.macrozheng.com/video/

项目演示:图片

假设有两个分支,main 和 dev分支,在 dev 分支上开发,然后合并到 main 分支,合并的大致流程如下。

git checkout main
git pull origin main
git merge dev
# 解决冲突后
git commit -m "Merge dev into main"
git push origin main

Rebase 合并分支

rebase 会将分支上的更改重新应用在目标分支上,重写提交历史。

图片image.png

rebase 方式提交的版本历史是线性的,不会创建新的合并提交,历史记录非常干净。

同样地,假设当前有两个分支,main 和 dev,用 rebase 方式合并分支的大致流程如下。

git checkout dev
git pull origin dev
git rebase main
# 解决冲突后
git rebase --continue
git push origin dev --force

合并压缩

在rebase 的时候还可以使用 squash 参数来压缩提交记录,例如下图,Feature 1 分支的 A、B、C 三个提交记录,使用 rebase squash 后会在主分支变为一个提交记录 F。

图片

使用方式如下,git rebase -i HEAD~3 命令准备压缩最近的3次提交,然后在编辑模式下将pick 改为 squash,最后推送到远端仓库。

适合那种

git checkout dev
git rebase -i HEAD~3
# 进入编辑模式后,修改 `pick` 为 `squash`
# 保存并关闭编辑器后,编辑新的提交信息并保存
git push origin dev --force

选择使用哪种方法

具体使用哪种方式合并要根据场景和习惯而定,没有绝对的好坏。

使用 merge,如果你希望保留分支的历史记录,并且不介意有合并提交。适用于团队合作时保留每个人的工作记录。

使用 rebase,如果你希望保持提交历史的简洁和线性,适用于希望干净历史的项目。

有些公司规定只能用 rebase,它更适合那种只有单一版本的项目,只有一个主分支一直向前推进,且没有多个分支并行的情况,例如一个产品既要维护2.x 版本又要维护3.x版本,那用 rebase就不合适了。

之前 Vue 项目就是用 rebase 方式合并分支的。

图片

Github上标星60K的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验,同时提高自己独立开发一个项目的能力,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。

图片

整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,你也可以点击链接 mall视频教程 了解更多内容。

推荐阅读

macrozheng 专注Java技术分享,解析优质开源项目。涵盖SpringBoot、SpringCloud、Docker、K8S等实用技术,作者Github开源项目mall(50K+Star)。 297篇原创内容 公众号

图片

阅读 9056 ​ 喜欢此内容的人还喜欢   同事接了个私活项目,报价 10W !拿到需求后傻眼了...     我关注的号 macrozheng   不看的原因   Rudis 0.0.1 发布,一个高性能内存数据库     Pear Stack   不看的原因   Golang:strings模块常用的字符串操作函数     我看过的号 Coding Big Tree   不看的原因 留言 3 写留言
  •   阿白   5小时前 回复   2 我就习惯这么干、定期用rebase整理后结合no-ff再合并,历史记录舒服多了    
  •   琳琅水月   浙江2小时前 回复   用git五年了,从来不用命令的我路过此地。。    
  •   宇   辽宁5小时前 回复   习惯用git小乌龟了,都是先fetch再rebase    
已无更多数据     macrozheng            

人划线

 

标签:git,项目,代码,合并,merge,rebase,分支
From: https://www.cnblogs.com/cheyunhua/p/18290619

相关文章

  • Studying-代码随想录训练营day31| 56.合并区间、738.单调递增的数字、968.监控二叉树
    第31天,贪心最后一节(ง•_•)ง......
  • vbc.exe 是 Microsoft Visual Basic 编译器的命令行工具。它用于编译 Visual Basic (.
    vbc.exe是MicrosoftVisualBasic编译器的命令行工具。它用于编译VisualBasic(.NET)的源代码文件(.vb文件)到可执行文件或者库文件(例如.exe或.dll)。vbc.exe提供了一种方式来将VisualBasic源代码编译成在.NETFramework或.NETCore平台上可执行的程序。......
  • csc.exe 是 Microsoft Visual C# 编译器的命令行工具。它用于编译 C# 源代码文件 (.cs
    csc.exe是MicrosoftVisualC#编译器的命令行工具。它用于编译C#源代码文件(.cs文件)到可执行文件或者库文件(例如.exe或.dll)。具体来说,csc.exe是用来将C#源代码编译成.NETFramework或.NETCore平台上的可执行文件或者库的工具。以下是一些常见用途和特点:......
  • 常用的一些git命令与讲解,看看你还有哪些不知道
    Git是一个分布式的版本控制系统,用作Linux内核代码的管理,Git同样可以作为部署工具所使用。GitHub的独特在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建......
  • 代码随想录算法训练营第五天|LeetCode242.有效的字母异位词 LeetCode 349. 两个数组的
    代码随想录算法训练营Day5代码随想录|LeetCode242.有效的字母异位词LeetCode349.两个数组的交集LeetCode202.快乐数LeetCode1.两数之和文章目录代码随想录算法训练营前言代码随想录原文--哈希表今天的内容真的很有挑战o(╥﹏╥)o,做了很久一、哈希表基础理论1......
  • 代码随想录算法训联营第四天|LeetCode24. 两两交换链表中的节点 LeetCode19.删除链表
    系列文章目录代码随想录算法训练营第四天:代码随想录|LeetCode24.两两交换链表中的节点LeetCode19.删除链表的倒数第N个节点面试题02.07.链表相交LeetC142.环形链表文章目录系列文章目录前言一、LeetCode24.两两交换链表中的节点1、题目链接2、题解二、LeetCod......
  • c++我的世界代码(亲测有效)
    #include<iostream>#include<conio.h>#include<string>#include<map>#include<cmath>#include<windows.h>#include<time.h>#defineKEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)void......
  • 使用gitea搭建源码管理【0到1架构系列】
    使用开源搭建Git源码方案,gitlab和gitea是两个不错的方案,gitlab以前简单易用,现在功能复杂且对开源并不友好,gitea一直保持功能单一易用且完全开源,个人推荐gitea。通过容器安装比较简单易用,使用镜像加速器拉取或许更快些。dockerpullbitnami/giteagitea需要数据库储存,可以选择my......
  • linux下更改进程为daemon的示例代码
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档linux下更改进程为daemon的示例代码前言使用chatgpt生成了一个更改进程为daemon的代码,无参函数,调用后直接更改进程为daemonchatgpt:通义千问,文心一言提示:以下是本篇文章正文内容,下面案例可供参考一、da......
  • 免费零代码平台有哪些?看看敲敲云
    敲敲云简介敲敲云是一个APaaS零代码平台,帮助企业快速搭建个性化业务应用。用户不需要编码就能够搭建出用户体验上佳的销售、运营、人事、采购、进销存、CRM、ERP、OA等核心业务应用,打通企业内部数据,也能够通过API和Webhook和其他系统对接。平台内的自动化工作流还可以实......