原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12309531

1.多人协作冲突

如果多人同时修改了同一个文件,那会出现什么样的结果呢?我们试着这么做。

(1)修改jackygit2

在jackygit2中修改jackydata01,提交修改并推送到远程仓库(这里使用本地远程仓库)。正常,没问题。

[cpp] 
view plain
copy

 

  1. #切换到jackygit2本地库,这是远程仓库那节建立的,从本地远程仓库克隆而来
  2. $ cd ../jackygit2
  3. #修改jackygit2/Jackydata01
  4. $ echo "It's modified in jackygit2" > jackydata01
  5. #提交jackygit2的修改
  6. $ git commit -a -m "jackygit2 modify"
  7. [master 15a6406] jackygit2 modify
  8. 1 file changed, 1 insertion(+), 1 deletion(-)
  9. #推送到远程仓库origin
  10. $ git push origin
  11. Counting objects: 5, done.
  12. Delta compression using up to 2 threads.
  13. Compressing objects: 100% (2/2), done.
  14. Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
  15. Total 3 (delta 1), reused 0 (delta 0)
  16. To d:/jackygit2/../remote-jackygit.git
  17. c0449de..15a6406  master -> master

(2)修改jackygit

切换到jackygit仓库,同样修改jackydata01,提交修改并推送到远程仓库。这时候就出错了,提示有人改过这个文件了。推送不成功。

[cpp] 
view plain
copy

 

  1. #切换到jackygit
  2. $ cd ../jackygit
  3. #修改jackygit/Jackydata01
  4. $ echo "It's modified in jackygit" >jackydata01
  5. #提交jackygit的修改
  6. $ git commit -a -m "jackygit modify"
  7. [master 9ab7206] jackygit modify
  8. 1 file changed, 1 insertion(+), 1 deletion(-)
  9. 推送到远程仓库testremote,这个仓库和上面的origin是同一个远程仓库
  10. $ git push testremote
  11. To ../remote-jackygit.git
  12. ! [rejected]        master -> master (fetch first)
  13. error: failed to push some refs to '../remote-jackygit.git'
  14. hint: Updates were rejected because the remote contains work that you do
  15. hint: not have locally. This is usually caused by another repository pushing
  16. hint: to the same ref. You may want to first integrate the remote changes
  17. hint: (e.g., 'git pull ...') before pushing again.
  18. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

(3)抓取远程仓库内容

抓取远程仓库中的文件,这里需要指定分支。

[cpp] 
view plain
copy

 

  1. #抓取远程仓库中的文件,需要指定分支
  2. $ git pull testremote master
  3. From ../remote-jackygit
  4. * branch            master     -> FETCH_HEAD
  5. Auto-merging Jackydata01
  6. CONFLICT (content): Merge conflict in Jackydata01
  7. Automatic merge failed; fix conflicts and then commit the result.

(4)查看冲突文件内容

冲突用<<<<<< ====== >>>>>>隔开冲突代码,上面的是当前修改内容,下面的则是别人修改的内容。

[cpp] 
view plain
copy

 

  1. #输出当前jackydata01内容
  2. $ cat jackydata01
  3. <<<<<<< HEAD
  4. It's modified in jackygit
  5. =======
  6. It's modified in jackygit2
  7. >>>>>>> 15a6406ed7f889bab7e812f9e6bedb6e78431232

(5)解决冲突

修改冲突内容,重新提交,推送。

[cpp] 
view plain
copy

 

  1. #修改Jackydata01产生的冲突
  2. $ echo "there is no conflict now" > jackydata01
  3. #提交修改冲突后文件
  4. $ git commit -a -m "there is no confilct now"
  5. [master ac2846f] there is no confilct now
  6. #推送到远程仓库testremote
  7. $ git push testremote
  8. Counting objects: 10, done.
  9. Delta compression using up to 2 threads.
  10. Compressing objects: 100% (4/4), done.
  11. Writing objects: 100% (6/6), 567 bytes | 0 bytes/s, done.
  12. Total 6 (delta 2), reused 0 (delta 0)
  13. To ../remote-jackygit.git
  14. 15a6406..ac2846f  master -> master

2.分支合并冲突

这种情况和多人协作冲突处理办法是相似的。在这里也模拟一下。

(1)创建分支并修改内容

[cpp] 
view plain
copy

 

  1. #创建并跳转到分支br
  2. $ git checkout -b br
  3. Switched to a new branch 'br'
  4. #修改br分支中的Jackydata01
  5. $ echo "It's modified in br" > jackydata01
  6. #提交br分支中的修改
  7. $ git commit -a -m "br modify"
  8. [br 32c8755] br modify
  9. 1 file changed, 1 insertion(+), 1 deletion(-)

(2)跳转到主分支,同样进行内容修改

