• git分支学习笔记2-解决合并的冲突


    来源:https://www.liuhaolin.com/git/115.html

    git中合并冲突是在不同的分支中同一个文件的内容不同导致的,如果进行合并就会冲突。文件可能是新增的文件,比如在两个分支中都新建了同一个文件,但是他们的内容不同,或是在两个分支中都更新了同一个文件,但是更新的内容不同。最终导致同一文件在不同的分支中内容不同。如果需要进行合并,就必须人工解决冲突,或者撤销合并。

    "创建一个有冲突的合并"

    git解决冲突示例

              git解决冲突示例

    初始化一个仓库,然后创建一个 dev分支,分支里添加一个文件 master-dev.txt,然后提交到 dev分支。切换到 master分支,同样的操作也是提交了同一个文件master-dev.txt,同样提交到master 分支中,但是这两个文件的内容是不同的。如果想把 dev的分支提交到master中,代码就会有冲突。

    创建“冲突”

    echo "测试-代码提交冲突" > README
    git init .
    git add .
    git commit -m 'init'
    # 创建一个 dev 分支,并切换到dev分支
    git checkout -b dev
    
    # 当前的分支 dev
    git branch
    #* dev
    #  master
    echo "dev" >  master-dev.txt
    
    # 在dev分支中提交
    git commit -m '[dev branch ]add file master-dev.txt'
    
    
    git checkout master
    echo "master" >  master-dev.txt
    git add .
    git commit -m '[master branch ]add file master-dev.txt'

    把dev分支的代码合并的master中,看看什么情况。

    # 把 dev分支的代码合并到当前的分支,也就是 master 分支中
    git merge dev
    
    #自动的合并文件 master-dev.txt
    Auto-merging master-dev.txt
    
    # 提示了冲突, 合并冲突在  master-dev.txt
    CONFLICT (add/add): Merge conflict in master-dev.txt
    
    # 自动合并失败, 修改一个冲突,然后提交结果
    Automatic merge failed; fix conflicts and then commit the result.

      出现了冲突,这是时候 master-dev.txt 的内容会被修改,会把两个分支中的文件内容都 汇集 master-dev.txt 文件中。

    cat master-dev.txt
    <<<<<<< HEAD
    master
    =======
    dev
    >>>>>>> dev
    

      需要注意的地方是,产生了冲突,并且当前的文件 master-dev.txt被修改了。这个时候,只能是先解决冲突。再进行下一步操作。比如想看一下 dev分支中的文件 master-dev.txt 的内容是否也被修改了,这个时候看不了,因为要先解决冲突。事实上,出现冲突的时候,是不能切换分支的。这样有个好处就是,就是防止有问题的代码污染了其他的分支。

    git checkout dev
    master-dev.txt: needs merge
    # 必须先解决当前的索引区的冲突
    error: you need to resolve your current index first
    

    解决代码合并中的冲突

      git使用 7个左键箭头 + 当前分支,7个等号和7个右箭头 + 当前分支 来表示冲突的代码,一共是三行。解决冲突就是修改代码后,并删除这三行。比如本次的修改就是删除这三行。

      

    cat master-dev.txt
    master
    dev
    

      修改后看下当前的状态

    git status
    On branch master
    # 存在没有合并成功的部分
    You have unmerged paths.
    # 修正错误,并提提交
      (fix conflicts and run "git commit")
    # 使用  git merge --about 终止合并
      (use "git merge --abort" to abort the merge)
    
    # 没有合并的文件
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
            both added:      master-dev.txt
    

      修改了冲突的文件,冲突并没有得到解决 ,因为文件并没有提交。没有继续合并,或者撤销合并。所以依然不能切换分支的。

    git checkout dev
    master-dev.txt: needs merge
    error: you need to resolve your current index first
    

      这里进行提交一下看看结果。

    git add master-dev.txt
    git commit -m 'both commit'
    
    # 当前的分支是 master
    cat master-dev.txt
    master
    dev
    
    # 切换到dev分支
    cat master-dev.txt
    dev
    # 可以看到dev分支的内容换是原来的内容,并没有改变。
    

      这样就合并了有冲突的分支, 现在有一个问题,就是 dev分支的内容和 master分支的内容是不同的。如何同步能?

    # 在dev分支中,更新master中的内容
    git rebase master
    
    #First, rewinding head to replay your work on top of it...
    #Fast-forwarded dev to master.
    
    # 这个表明,现在 dev分支的内容和master分支的内容是一致的。
    cat master-dev.txt
    master
    dev
    

      

  • 相关阅读:
    redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
    redis 事务、Jedis事务处理流程
    redis订阅与发布(把redis作为消息中间件)
    redis 管道技术 pipeline 简介
    redis 适用场景、缓存选择、java实现
    redis 数据淘汰策略与配置
    redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化
    redis 命令行查看修改配置文件项、配置文件说明
    redis HyperLogLog 基数估算
    redis 命令select、dbsize、清空数据库、info、client
  • 原文地址:https://www.cnblogs.com/flzs/p/11302559.html
Copyright © 2020-2023  润新知