章節 30 解決衝突
學習目標
- 學習處理合併時產生的衝突Learn how to handle conflicts during a merge
將 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 合併工具的教學文件。