zoukankan      html  css  js  c++  java
  • git merge和rebase合并分支的区别

    一、描述

    在使用 git 进行版本管理的项目中,在feature分支开发完成,要将其合并到master分支时,我们有两种方式,一种是 git merge 另一种是 git rebase ,通常,我们对git merge 比较熟悉,而对git rebase 使用较少。其实,git rebase 也是极其强大的一种合并方法,下面我们就讨论下merge 和 rebase 的差别已经使用场景。

    如下图,你在feature分支上进行开发,于此同时你在master也有新的提交。

     为了将master分支合并feature到上,有两种选择,merge 和 rebase。

    二、git merge

    最简单的方法是使用以下方法将master合并到feature:

    git checkout feature
    git merge master

    或者执行:

    git merge feature master

    那么在feature上会自动产生一个提交记录(merge commit)

    merge 合并之后的结果:

     merge合并的优点:

    • 自动创建一个新的commit,记录了真实的commit情况,方便查看记录
    • 如果合并遇到冲突,仅需要修改后重新commit即可

    merge的缺点:就是每次合并都会产生一个新的commit, 所以在使用一些git的 GUI工具,特别是commit比较频繁时,就会看到分支线很杂乱。这时如果有问题需要查找就会很困难。

    三、git rebase

    与git merge功能一致,rebase的目的也是将一个分支的更改合并到另一个分支中去。

    rebase 在很多中文翻译中,会翻译为 “变基” 。

    执行以下命令:

    git checkout feature
    git rebase master

     

    如上图所示,rebase的特点:

    • 改变当前分支从master上拉出分支
    • 没有多余的合并历史记录,并且合并后的commit顺序不一定按照commit的提交时间排序
    • 可能会多次解决同一个地方的冲突
    • 提交记录更干净,master上每个commit点都是相对独立完整的功能点

    假如我们在rebase的过程中遇到了冲突,我们在解决冲突之后,需要执行:

    1. git add

    2.  git rebase --continue 来继续变基的操作。

    3. 如果执行第二步无效,那么可以执行 git rebase --skip

    注意:不要执行完 git add 之后执行 git commit

    可以看出,feature 分支上的所有提交信息都会被合并到 master 分支上了,这些信息对我们来说不是必要的,我们在 masetr 分支上往往只需要知道合并进来了什么新的功能即可,这些多余的信息可以通过 git rebase 的交互模式进行整合

    四、git rebase 交互模式

    打开变基的交互模式只需要传入一个参数 -i 即可,同时指定对哪些提交进行处理,例如:

    git rebase -i HEAD~4

    以上命令指定了对当前分支的最近四次提交进行操作,下面可以使用上面的命令对 feature 分支的提交进行合并:

     处理完之后可以使用下面的命令进行提交

    五、总结

    当需要保留详细的合并信息的时候建议使用git merge,特别是需要将分支合并进入master分支时;当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时,可以尝试git rebase。

    参考:

    https://www.atlassian.com/git/tutorials/merging-vs-rebasing

    https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648

  • 相关阅读:
    java
    DevExpress学习1
    D 动态获取服务器访问路径
    D10 Sping Boot 入门 Sping框架--Java Web之文件操作--上传和下载
    D08 Sping Boot 入门 Sping框架--Java Web之JSP
    D07 Sping Boot 入门 Sping框架--Java Web之书城项目(二)实现用户登录功能
    D06 Sping Boot 入门 Sping框架--Java Web之书城项目(二)实现用户注册功能
    D04 Sping Boot 入门 Sping框架--Java Web之JavaEE的三层架构
    D03 Sping Boot 入门 Sping框架--Java Web之HTTP协议
    D02 Sping Boot 入门 Sping框架--Java Web之Servlet
  • 原文地址:https://www.cnblogs.com/shenjp/p/14437454.html
Copyright © 2011-2022 走看看