• mzy git学习,分支冲突,以及冲突解决(五)


    冲突解决:

    先尝试制造冲突:

    首先我:git checkout -b mzy
    创建一个mzy的分支
    然后在其中修改readme.txt文件,随便加上一点东西。
    vim readme.txt   write... wq


    然后:

    git add readme.txt
    git commit -m "mzy分支上修改"


    这时我的master分支还是指向上一个版本的,但是我的mzy分支已经迭代了一个版本了。
    但是现在如果切换回master分支,并且使用git merge mzy,这时因为master和mzy仍然
    只是简单的前后相邻的两个单线性版本,所以直接merge不会有任何问题。

     


    但是我现在要做的是制造冲突!
    所以我先git checkout master,首先切换到了master分支
    我又vim readme.txt,把其中的内容随便修改了一下。
    然后在master分支上:

    git add readme.txt
    git commit -m "在master主分支上修改提交readme.txt"


    现在关系就复杂了,就不是简单的线性关系了,而是有了分叉。

    现在再次,在master主分支上试图合并mzy分支:
    git merge mzy,发现:

    $ git merge mzy
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.


    告诉我们,当前分支和我们要合并的mzy分支有冲突,必须手动合并,自动合并失败了!
    git status,查看当前git的状态

    $ git status
    On branch master
    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")


    发现现在提示,在我们尝试合并master分支和mzy分支的时候,因为其中对相同的readme.txt文件有修改所以不能自动合并
    提示有unmerged paths,让我们手动去解决它。


    然后我们打开 readme.txt,发现其中有:
     

    git 是一个好工具,就是门槛比较高。
    <<<<<<< HEAD
    这是我在master上add,commit的内容
    =======
    这是我在mzy上add,commit的内容
    >>>>>>> mzy

    可以看出git在这种无法自动处理的冲突上,使用了
    <<<<<<<
    =======
    >>>>>>>
    进行标识
    <<<<<<<HEAD:固定的表示当前HEAD指向的,不一定是master。
    =======:用于冲突之间分隔
    >>>>>>>:被合并分支名称
    内容一定是当前分支在HEAD下,被合并分支在后面。


    手动修改这些文件,去掉其中的分隔符号,并且把内容修改成你想要的样子,
    再次 git add readme.txt,git commit -m "合并分支mzy,并且解决了冲突"

    但是要注意,只有当前分支会产生修改,被合并的分支是不会发生改变的!

    现在提示:[master 3b15b8e] conflict fixed 合并成功!


    我们可以让日志显示格式改一改,看到其中的合并步骤:
    git log --graph --pretty=oneline --abbrev-commit
    <
    或者直接使用简单的:git log --graph[这样会显示很长]
    或者:git log --graph --pretty=oneline
    [这样会把全部显示commitId,没有reflog那种简洁]
    最好的还是:
    git log    --graph      --pretty=oneline   --abbrev-commit
    查看日志  分支合并图    一行显示       缩减commitId的长度

    >
     

    $ git log --graph --pretty=oneline --abbrev-commit
    *   3b15b8e (HEAD -> master) conflict fixed
    |
    | * dbee345 (mzy) AND simple
    * | b1d6af5 在主分支上进行提交
    |/
    * fd4ceae 修改了readme.txt文件
    * c5687b8 删除test.txt[C
    * b71048d 提交test.txt
    * 88726c9 提交了readme.txt中的修改
    * e4deff9 git change readme.txt add tracks change of files
    * 9a3670d add LICENSE to res
    * c3e7dc7 加上了GPL
    * c17e52f 加上了一些新玩意儿distributed
    * 9f6ffb9 第一次提交readme.txt

    finish, 冲突解决!

    问:


    是不是如果没有 git merge mzy,那么status就不会显示冲突?

    是的,如果你的分支都在各自工作,没有merge,就算相同的文件中都各自有修改,git status都是不会提醒的,
    只有你合并的时候,才会出现冲突,各个分支其实是互不干扰的!


    如果,是修改的两个不同的文件还会有冲突吗?但是应该还是有分支的吧?不是线性的?
     

    不会有冲突,是的,还是发散出了分支的,但是不会冲突了,因为修改的是不同的文件!
    当我们在master上进行merge分支的时候:
    $ git merge mzy
    Already up to date.(已经是最新的了。)
    直接就提示成功了!

  • 相关阅读:
    [Go] 实现websocket服务端
    [PHP] php使用event扩展的io复用测试
    [MySQL] 使用force index强制使用索引
    [Go] 使用net包作为tcp客户端读取http
    [Go] golang中的包管理
    [Go] 解决golang.org模块无法下载的问题
    [日常] linux设置环境变量
    [Go] golang定时器与redis结合
    [Go] golang定时器的使用
    [Linux] linux路由表
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053349.html
Copyright © 2020-2023  润新知