目的

学习如何在合并时处理冲突。

合并 master 到 greet

现在回到 greet 分支,并尝试合并新的 master。

  1. $ git checkout greet
  2. $ git merge master
  1. $ git checkout greet
  2. Switched to branch 'greet'
  3. $ git merge master
  4. Auto-merging lib/hello.rb
  5. CONFLICT (content): Merge conflict in lib/hello.rb
  6. Automatic merge failed; fix conflicts and then commit the result.

如果你打开 lib/hello.rb,那么你将看到:

  1. <<<<<<< HEAD
  2. require 'greeter'
  3. # Default is World
  4. name = ARGV.first || "World"
  5. greeter = Greeter.new(name)
  6. puts greeter.greet
  7. =======
  8. # Default is World
  9. puts "What's your name"
  10. my_name = gets.strip
  11. puts "Hello, #{my_name}!"
  12. >>>>>>> master

第一部分是当前分支(greet)头的版本。第二部分是 master 分支 的版本。

修复冲突

你需要手动解决冲突。根据下列内容来修改 lib/hello.rb

  1. require 'greeter'
  2. puts "What's your name"
  3. my_name = gets.strip
  4. greeter = Greeter.new(my_name)
  5. puts greeter.greet

提交冲突解决

  1. $ git add lib/hello.rb
  2. $ git commit -m "Merged master fixed conflict."
  1. $ git add lib/hello.rb
  2. $ git commit -m "Merged master fixed conflict."
  3. Recorded resolution for 'lib/hello.rb'.
  4. [greet 25f0e8c] Merged master fixed conflict.

高级合并

Git 没有提供任何图形化的合并工具,但如果你想要使用第三 方合并工具来处理,它将十分乐意。参阅 http://onestepback.org/index.cgi/Tech/Git/UsingP4MergeWithGit.red 了解 Git 使用 Perforce 合并工具的说明。