git rebase和merge区别

这篇具有很好参考价值的文章主要介绍了git rebase和merge区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

merge和rebase
标题上的两个命令:merge和rebase都是用来合并分支的。

这里不解释rebase命令,以及两个命令的原理,详细解释参考这里。

下面的内容主要说的是两者在实际操作中的区别。

1.1 什么是分支

分支就是便于多人在同一项目中的协作开发。比方说:每个人开发不同的功能,在各自的分支开发过程中互不影响,完成后都提交到develop分支。极大的提高了开发的效率。

1.2 合并分支

每个人创建一个分支进行开发,当开发完成,需要合并到develop分支的时候,就需要用到合并的命令。

1.3 什么是冲突

合并的时候,有可能会产生冲突。

冲突的产生是因为在合并的时候,不同分支修改了相同的位置。所以在合并的时候git不知道哪个到底是你想保留的,所以就提出疑问(冲突提醒)让你自己手动选择想要保留的内容,从而解决冲突。

标题二、merge和rebase的区别

2.1 区别

采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit,rebase会保留所有的commit:
在这里插入图片描述
git rebase和merge区别,git,git,rebase,merge

rebase会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
git rebase和merge区别,git,git,rebase,merge
merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交

git rebase和merge区别,git,git,rebase,merge
处理冲突的方式:

(一股脑)使用merge命令合并分支,解决完冲突,执行git add .和git commit -m’fix conflict’。这个时候会产生一个commit。
(交互式)使用rebase命令合并分支,解决完冲突,执行git add .和git rebase --continue,不会产生额外的commit。这样的好处是,‘干净’,分支上不会有无意义的解决分支的commit;坏处,如果合并的分支中存在多个commit,需要重复处理多次冲突。
git pull和git pull --rebase区别:git pull做了两个操作分别是‘获取’和合并。所以加了rebase就是以rebase的方式进行合并分支得到一条干净的分支流

 git pull = git fetch + git merge FETCH_HEAD 
 git pull --rebase =  git fetch + git rebase FETCH_HEAD  
git rebase --continue; 让 rebase 过程继续执行。
git rebase --abort; 发生代码冲突后,放弃合并,回到操作前的样子。

2.2 git merge 和 git merge --no-ff的区别

1、我自己尝试merge命令后,发现:merge 时并没有产生一个commit。不是说merge时会产生一个merge commit吗?

注意:只有在冲突的时候,解决完冲突才会自动产生一个commit。

如果想在没有冲突的情况下也自动生成一个commit,记录此次合并就可以用:git merge --no-ff命令,下面用一张图来表示两者的区别:

git rebase和merge区别,git,git,rebase,merge
2、如果不加 --no-ff 则被合并的分支之前的commit都会被抹去,只会保留一个解决冲突后的 merge commit。

标题三、如何选择合并分支的方式

我的理解:主要是看哪个命令用的熟练,能够有效的管理自己的代码;还有就是团队用的是哪种方式。

我对于rebase比较熟悉,所以我一般都用rebase,但是现在的公司用的是merge --no-ff命令合并分支。所以,我在工作上就用merge,个人项目就用rebase。

也可以两者结合:

获取远程项目中最新代码时:git pull --rebase,这个时隐性的合并远程分支的代码不会产生而外的commit(但是如果存在冲突的commit太多就像上面说的,需要处理很多遍冲突)。

合并到分支的时候:git merge --no-ff,自动一个merge commit,便于管理(这看管理人员怎么认为了)

注意:
不要在公共分支使用rebase
本地和远端对应同一条分支,优先使用rebase,而不是merge
抛出问题:

为什么不要再公共分支使用rebase?
因为往后放的这些 commit 都是新的,这样其他从这个公共分支拉出去的人,都需要再 rebase,相当于你 rebase 东西进来,就都是新的 commit 了

1-2-3 是现在的分支状态
这个时候从原来的master ,checkout出来一个prod分支
然后master提交了4.5,prod提交了6.7
这个时候master分支状态就是1-2-3-4-5,prod状态变成1-2-3-6-7
如果在prod上用rebase master ,prod分支状态就成了1-2-3-4-5-6-7
如果是merge
1-2-3-6-7-8
… |4-5|
会出来一个8,这个8的提交就是把4-5合进来的提交
merge和rebase实际上只是用的场景不一样
更通俗的解释一波.
比如rebase,你自己开发分支一直在做,然后某一天,你想把主线的修改合到你的分支上,做一次集成,这种情况就用rebase比较好.把你的提交都放在主线修改的头上
如果用merge,脑袋上顶着一笔merge的8,你如果想回退你分支上的某个提交就很麻烦,还有一个重要的问题,rebase的话,本来我的分支是从3拉出来的,rebase完了之后,就不知道我当时是从哪儿拉出来的我的开发分支
同样的,如果你在主分支上用rebase, rebase其他分支的修改,是不是要是别人想看主分支上有什么历史,他看到的就不是完整的历史课,这个历史已经被你篡改了

