【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 分支下的沖突文件之后,刪除另一分支。

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM