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