首页 > 其他分享 >git rebase & merge

git rebase & merge

时间:2024-11-27 16:55:02浏览次数:6  
标签:git rebase dev 变基 merge master 提交

变基(rebase)与合并(merge)

 

变基(rebase)与合并(merge)

项目背景

一直都很想讲变基与合并,但是平常都是一个人在研发一个项目,最近接到的需求是多人研发,这种情况下,git提交的规范,以及变基的好处就体现出来了
因此就想着聊一聊变基与合并,对日后的项目开发也会有帮助

合并

何为合并?花了一个图,讲了合并的过程
image
如图中,dev为开发分支,dev基于master的c3提交拉出,此时在dev中提交了c4,c5后,研发任务结束,我们便向master发起了一个合并请求。该合并请求通过后,形成了一个合并提交叫做m5,提交记录不出意外,应当统一是 merge pull request 'xxx分支' from xxx分支 into master 合并后代码中的记录同样变成了merge记录,这对于我们寻找问题(锅)的时候是很不方便的,因为git还提供了另外一套流程应对这种问题

变基

变基,即rebase
如图image
在c3的基础,拉了一个dev,在这之后,在dev提交了两个历史记录c4和c5,而其他人往master推送了一个c6。注意此时,dev的c4和c5是未提交的,未提交的存储在你的本地,而c6是别人一提交的
这时候若是使用合并,则会变成如下的提交历史image
对该流程简单解释下:在提交c4和c5之后,我们要合并到master,此时master有了更新,即c6,所以我们应该拉取mastrer代码,对dev进行更新。此时形成了m1,是一个merge提交,更新后确保dev有c6,我们再往master做合并请求,master就拥有了新的merge提交m2。
我们改用变基,看看变基后的dev与master
image
若此时我们使用的是变基,前提是我们为将c4和c5推送远程dev,此时别人的c6会作为我们dev的提交记录中的某一步插入,整个dev与master都是一条线。且c6甚至会根据c4与c6的时间进行判断,比c4早则插入在c4之前,晚则插入c4之后。也就是,将别人的记录插入到你的提交记录中。
变基对于多人合作是很有帮助的,因为它会将别人的提交在合适的位置插入到你的本地,此时你将代码推送远程,这样子就不会形成merge的提交,找问题(锅)也就方便的多

二者区别

变基其实也可以理解成是另一种合并,只不过他的合并会让提交历史更为干净清晰。

何时使用合并,合适使用变基?

总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。
如果是多人合作同个分支,未提交的代码就使用变基吧,已提交的话就使用合并吧
image

如何使用

第一:多人开发统一特性分支是,基于该分支进行变基
步骤如下:
第一步:git fetch,理解成是更新,告诉 Git 去获取它有你没有的数据
第二步:git rebase,理解出一种拉取方式,拉取下远端的当前特性分支,rebase与pull的区别,就是别人的代码你pull的话,提交记录就是你的,但是你rebase的话,提交记录依旧是别人的,这样子方便定位代码问题
第三步:有冲突解决冲突,无冲突进入下一步
第四步:git push -f,强制推送本地代码至远程

第二:当前特性分支是,基于dev分支(其他分支)进行变基
步骤如下:
第一步:git fetch,理解成是更新,告诉 Git 去获取它有你没有的数据
第二步:git rebase origin/dev,变基dev分支
第三步:有冲突解决冲突,无冲突进入下一步
第四步: git push -f,强制推送本地代码至远程

冲突解决过程如下

变基 master 的分支
Git rebase origin/master
如果变基的时候发生了冲突,那么解决冲突。
冲突解决完后
Git add.
Git rebase --continue
git rebase --continue表示继续下一个冲突, git rebase --skip表示跳过当前冲突, git rebase --abort表示退出rebase模式,
最后执行提交的功能
强制提交到远程仓库
Git push -f

标签:git,rebase,dev,变基,merge,master,提交
From: https://www.cnblogs.com/JavaYuYin/p/18572638

相关文章

  • GodoOS 入选 Gitee 最有价值开源项目
     2024年11月1日,GodoOS荣耀地入选了GVP——Gitee最有价值开源项目。在GVP平台收录的418个杰出项目中,GodoOS作为唯一一款用GO语言开发的、维护中的跨平台webOS的桌面应用,历经近三年的精心雕琢,从最初的简单设计,逐步进化到如今的成熟与易用。GodoOS在如此众多优秀项目中,GodoOS脱......
  • 如何构建和发布 npm 包到 GitHub Package Registry?
    如何构建和发布npm包到GitHubPackageRegistry?发表于 2023/12/19  更新于 2023/12/23作者 小王爷4分钟阅读本文将指导您在GitHubPackages上构建和发布npm到GPR。npm:全称NodePackageManager,NodeJs包管理和分发的工具。GPR:全称GitHubPackageRegi......
  • 超超超详细的Git 安装教程来了~
    官网地址:https://git-scm.com/或https://github.com/git-for-windows/git/releases   查看GNU协议,可以直接点击下一步。选择Git安装位置,要求是非中文并且没有空格的目录,然后下一步。Git选项配置,推荐默认设置,然后下一步。Git安装目录名,不用修改,直接......
  • 裸金属 GPU 上线!DigitalOcean 提供单用户独享H100资源
    对于需要直接控制硬件,需要更强性能的AI开发者来讲,DigitalOcean已经为你们准备好了更适合的GPU服务器——DigitalOcean基于NVIDIAGPU的裸金属服务器。这些服务器特别设计用来应对最复杂的AI和机器学习任务,无论是大规模的模型训练还是高度定制的基础设施设置,都能轻......
  • git生成并使用多个密钥
    git中对于不同的git远程服务可以配置使用不同的密钥。密钥生成首先根据不同的git托管服务创建不同的密钥ssh-keygen-trsa-C“user@qq.com”//生成密钥生成密钥过程中会提示输入密钥名称和密码(密码用于使用私钥时进行确认,可不填),如生成公司gitlab密钥以及个人使用的github......
  • LFS导致GitLab: Push operation timed out
    问题pushaosp(单独一个git):$gitpushoriginXXXX:XXXXCountingobjects:1468867,done.Deltacompressionusingupto24threads.Compressingobjects:100%(768892/768892),done.Writingobjects:100%(1468867/1468867),29.98GiB|24.27MiB/s,done.Total14......
  • 撤回最近的 git commit
    在Git中,如果你想撤回最近的gitcommit,可以根据不同的需求选择不同的操作。以下是几种常见的撤回方式:1. 撤回最后一次commit,但保留修改(softreset)如果你想撤销gitcommit,但保留修改的文件(即文件内容不变),可以使用:gitreset--softHEAD~1HEAD~1 指的是上一个commit,--s......
  • Git Permission denied
    问题现象家里电脑gitpull项目时,提示:Permissiondenied,ssh-T测试又是正常的,如下图......
  • GitLab的备份与恢复
    一、备份1.docker执行备份dockerexecgitlabgitlab-rakegitlab:backup:create默认将备份文件保存至docker的/var/opt/gitlab/backups/目录这条命令是在Docker容器内部执行GitLab的备份操作。让我来解释一下这个命令的各个部分:dockerexec:这是Docker命令,用于在正在......
  • Git 常用命令
    以下是一些常用的Git命令,涵盖了常见的操作,包括版本控制、分支管理、远程仓库操作等。1.基本命令gitinit:初始化一个新的Git仓库。用于在当前目录创建一个新的Git仓库。gitinitgitclone<仓库地址>:克隆一个远程Git仓库到本地。将远程仓库的内容复制到本地......