常用指令

git rebase -i dev 可以将dev分支合并到当前分支

这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等。

git rebase --abort 放弃一次合并

合并多次commit操作:文章来源地址https://www.toymoban.com/news/detail-686651.html

1 git rebase -i dev
2 修改最后几次commit记录中的pick 为squash
3 保存退出,弹出修改文件,修改commit记录再次保存退出(删除多余的change-id 只保留一个)
4 git add .
5 git rebase --continue
6 git push origin 开发分支

到了这里,关于git rebase和merge区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • merge和rebase的区别-Git实操

    实操git管理工具,主要演示如何实现新建分支,提交分支,合并分支到主干,删除分支,管理分支功能。并且详细了解部分功能的区别。git安装与基础使用 顾名思义,在git中,分支指的是从主线上分离出来进行另外的操作,既不影响主线,主线又可以继续干它的事,它可用来

    2023年04月26日
    浏览(27)
  • Git分支的合并策略有哪些?Merge和Rebase有什么区别?关于Merge和Rebase的使用建议

    参考:《Git 权威指南》、《Git团队协作》、快手git管理 (1)工作区域 首先来介绍介绍下Git的工作区域,分为 工作区 、 暂存区 和 仓库区 ,每个区域的转换关系如上图所示。 工作区(workspace) :就是我们平时本地存放项目代码的地方; 暂存区(index/stage) :用于临时存放

    2024年02月04日
    浏览(48)
  • Idea使用git拉取代码 : (git merge、git rebase)区别

    我们使用pull拉取远程仓库的代码时,通常有两个选项,一个是 merge ,一个是 rebase ,这两个之间有什么区别呢? 这两个选项都是将远程仓库的代码合并到本地仓库的代码,但是在使用上是不同的。 1、使用merge合并远程仓库的代码是按照代码的提交时间进行展示的,也就是说使用m

    2024年02月16日
    浏览(37)
  • git rebase与git merge图文详解(一文看懂区别)

    大家在工作中团队开发的时候对于拉取分支和合并代码时就会涉及到两种选择,git rebase与git merge: rebase:变基,会有一个干净的分支,但是对于记录来源不够清晰 merge:合并,git分支看起来比较混乱,但是清楚各个记录的来源与时间节点 推荐:全部使用merge 拉公共分支使用

    2024年01月18日
    浏览(39)
  • git合并代码命令 分支合并代码 cherry-pick merge rebase区别

    1.cherry-pick 需要注意 暂存未提交的更改 暂存更改: 使用git stash或git stash push命令暂存当前工作目录和暂存区的更改。你可以提供一个消息作为参数,以便更容易地识别stash项: 执行cherry-pick: 现在,你的工作目录是干净的,可以安全地执行cherry-pick操作了。找到你想要cherry

    2024年04月12日
    浏览(36)
  • Merge和Rebase的区别

    Merge 和 Rebase 是 Git 中常用的两种分支整合方式,它们具有不同的工作原理和效果: Merge(合并) 合并是将两个或多个分支的提交历史合并为一个新的提交。在合并时,Git 会创建一个新的合并提交,将两个分支的修改合并在一起。合并提交将包含两个分支的修改,并且保留了

    2024年02月14日
    浏览(25)
  • git merge与git rebase详解

    参考:         http://t.csdn.cn/CkVrR         https://blog.csdn.net/weixin_42310154/article/details/119004977 (1)merge  (2)rebase 经验:         一般来说,不推荐使用rebase。         但为了让分支树看起来更简化,个人分枝偶尔也会选用rebase。这样可以线性的看到每一次提交,

    2024年02月16日
    浏览(27)
  • git fetch, git pull, git merge, git rebase

    背景: 我们发现很多同学习惯性用git pull拉取远端仓库代码, 但是这会带来一个问题,如果有了本地commit再git pull的话,会产生一个merge commit, 这样的merge commit会导致git log分支节点很多,很乱。 首先聊一聊git pull,git merge,git rebase这些常听到的命令吧,初入git的同学一定还

    2024年02月03日
    浏览(39)
  • 【git merge/rebase】详解合并代码、解决冲突

    目录 1.概述 2.merge 3.rebase 4.merge和rabase的区别 5.解决冲突 在实际开发中,一个项目往往是多个人一起协作的,头天下班前大家把代码交到远端仓库,第二天工作的第一件事情都是从服务器上拉最新的代码,保证代码版本的一致性。在这种团队协作中大家修改到同一份文件是难

    2024年02月08日
    浏览(35)
  • IDEA git 操作中的Merge和Rebase

    \\\"Merge incoming changes into the current branch\\\"和\\\"Rebase the current branch on top of incoming changes\\\"都是在Git中常用的合并分支的方式。 它们的主要区别在于合并后的分支历史记录和代码改动的顺序不同。 \\\"Merge incoming changes into the current branch\\\"会将远程分支的改动合并到当前分支的新提交中。这

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包