zoukankan      html  css  js  c++  java
  • 【git】合并分支发生冲突

    README.md 文件内容如下:

    Creating a new branch is quick and simple.

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git checkout -b feature1 #create a branch 'feature1' and switch to it
    Switched to a new branch 'feature1'

    修改README.md文件如下:

    Creating a new branch is quick AND simple.

    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git add README.md #add new README.md to stage(暂存)
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git commit -m "commit after add"  #like -m says
    [feature1 6392060] commit after add
     1 file changed, 1 insertion(+), 1 deletion(-)
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git checkout master #switch to branch master
    Switched to branch 'master'

    修改README.md文件如下:

    Creating a new branch is quick & simple.

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git commit -m "commit on branch master"
    [master cbbef56] commit on branch master
     1 file changed, 1 insertion(+), 1 deletion(-)
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git merge feature1 #merge feature1 with master
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result.

    发生冲突

    Evan@Evan-PC MINGW64 /f/gitskills (master|MERGING)
    $ git checkout feature1
    error: you need to resolve your current index first
    README.md: needs merge

    解决冲突之前,无法切换分支

    Evan@Evan-PC MINGW64 /f/gitskills (master|MERGING)
    $ git merge feature1
    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>'
    hint: as appropriate to mark resolution and make a commit.
    fatal: Exiting because of an unresolved conflict.

    强行merge,还是不允许,提示 fix unmerged files up,并 add ->commit

    Evan@Evan-PC MINGW64 /f/gitskills (master|MERGING)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (master|MERGING)
    $ git commit -m "direct commit with fix unmerged file"
    [master f77dca7] direct commit with fix unmerged file

    看看强行 commit 而不去 fix unmerged file 会发生什么

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git merge feature1
    Already up to date.

    it seems work good

    打开文件,文件内容变为如下:

    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git checkout feature1
    Switched to branch 'feature1'

    切换到 branch feature1

    打开文件,文件内容如下:

    Creating a new branch is quick AND simple.

    由此可见,所谓 fix up unmerged file 只是 git 的提醒,根据实际情况修改文件之后重新提交即可解决。

    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 7 commits.
      (use "git push" to publish your local commits)
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git merge feature1
    Already up to date.

    再次合并,成功

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git checkout feature1
    Switched to branch 'feature1'
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git status
    On branch feature1
    nothing to commit, working tree clean
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 7 commits.
      (use "git push" to publish your local commits)
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 7 commits.
      (use "git push" to publish your local commits)
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git commit -m "commit again on master"
    On branch master
    Your branch is ahead of 'origin/master' by 7 commits.
      (use "git push" to publish your local commits)
    
    nothing to commit, working tree clean
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git checkout feature1
    Switched to branch 'feature1'
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git commit -m "commit again on feature1"
    On branch feature1
    nothing to commit, working tree clean
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 7 commits.
      (use "git push" to publish your local commits)
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git merge feature1
    Already up to date.

    即使文件内容依旧不同,分别 add 、commit 却可以merge。

    那么,再次修改的话呢?

    branch master 下的文件修改后如下:

    Creating a new branch is quick && simple.

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git commit -m "edit 2nd"
    [master 3970f17] edit 2nd
     1 file changed, 1 insertion(+), 5 deletions(-)
    
    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git merge feature1
    Already up to date.

    单独修改 master 下的文件可以merge

    再修改 feature1 下文件如下:

    Creating a new branch is quick &&& simple.

    Evan@Evan-PC MINGW64 /f/gitskills (master)
    $ git checkout feature1
    Switched to branch 'feature1'
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git add README.md
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git commit -m "edit 2nd"
    [feature1 7a7f369] edit 2nd
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    Evan@Evan-PC MINGW64 /f/gitskills (feature1)
    $ git merge master
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result.

    又修改 feature1 下的文件则merge失败。

    结论:

    于是,我猜想,一般情况下,当发生merge失败的时候,需要将修改双方分支的冲突文件修改为一致;或者修改并重新 commit master 分支下的冲突文件之后,删除另一分支。

    原文地址:廖雪峰的官方网站

  • 相关阅读:
    Web SSH 客户端Ajaxterm安装
    Ubuntu Manpage: ajaxterm
    Web工程师的工具箱 | 酷壳
    EF架构~二级域名中共享Session
    VS~通过IIS网站启用"域名"调试
    EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口
    MVVM架构~knockoutjs系列之文本框数符长度动态统计功能
    JS~jwPlayer为js预留的回调方法大总结
    晒网站:应用诺贝尔奖得主罗斯匹配算法的交友网站,具有更符合用户大网撒鱼心理的新颖用户使用模式
    ZOJ 2334(Monkey King-左偏树第一题)
  • 原文地址:https://www.cnblogs.com/Tsing-Evan/p/8445256.html
Copyright © 2011-2022 走看看