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 分支下的冲突文件之后,删除另一分支。
原文地址:廖雪峰的官方网站