zoukankan      html  css  js  c++  java
  • git rebase 和 git merge 总结

    git merge 和 git rebase 都是用于合并分支,但二者是存在区别的。

    在使用时,记住以下两点:

    1. 当你从 remote 去 pull 的时候,永远使用 rebase(除了一个例外)
    2. 当你完成了一个功能(假定你是单独开本地分支去做的)后打算合并到主干分支的时候,永远使用 merge

    一、merge

       marge 特点:自动创建一个新的commit
      如果合并的时候遇到冲突,仅需要修改后重新commit
      优点:记录了真实的commit情况,包括每个分支的详情
      缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱

    二、rebase

      rebase 特点:会合并之前的commit历史
      优点:得到更简洁的项目历史,去掉了merge commit
      缺点:如果合并出现代码问题不容易定位,因为re-write了history  合并时如果出现冲突需要按照如下步骤解决
      • 修改冲突部分
      • git add
      • git rebase --cotinue
      • (如果第三步无效可以执行 git rebase --skip
      不要在git add 之后习惯性的执行 git commit命令  

      The Golden Rule of Rebasing:never use it on public branches(不要在公共分支上使用)

    三、总结

      • merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容
      • merge 将分支合并,会自动创建一个新的 commit,会引入一个外来的合并提交
      • merge 的提交历史忠实地记录了实际发生过什么,关注点在真实的提交历史上面
      • rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面
      • rebase 是变基操作,能有效的将所有 master 上新的提交并入过来
      • rebase 的提交历史反映了项目过程中发生了什么,关注点在开发过程上面

    四、建议操作方式

    1. 完成功能分支之后先不 merge,而是回到主干分支去 git pull --rebase
    2. 如果主干有更新,rebase 更新的内容到功能分支来预检一下,看看在加入了最近别人的改动之后我的功能是否依然 OK(在这个过程中可能会有冲突处理,别怪我没提醒哦)
    3. 一切就绪之后再次 git fetch 主干看看有没有变动(因为在第二步的进行期间没准又有人 push 了新的变化),有的话重复第二步,没有则——
    4. 合并功能分支到主干然后 push,完成。

     

  • 相关阅读:
    《Orange'S:一个操作系统的实现》与上一版之比较
    IPC
    末日帝国——Agile公司的困境 (2)
    取经学道真经验——你听过这么享受的培训吗
    数据库设计指南(五)数据库小技巧
    软件项目开发典型风险一览
    数据库设计指南(四)保证数据的完整性
    官网的Ext direct包中.NET版的问题
    软件项目开发应写的13类文档
    面试EJB常考题
  • 原文地址:https://www.cnblogs.com/xlb-happymoment/p/7800384.html
Copyright © 2011-2022 走看看