git merge 和 git rebase 小结

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


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的顺序也有所不同。
假设C3提交于9:00AM,C5提交于10:00AM,C4提交于11:00AM,C6提交于12:00AM,
对于使用git merge来合并所看到的commit的顺序(从新到旧)是:C7 ,C6,C4,C5,C3,C2,C1
对于使用git rebase来合并所看到的commit的顺序(从新到旧)是:C7 ,C6‘,C5',C4,C3,C2,C1
 因为C6'提交只是C6提交的克隆,C5'提交只是C5提交的克隆,
从用户的角度看使用git rebase来合并后所看到的commit的顺序(从新到旧)是:C7 ,C6,C5,C4,C3,C2,C1

git(8)---git merge 和 git rebase 小结相关推荐

  1. git merge 和 git rebase 小结

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

  2. git merge 和 git rebase详解

    git merge 和 git rebase 都是用来合并两个分支的. git merge b   #把b分支合并到当前分支 git rebase b   #把b分支合并到当前分支 --------- ...

  3. git解决冲突 merge 不提示_Merge,Rebase,Cherry-Pick 了解一下

    代码合并在日常开发中是较为常见的场景,采用合适的合并方式,可以起到事半功倍的效果.对应在 Git 中合并的方式主要有三个,Merge,Rebase,Cherry-Pick. 开始部分会首先介绍一下这三 ...

  4. 自动化部署之git merge和git rebase的区别

    命令行测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  5. git merge squash 和 rebase 区别

    在合并分支的时候,默认是有三种选项的,分别是 普通的 merge squash merge rebase merge 普通 Merge 说到合并分支,可能我们最熟悉的操作是这样的: 先切换到目标分支: ...

  6. git merge 和 git rebase的区别

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

  7. Git(11)-cherry-pick、reset、rebase

    更改提交,版本回退 1.get reset 重置HEAD指针的指向 2.git cherry-pick 3.git revert 4.git commit --amend修改提交 5.git reba ...

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

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

  9. git 代码没了,git rebase 合并提交记录,git stash

    xx 问题 git合并提交记录 创建提交记录 合并提交记录 rebase有冲突 合并后的本地路径提交到远程 其中的参数 pick 改变提交 5.txt 和 4.txt 的顺序 删除某一个提交 rewo ...

最新文章

  1. java如何读取word的占位符_java利用xml导出word(占位符替换)
  2. 《WinForm开发系列之控件篇》Item22 HelpProvider(暂无)
  3. 代码审查工具StyleCop
  4. python翻译成matlab_matlab语言转译成python
  5. 答TOGAF企业架构的一些问题
  6. 传统生成API文档弊端
  7. 服务器磁盘扩展卷时遭遇“There is not enough space available on the disk(s) to complete this operation.”错误...
  8. Java基础学习总结(105)——让 Java 开发更简单,提高工作效率!
  9. swf到html5转换器,iPixSoft SWF to HTML5 Converter(SWF到HTML5转换器) V3.6.0 官方版[安全工具]...
  10. ubantu 系统安装apache 和mysql
  11. 删除CentOS系统自带的jdk
  12. protobuffer中string和bytes类型
  13. java+maven工程 实现 自动对war包进行复制并修改和替换每个的配置文件
  14. 【实用技巧】PDF文件去密码和去水印(文件转换网站等推荐)
  15. MSDOS设置代码页
  16. 计算机有什么考研专业,2021考研专业选择:计算机专业考研方向有哪些?
  17. 华为手机 标题栏 Notification 8.0 不显示
  18. omap_i2c omap_i2c.2: controller timed out
  19. 关于在线评论有用性的论文研读笔记---10篇
  20. 传智播客成都java培训中心的发展

热门文章

  1. 内核同步机制-信号量(semaphore)
  2. QT5开发及实例学习之十九图形视图体系结构
  3. 4 谐波_谐波的基础知识
  4. 【LeetCode】剑指 Offer 37. 序列化二叉树
  5. 使用maven-war-plugin 打包时排除不需要的文件
  6. static和const
  7. linux 中断分上下部分的原因
  8. bash:express:command not found
  9. [转] 在 Mac OS X 下编译 Objective-C 运行时
  10. 电子病历基本架构与数据标准