2013-08-08 29 views
40

Giả sử tôi đang ở trên chi nhánh Git master và I git merge featurebranch. Có xung đột trong foo.html.Làm thế nào tôi có thể thấy một "ba cách khác" cho một cuộc xung đột hợp nhất Git?

Khi tôi mở foo.html, tôi thấy, trong khu vực xung đột, những gì master có và những gì featurebranch có. Nhưng tôi không thể thực sự nói với thay đổi nào được thực hiện trên master xung đột với featurebranch; Tôi chỉ biết chủ nhân nào có số ngay bây giờ.

Tôi muốn xem diff mà mỗi ứng dụng được áp dụng.

Hoặc, để có được những thông tin tương tự, tôi có thể thấy:

  • Phiên bản master hiện có
  • Phiên bản featurebranch hiện có
  • Phiên bản tổ tiên chung của họ

Làm cách nào tôi có thể thấy điều này?

Trả lời

61

Từ git-merge(1),

Một phong cách thay thế có thể được sử dụng bằng cách thiết lập "merge.conflictstyle" cấu hình biến thành "diff3".

Ngoài các số <<<<<<<, =======>>>>>>> điểm đánh dấu, nó sử dụng dấu khác ||||||| được theo sau bởi văn bản gốc. Bạn có thể nói rằng bản gốc vừa nêu một thực tế, và bên bạn chỉ đơn giản là đưa vào tuyên bố đó và bỏ cuộc, trong khi phía bên kia cố gắng có một thái độ tích cực hơn. Đôi khi bạn có thể đưa ra giải pháp tốt hơn bằng cách xem bản gốc.

này có thể được kích hoạt sử dụng

$ git config --global merge.conflictstyle diff3 
+3

Điều đó thật tuyệt vời! Cảm ơn bạn! Trong khi chờ đợi tôi đã phát hiện ra 'git mergetool', cái mà (đối với tôi) mở ra' vimdiff' với vài cửa sổ hiển thị thông tin tương tự, nhưng tôi thích phương pháp của bạn tốt hơn. –

+1

@NathanLong: btw, 'mergetool' thật sự rất hay khi sử dụng' kdiff3' – Hasturkun

12

Rất nhiều GUI diff/hợp nhất các công cụ có một cái nhìn hợp nhất 3 hoặc 4 chiều. Tôi rất khuyên bạn nên Beyond Compare để giải quyết xung đột hợp nhất. Một công cụ khác (okay) là DiffMerge.

Bạn có thể thiết lập bộ công cụ tùy chỉnh để sử dụng với lệnh git mergetool. Đây là cấu hình .gitconfig tôi cho Beyond So sánh (Pro edition) và DiffMerge trên máy tính Windows của tôi sử dụng msysgit:

[merge] 
    tool = bc3 
[diff] 
    tool = bc3 
[difftool "dm"] 
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\" 
[difftool "bc3"] 
    cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"" 
[mergetool "bc3"] 
    cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" 

Bạn có thể đọc thêm về cấu hình công cụ diff/hợp nhất khác nhau trong official Linux Kernel Git documentation for git config.

+1

+1 cho Beyond Compare! Tôi đã sử dụng phiên bản Pro trong nhiều năm và thích nó. Sự hỗ trợ của họ cũng rất tuyệt vời. – TrueWill

+0

Ảnh chụp màn hình hợp nhất 3 chiều cho Beyond Compare có cùng bố cục cửa sổ giống như trong 'vimdiff'. –

+2

Tôi sẽ đánh giá rất cao một lời giải thích cho bất kỳ downvotes để trả lời này. Xem xét rằng tôi cung cấp các cấu hình làm việc cho một số [công cụ tìm kiếm và kết hợp phổ biến bên ngoài phổ biến] (http://www.codinghorror.com/blog/2005/11/in-praise-of-beyond-compare.html) để cài đặt msysgit trên Windows , Tôi nghĩ câu trả lời của tôi mang lại giá trị tuyệt vời. –

Các vấn đề liên quan