章節 30 解決衝突

學習目標

將 master 合併到 greet 01

現在切換到 greet 分支branch 然後試著合併剛剛送交的 master 版本

執行:

git checkout greet
git merge master

輸出:

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

如果您現在開啟 lib/hello.rb, 您將會看到:

檔案: lib/hello.rb

<<<<<<< HEAD
require 'greeter'

# Default is World
name = ARGV.first || "World"

greeter = Greeter.new(name)
puts greeter.greet
=======
# Default is World

puts "What's your name"
my_name = gets.strip

puts "Hello, #{my_name}!"
>>>>>>> master

上面第一段的部分是您目前分支的內容(greet)。第二個部分用 ========== 分開這是 master 分支的內容。

修復衝突 02

您需要手動來解決衝突的情況。 修改 lib/hello.rb 檔案跟下面一樣。

檔案: lib/hello.rb

require 'greeter'

puts "What's your name"
my_name = gets.strip

greeter = Greeter.new(my_name)
puts greeter.greet

送交處理完畢的版本03

執行:

git add lib/hello.rb
git commit -m "Merged master fixed conflict."

輸出:

$ git add lib/hello.rb
$ git commit -m "Merged master fixed conflict."
[greet 3165f66] Merged master fixed conflict.

進階的合併技巧 04

git 並沒有提供任何圖形化介面的合併工具,不過 git 允許您使用其他的第三方工具。查看 http://onestepback.org/index.cgi/Tech/Git/UsingP4MergeWithGit.red ,可以在找到 git 使用 Perforce 合併工具的教學文件。

目錄