Git merge的用法

    git merge Dev // Dev表示某分支,表示在当前分支合并Dev分支

    git merge -m  “Merge from Dev”  Dev //-m可以加上merge时要添加的描述性语句,如果出现冲突,那么先解决冲突,再将文件git add,git commit,之后再merge

   Git rebase的用法:

   与merge的形式一样,git rebase dev,作用也一样是在当前分支合并Dev分支,如果git rebase遇到冲突,第一步当然是解决冲突,然后 git add,之后并不需要git commit,

     而是直接运行git rebase --continue,这样git 就会继续应用剩下的补丁了,//假如你不想解决冲突且不再进行合并,那么可以使用git rebase --abort

  git merge 与 git rebase的区别:

    举例两个分支Dev和master刚开始处于同一起点,之后各自前进,Dev是只有自己修改,但是master有其他人的修改,此时如果准备在master分支上将Dev分支合并,

    使用git merge的结果像是一个新的合并的提交,而git rebase看起来则像没有经历过任何合并一样

下面是转载自http://blog.csdn.net/wh_19910525/article/details/7554489   很不错的一篇博客

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

他们的 原理 如下

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b myworkorigin

假设远程分支"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

最新文章

  1. 转载:C#保存文件时重名自动生成新文件的方法
  2. UVA 12232 Exclusive-OR(并查集+思想)
  3. JavaScript原型链和instanceof运算符的暧昧关系
  4. Sublime text插件使用技巧
  5. The Rotation Game (POJ 2286) 题解
  6. Methods throughout the lifespan of a view controller
  7. firefox较慢
  8. Linux HugePages及MySQL 大页配置
  9. Django基本操作命令
  10. c++构造函数谁先执行的问题
  11. 初探Django线程发送邮件
  12. Adb工具的简单使用
  13. edu9E. Thief in a Shop
  14. Web性能和负载测试工具补充
  15. odoo学习之带出信息
  16. php 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
  17. spring aop 之xml
  18. db2 tablespaces table bufferpools reorgs
  19. 三种文本特征提取(TF-IDF/Word2Vec/CountVectorizer)及Spark MLlib调用实例(Scala/Java/python)
  20. [转]Magento2命令行配置之性能测试生成数据

热门文章

  1. 七、面向对象编程(OOP)
  2. Codeforces 781C Underground Lab
  3. C#:MVC打印PDF文件
  4. bzoj 4034: [HAOI2015]树上操作 树链剖分+线段树
  5. java递归 处理权限管理菜单树或分类
  6. Pg MySQL
  7. 使用Hexo搭建一个简单的博客(一)
  8. 学习笔记6—pandas中ix,loc,iloc有什么区别?
  9. ubuntu18+gtx1060 +cuda9+cudnn-v7+opencv3.1.0 配置深度学习环境
  10. vue 定义全局变量在一个组件内引用