git merge 和 git rebase 都是用来合并两个分支的。

git merge b   #把b分支合并到当前分支

git rebase b   #把b分支合并到当前分支

-----------------------------------

他们的 原理 如下

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。
$ git checkout -b mywork origin
假设远程分支"origin"已经有了2个提交,如图
现在我们在这个分支做一些修改,然后生成两个提交(commit).
$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...
但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。
 
在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)
二、解决冲突
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort

三、git rebase和git merge的区别
现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:
当我们使用Git log来参看commit时,其commit的顺序也有所不同。
 

转载于:https://www.cnblogs.com/wukejia/p/8966021.html

git merge 和 git rebase详解相关推荐

  1. 理解Git的设计思想,详解git文件夹,以及详解add、commit、push,fetch、pull、merge指令

    在项目目录执行git init,此目录将纳入git管理,git将会自动生成.git文件夹,用以记录git配置(.git/config)和版本信息(commit-id)和文件集合.下面是.git文件夹的 ...

  2. git(8)---git merge 和 git rebase 小结

    git merge 和 git rebase 小结 git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当 ...

  3. git merge 和 git rebase的区别

    (1)git rebase 让你的提交记录更加清晰可读 git rebase 的使用 rebase 翻译为变基,他的作用和 merge 很相似,用于把一个分支的修改合并到当前分支上. 如下图所示,下图 ...

  4. git merge\git merge --no-commit\git merge --squash区别

    假设现有分支develop.test.需要将test合并到develop分支. 首先git checkout develop. git merge test test分支会合并到develop,会有t ...

  5. git merge和git merge --no-ff有什么区别?

    本文翻译自:What is the difference between `git merge` and `git merge --no-ff`? Using gitk log , I could n ...

  6. Oracle Merge Into 的用法详解实例

    Oracle merge into 的用法详解实例 作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表: 语法: MERGE INTO [your table- ...

  7. 【Git】回退 commit 版本详解

    文章目录 当我们提交的版本出bug后,如果不影响线上的功能,可能先回退到之前的版本,这时候就要用到git reset这个命令,及他各参数的用法:--hard.--mixed.--soft 假设我们还原 ...

  8. GIT常用命令以及使用详解图示

    1配置个人信息,方便提交代码管理 获取Git配置信息,执行以下命令: git config --list 如果你还没有设置名字 user.name 和 user.email的话,可以用以下指令设置: ...

  9. git merge 与 git rebase的区别

    转自:https://blog.csdn.net/liuxiaoheng1992/article/details/79108233 其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有 ...

最新文章

  1. 电容和频率的关系_为什么会有直流电和交流电?频率为什么是50hz?白话科普专业知识...
  2. redis 基本信息查询
  3. 读《编程珠玑》 (三)
  4. java操作字符串的工具类StringUtil
  5. vsftp建立虚拟用户不同目录分配不同权限操作步骤详解
  6. 被3整除的子序列(简单dp)
  7. Java多线程与并发控制
  8. 找准切入点,调试看源码,事半功倍
  9. inputn函数与input函数的区别
  10. 【转】itk、vtk、qt 显示dicom 数据
  11. diss范式:明星AI公司秋招被爆大规模毁约;CEO戴文渊:责任在我有错认罚
  12. echarts可以去掉边距吗_又有近视又有散光怎么办?近视手术可以同时去掉吗?...
  13. POJ 1128 Frame Stacking 拓扑排序+暴搜
  14. mysql----------mysql5.7如何配置主从数据库
  15. 通信原理笔记(樊昌信第七版)
  16. 2022 HTML + CSS面试题,美女吐血整理
  17. table组件抽离封装
  18. mysql workbench pk_MySQL Workbench筑表时PK, NN, UQ, BIN, UN, ZF, AL的意思
  19. python从0到1_从0到1的Python学习经验
  20. 直流电机参数术语中英文对照及解释

热门文章

  1. DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
  2. java 调用mysql存储过程
  3. AWS论剑Azure:安全组之争
  4. 求过去9天的相同时刻的平均值的sql(MYSQL)语句(去掉最大值,最小值)
  5. 深入理解Redis主键失效原理及实现机制
  6. 为什么总线要用一根来表示一bit
  7. 原来神经网络的损失函数也是网络的一部分
  8. selenium 文件下载
  9. jquery获取对象
  10. 与其倒推以前不如推到重建