[cpp] 
view plain
copy

 

  1. #跳转到master分支
  2. $ git checkout master
  3. Switched to branch 'master'
  4. #修改master分支中的jackydata01
  5. $ echo "It's modified in master" > jackydata01
  6. #提交master分支中的修改
  7. $ git commit -a -m "master modify"
  8. [master ed84e67] master modify
  9. 1 file changed, 1 insertion(+), 1 deletion(-)

(3)合并分支

[cpp] 
view plain
copy

 

  1. #合并br到主分支上
  2. $ git merge br
  3. Auto-merging Jackydata01
  4. CONFLICT (content): Merge conflict in Jackydata01
  5. Automatic merge failed; fix conflicts and then commit the result.

(4)显示冲突文件内容,冲突隔开方式如上所述

[cpp] 
view plain
copy

 

  1. #显示br中Jackydata01内容
  2. $ cat jackydata01
  3. <<<<<<< HEAD
  4. It's modified in master
  5. =======
  6. It's modified in br
  7. >>>>>>> br

(5)解决冲突,重新提交

[cpp] 
view plain
copy

 

  1. 修改Jackydata01产生的冲突
  2. $ echo "It's no conflict now" > jackydata01
  3. #提交修改冲突后文件
  4. $ git commit -a -m "It's no conflict now"
  5. [master eb073a6] It's no conflict now

(6)删除无效分支

[cpp] 
view plain
copy

 

  1. #删除br分支
  2. $ git branch -d br
  3. Deleted branch br (was 32c8755).

[置顶] 【Git入门之九】解决冲突的更多相关文章

  1. Git命令行下解决冲突

    使用Git时,在pull.merge.rebase的过程中,经常会遇到conflict的情况. 遇到conflict时,以上处理过程会终端,并且命令行中显示(xxx|MERGING)的状态(Windo ...

  2. git分支管理之解决冲突

    人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 Switched to a new ...

  3. git合并分支与解决冲突

    前提: 当前开发的分支为feature/20161129_317606_algoplatform_1,由于feature/20161130_322574_tmstools_1分支有新内容,所以准备将f ...

  4. [置顶] Git学习总结(1)——Git使用详细教程

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  5. Git应用之eclipse解决冲突代码

    最近上班公司框架换成了微服务下面是eclipse 对代码进行管理 1.冲突代码 如果两个人在一个项目上同一文件上更改代码就会出现冲突现象 先用NewFile.jsp  文件做演示 打开eclipse从 ...

  6. git cherry-pick 命令,解决冲突后没有 commit 变更,再次pull 时出错

    Git : You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists). 解决方法:(1)使用git status 命令查看当前 ...

  7. [置顶] JUnit入门教程(二)

    一:介绍 接着上次的课程,今天我们学习JUnit4的新特性 assertThat()方法,这种方式和其余的assert方法比起来,更加接进英语. 二:分析API API中的例子: 参数 T Actua ...

  8. [置顶] Git 配置SSH简单玩法?

    > 第一步下载git点击直接下载 他会检测您的系统当前是64bit还是32bit安装过程不再啰嗦反正就是Next Next Next Finish 第二步这里你可以下载TortoiseGit点击 ...

  9. Git入门指南九:远程仓库的使用【转】

    转自:http://blog.csdn.net/wirelessqa/article/details/20152651 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 十三 ...

随机推荐

  1. NYOJ 1107 最高的奖励(贪心+优先队列)

    最高的奖励 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...

  2. python 之路,Day11(上) - python mysql and ORM

    python 之路,Day11 - python mysql and ORM   本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...

  3. jquery获取value值

    $(function(){ alert(1); var a=$("#a004").val(); var a1=$("#b004").val(); //.val就 ...

  4. (转)ThinkPHP自定义标签

    第一:在当前应用下的Conf文件夹中config.php加两个配制项:             'TAGLIB_LOAD' => true,//加载标签库打开             'APP_ ...

  5. 【OpenSSL】创建证书

    [-] 1生成根证书 1 生成RSA私钥 2 生成证书请求 3 签发自签名证书 2 生成用户证书 1 生成RSA私钥 2 生成证书请求 3 签发证书   1)生成根证书 1.1) 生成RSA私钥 op ...

  6. VBoxManage命令详解

    转自:http://zhang-ly520.iteye.com/blog/300606 由于最近工作对vbox有一定涉猎,发现这个写的比较好,先转来,稍有空时再根据自己的心得整理一下. VBoxMan ...

  7. 零散的笔记:jquery中的事件

    1.替代mouseover和mouseout的事件 jquery的mouseover和mouseout事件在移到子页面时也会触发,这在移到一级菜单弹出二级菜单,移到二级菜单时一级菜单也要显示时,这两个 ...

  8. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

  9. table 表格隔行换色实现

    table 表格隔行换色实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  10. WEB编码事项

    标准 WEB开发标准是一系列标准的集合, 包含HTML结构标准.CSS表现标准.JS行为标准.代码标准.标准测试. 目标 WEB开发流程统一标准化,实现页面结构.表现.行为适当分离,提高页面易维护性, ...