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': ...
随机推荐
- SpringBoot集成MybatisPlus报错
SpringBoot集成MybatisPlus报错 启动的时候总是报如下错误: java.lang.annotation.AnnotationFormatError: Invalid default: ...
- iproute2使用及网络名称空间
创建一个网络名称空间: 相当于创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables,等等.总之,与网络有关的组件都是独立的. ...
- 关于CPU的一些操作(CPU设置超频)
常见的几种CPU模式: .ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率.以这种模式运行不会因 ...
- 【原创】Linux基础之去掉windows中的\r
linux换行为\n,windows换行为\r\n,windows环境编辑的shell脚本在linux下执行会报错: line 2: $'\r': command not found 查看 # cat ...
- Lab 色彩模型和取值范围
L∈(0,100) a∈(-128,127) b∈(-128,127) opencv 的Lab数据对齐做了量化,使其处于0-255范围 L=L*2.55 a=a+128 b=b+128
- ie8 下的半透明 background:rgba 与opacity失效 兼容办法
fliter: filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
- AL11新建目录、删除目录
AL11可以进入SAP应用服务器中. 项目上需要和外围系统做接口 写文件到文件服务器上,让外围系统过来读取,但是为了减少SAP应用服务器的负担,需要一台独立的文件服务器共享目录到SAP应用服务器, 也 ...
- Java基础——2 操作符
- conda查找安装包的版本以及安装特定版本的包
如下图 想要安装特定版本的torchvision,然后conda search torchvision,能够列出conda云上所有的安装包 然后,安装包的时候,conda install 包名=版本就 ...
- Linux 下幾種網芳/Samba 目錄的 mount 方式
Linux 下幾種網芳/Samba 目錄的 mount 方式,比較新的 Smaba 只能用 cifs 的 mount 方式. [smbmount] smbmount -o username=&qu ...