关于解决git冲突
2016-07-17 17:35
239 查看
很久很久之前就想自己写博客,现在开始应该不晚,种一棵树的最佳时间是十年前,其次是现在。
最近在公司因为老是遇到git冲突的问题,自己总结了一篇关于git冲突的wiki,现在搬运过来,希望能帮助一些朋友。
场景:假设现在基于远程分支“origin”,创建了一个叫“mywork”的分支,远程分支上已经有了两个提交。现在我们在mywork分支上做了两次修改并且提交。此时有两次提交。同时origin分支上也做了一些修改,并且做了提交,这里假定为两次。此时示意图如下:
现在的话两个分支就叉开了,如果在两个分支上修改了同一地方的代码的话,此合并代码会发生冲突,而解决冲突的方式有两种,下面对两种方式进行分析与对比。
方式一:使用git merge
git merge 会把两个分支的代码进行合并,使结果看起来像一次新的合并提交。
相关操作如下:
git merge master
手动修改冲突的部分
git add 修改的类的路径
git commit -am "fix conflict" 写上注释
git merge master 最后检查下是否merge成功
方式二:使用git rebase
git rebase会把“mywork”分支里的每一个提交取消掉,并且把它们临时保存为布丁,然后把“mywork”分支更新为最新的“origin”分支,最后把保存的这些布丁应用到“mywork”分支上。
相关操作如下:
git checkout mywork
git rebase origin
手动修改冲突部分
git add 修改的类的路径
git rebase --continue (此时git会继续应用余下的补丁)
当然任何时候都可以使用git rebase --abort来终止rebase行动,此时会回退到rebase开始前的状态。
两种方式的区别:
两种方式的区别主要体现在commit的顺序上。
假设C3提交于8:00AM,C5提交于9:00AM,C4提交于10:00AM,C6提交于11:00AM,
对于使用git merge来合并所看到的commit的顺序(从最近到之前)是:C7 ,C6,C4,C5,C3,C2,C1
对于使用git rebase来合并所看到的commit的顺序(从最近到之前)是:C7 ,C6',C5',C4,C3,C2,C1
因为C5'、C6'提交只是C5、C6提交的克隆,所以使用git rebase来合并后所看到的commit的顺序(从最近到之前)是:C7
,C6,C5,C4,C3,C2,C1
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- 6 个托管 git 仓库的地方
- 如何解决双网卡冲突
- 两个打印机服务spoolsv.exe存在冲突的解决方法
- setAttribute 与 class冲突解决
- 实例讲解避免javascript冲突的方法
- jQuery与其它库冲突的解决方法
- jQuery prototype冲突的2种解决方法(附demo示例下载)
- 解决jquery版本冲突的有效方法
- 快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
- 快速解决jQuery与其他库冲突的方法介绍
- jquery单击事件和双击事件冲突解决方案
- 加载jQuery后$冲突的解决办法
- 关于svn冲突的解决方法
- Git远程操作详解