• git diff 以及解决代码冲突


    git diff 格式解读-》http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html

    我是使用一台电脑测试, 然后在本地电脑创建了两个工作目录。专门用来模拟两个人提交代码。假设a、b两个人。只使用一个master分支做测试, 没有建立其他的分支。 主要就是为了研究冲突的解决方式。感觉git pull总是强制覆盖。 

    1. 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..0000000 
    --- a/readme.txt //修改前文件
    +++ b/readme.txt //修改后文件
    @@@ -1,5 -1,5 +1,9 @@@  //正常情况下,修改的代码前后都各显示出三行用来作为上下文,除非不够三行.(@@@表示的就是上下文) -1,5 `-`表示修改前的 `+`表示修改后的  `-1,5` 表示修改前从第一行开始 连续的5行 `+1,9`表示修改后的第一行连续的9行
    <?php
    - 
    +echo 111;
    echo 222;
    ++<<<<<<< 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 1 and 1 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。

    1.  新的问题: a修改文件提交远程,此时b也修改了文件,解决冲突后也提交到远程, 这个时候 a 拉取远程代码,就会直接覆盖。不会提示你需要解决冲突啊什么的。(我的理解,这已经是一个新的版本了,如果本地的已经提交过,那线上的版本变动,本地拉取的时候也不会有冲突。)
    2. 测试二: a修改了文件,并且提交到远程,b也修改文件,并且已经commit。此时冲突的解决:和先pull再commit,感觉一样。都是解决冲突,然后add、commit。
    3. 测试:如果我只删除掉<<<<head ==== >>>>dfsegd3243(冲突的我不删除会怎么样?)不管你怎么修改的,反正只要你修改了冲突(哪怕只是删除了上面的提示,别的没动),然后add 、 commit,git就会认为你解决了冲突。git不管你怎么改的。
    4. 如果a修改了第5行,提交,而b修改了第7行,此时如果b直接提交 ,会不会有冲突?如果b拉取代码,会不会直接覆盖?(感觉会直接覆盖掉b的文件里之前第5行内容,那第7行的会不会受到影响,会不会也被覆盖?)
      会abort, 提示b 需要先commit 或者 stash。会显示有冲突,但是b commit之后,弹出一个提示框(里面只有注释,没有冲突内容,我想应该是因为本地分支修改的地方和远程分支修改的不是同一行,远程修改的那一行会直接覆盖本地的同一行)
    5.  又想到一个问题: 本地拉取线上一个分支,然后修改了一直没提交,而线上经历了好几个版本了。这个会有冲突(对的吧)本地拉取线上分支,修改之后提交了,线上更新了好几个版本,本地在拉取,就会直接拉取没冲突。 
    6. git diff 是查看工作区和暂存区的快照相比较有哪些修改的地方。(因为commit提交的是add的内容如果说你修改了,但是没有add到暂存区,commit是不会提交的,所以和暂存区比较是有意义的)
    7. git diff --cached 和 git diff --staged 查看暂存区和本地版本库之间的差异。就是这一次修改后add到暂存区,和上一次提交的进行比较。
    8. git diff head 工作区和本地版本库进行比较。
    9. git diff test.c 用来查看工作区和暂存区中test.c文件的区别。
    10. 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的改动,怎么办?

  • 相关阅读:
    关于Python3.7和Python3.6中元组类型数据内存存储问题
    PHP中的语法特点小结
    PHP中的魔术常量
    Python02期(北京)课程笔记索引
    初识python
    Django项目功能执行逻辑流程图之用户页面信息展示和添加
    Django中的Model模型
    浅谈web开发以及django的安装和入门
    对前面知识的重新理解
    8月26号
  • 原文地址:https://www.cnblogs.com/bneglect/p/11385975.html
Copyright © 2020-2023  润新知