git diff 以及解决代码冲突
git diff 格式解读-》http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
我是使用一台电脑测试, 然后在本地电脑创建了两个工作目录。专门用来模拟两个人提交代码。假设a、b两个人。只使用一个master分支做测试, 没有建立其他的分支。 主要就是为了研究冲突的解决方式。感觉git pull总是强制覆盖。
- a修改了代码并且提交master分支。
1) 测试一: 远程master分支已改变,然后b现在也修改了代码。不过b还没有提交,直接git pull ,不能拉取代码。报错提示:
error: Your local changes to the following files would be overwritten by merge:
readme.txt
Please commit your changes or stash them before you merge.
2) 先测试 b 选择commit的情况:b 修改代码后,commit 提交了代码。然后git pull,此时提示信息:
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
3)现在来使用 git diff查看有哪些冲突:(截图在PHP文档里)
$ git diff
diff --cc readme.txt
index dc06fcb,e552df5..
--- a/readme.txt //修改前文件
+++ b/readme.txt //修改后文件
@@@ -, -, +, @@@ //正常情况下,修改的代码前后都各显示出三行用来作为上下文,除非不够三行.(@@@表示的就是上下文) -1,5 `-`表示修改前的 `+`表示修改后的 `-1,5` 表示修改前从第一行开始 连续的5行 `+1,9`表示修改后的第一行连续的9行
<?php
-
+echo ;
echo ;
++<<<<<<< HEAD //<<<<<<<head 是指你本地的分支的
+echo <D5><E2><CA><C7><D0>??<C4>?<D0>У<BB>
++=======
+ echo <D5><E2><CA><C7><D0>????<FE><D0>У<BB> //git pull 拉下来的内容
++>>>>>>> 3776c60466b1e18c76018940d4a57d68b7d94353
?>
4)git merge :会报错并提示:
error: Merging is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>' //work tree 就是工作目录的那个要合并的文件,
hint: as appropriate to mark resolution and make a commit. //需要你去文件里修改冲突。此时打开b修改的文件
fatal: Exiting because of an unresolved conflict. //就会看到哪里有冲突
Your branch and 'origin/master' have diverged,
and have and different commits each, respectively.
(use "git pull" to merge the remote branch into yours) You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge) Unmerged paths:
(use "git add <file>..." to mark resolution) both modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
对以上翻译:
你的分支和“起源/主人”有分歧, 分别有1个和1个不同的提交。 (使用“git pull”将远程分支合并到您的分支中) 您有未合并
的路径。 (修复冲突并运行“git commit”) (使用“git merge--abort”中止合并) 未合并的路径: (使用“git add<file>…”
标记分辨率) 两者都已修改:readme.txt 没有添加要提交的更改(请使用“git add”和/或“git commit-a”)。
6)git merge --abort 终止合并
7)当解决了冲突之后,直接使用git push 是不行的, 需要git add 然后 git commit的,在git push 就能提交到远程仓库了。建议不要使用git commit -a。
- 新的问题: a修改文件提交远程,此时b也修改了文件,解决冲突后也提交到远程, 这个时候 a 拉取远程代码,就会直接覆盖。不会提示你需要解决冲突啊什么的。(我的理解,这已经是一个新的版本了,如果本地的已经提交过,那线上的版本变动,本地拉取的时候也不会有冲突。)
- 测试二: a修改了文件,并且提交到远程,b也修改文件,并且已经commit。此时冲突的解决:和先pull再commit,感觉一样。都是解决冲突,然后add、commit。
- 测试:如果我只删除掉<<<<head ==== >>>>dfsegd3243(冲突的我不删除会怎么样?)不管你怎么修改的,反正只要你修改了冲突(哪怕只是删除了上面的提示,别的没动),然后add 、 commit,git就会认为你解决了冲突。git不管你怎么改的。
- 如果a修改了第5行,提交,而b修改了第7行,此时如果b直接提交 ,会不会有冲突?如果b拉取代码,会不会直接覆盖?(感觉会直接覆盖掉b的文件里之前第5行内容,那第7行的会不会受到影响,会不会也被覆盖?)
会abort, 提示b 需要先commit 或者 stash。会显示有冲突,但是b commit之后,弹出一个提示框(里面只有注释,没有冲突内容,我想应该是因为本地分支修改的地方和远程分支修改的不是同一行,远程修改的那一行会直接覆盖本地的同一行) - 又想到一个问题: 本地拉取线上一个分支,然后修改了一直没提交,而线上经历了好几个版本了。这个会有冲突(对的吧)本地拉取线上分支,修改之后提交了,线上更新了好几个版本,本地在拉取,就会直接拉取没冲突。
- git diff 是查看工作区和暂存区的快照相比较有哪些修改的地方。(因为commit提交的是add的内容如果说你修改了,但是没有add到暂存区,commit是不会提交的,所以和暂存区比较是有意义的)
- git diff --cached 和 git diff --staged 查看暂存区和本地版本库之间的差异。就是这一次修改后add到暂存区,和上一次提交的进行比较。
- git diff head 工作区和本地版本库进行比较。
- git diff test.c 用来查看工作区和暂存区中test.c文件的区别。
- git diff HEAD -- test.c 用来查看工作区和本地版本库中test.c文件的区别。
https://cloud.tencent.com/developer/ask/77395
12. https://www.cnblogs.com/lsgxeva/p/8540485.html 看最后面的和下一篇文章
13. 如果发生这种情况怎么办? a 修改了1.0版本的第5行, b 向在1.0版本基础上改第7行, 但是a 已经先提交了。b提交之前好像必须得拉取最新的代码吧?!那b不要a的改动,怎么办?
git diff 以及解决代码冲突的更多相关文章
- git解决代码冲突
1.当项目开发是几个人的时候,难免会出现代码冲突,使用git命令行解决冲突的方法如下: git checkout develop git pullgit checkout feature/新建会员功能 ...
- 服务器用 git 进行部署出现代码冲突的处理
服务器用 git 进行部署出现代码冲突的处理 起因: 由于项目是之前很久之前上传的,且并没上线.使用 git pull 进行代码更新时出现很多冲突. 因为服务器上的代码有移动过位置,不知道为什么就冲突 ...
- git上解决代码冲突
1.切换到master: git co master 2.拉最新代码:git pull origin master 3.删掉多余符号 4.切换到提交的分支:git br Txxxx 5.合并:git ...
- git上解决代码冲突(merge版)
1.切换到master: git checkout master 2.拉最新代码:git pull origin master 3.切换到提交的分支:git checkout Txxxx 4.合并:g ...
- git .gitignore 文件 解决二进制文件冲突问题
.gitignore 主要是添加 忽略文件 .最近团队开发经常出现 UserInterfaceState.xcuserstate 冲突,打开发现是二进制文件 ,没法解决冲突. 只好 rm -rf 之 ...
- 版本管理--svn解决代码冲突
高级的svn解决冲突的方法: 选择正在冲突的文件,右键,选择Edit confilicts,这时候出现一个弹框, 看你实际的需要用自己的代码,还是用同事的代码,或者合并起来.最后点击Mark as r ...
- git命令——git status、git diff
前言 当对项目做了更改时,我们通常需要知道具体改了哪些文件,哪些文件更改了没有暂存,哪些文件改了并且已加入到暂存区等待下次commit.上述任务使用git status都可以帮我们解决.但是想要知道文 ...
- Git:代码冲突常见解决方法
摘自: http://blog.csdn.net/iefreer/article/details/7679631 如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候, ...
- git 本地与远程仓库出现代码冲突解决方法
提交过程中报错: [python@heaven-00 Selesystem]$ git push -u origin masterUsername for 'https://github.com': ...
随机推荐
- 跑跑卡丁车(dp)
题意:https://www.nitacm.com/problem_show.php?pid=1470 #define IOS ios_base::sync_with_stdio(0); cin.ti ...
- react 深度 循环嵌套对象渲染问题 map
查了一些资料貌似react的循环渲染对象只有map,但map只支持数组对象. 接到后台数据如下 { "list": { "A": [{ "image& ...
- 牛客 40E 珂朵莉的数论题
大意: 给定$x,y$, 求第$x$小的最小素因子为$y$的数, 若答案>1e9输出0. 若$y>=60$, 可以暴力筛出1e9/60以内的答案. 否则容斥+二分算出答案. #includ ...
- 深入理解计算机系统 第十一章 网络编程 part2 第二遍
客户端和服务器通过因特网这个全球网络来通信.从程序员的观点来看,我们可以把因特网看成是一个全球范围的主机集合,具有以下几个属性: 1.每个因特网主机都有一个唯一的 32 为名字,称为它的 IP 地址 ...
- 怎样在 Vue 的 component 组件中使用 props ?
1. 在注册一个组件时, 添加一个 props 属性, 将需要添加的 props 作为数组的元素进行添加, 比如下面的例子中, 我们添加了一个变量 name , 他就是一个 props, 我们可以通过 ...
- Scala学习十二——高阶函数
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...
- Java 时间不一致
1.new Date() 得到的时间?和系统相差 相差8个小时 2.eclipse控制台打印的时间与系统相差 相差8个小时 3.log4j日志的时间与与系统相差 相差8个小时 上述问题其实是同一个问题 ...
- QByteArray详解
QByteArray在串口通讯中经常被使用,有一定必要较为全面详细的对QByteArray进行阐述.本文通过以下几个部分加以介绍: 1. 初始化 2. 访问与赋值 3. 添加.删除.插入与替换操作 4 ...
- webmagic学习之路-3:采集安居客经纪人详情页
这里希望安居客的同行的轻喷!!单纯的做测试,玩玩. 就这么糟践你们的服务器了!!!sorry! 这次学会了webmagic 设置处理的访问HTML返回代码,因为之前一直404的页面process根本都 ...
- Java高并发程序设计学习笔记(三):Java内存模型和线程安全
转自:https://blog.csdn.net/dataiyangu/article/details/86412704 原子性有序性可见性– 编译器优化– 硬件优化(如写吸收,批操作)Java虚拟机 ...