Có 4 tệp liên quan:
$LOCALCác tập tin trên chi nhánh nơi bạn đang hợp nhất; không bị ảnh hưởng bởi quá trình hợp nhất khi hiển thị cho bạn
$REMOTECác tập tin trên chi nhánh từ nơi bạn đang hợp nhất; không bị ảnh hưởng bởi quá trình hợp nhất khi hiển thị cho bạn
$BASETổ tiên chung của $ LOCAL và $ REMOTE, nghĩa là. điểm mà hai nhánh bắt đầu chuyển hướng tệp được xem xét; không bị ảnh hưởng bởi quá trình hợp nhất khi hiển thị cho bạn
$MERGEDCác tập tin sáp nhập một phần, với xung đột; đây là tệp duy nhất được chạm vào bởi quá trình hợp nhất và trên thực tế, không bao giờ hiển thị cho bạn trongmeld
Các $MERGEDtập tin là một trong đó chứa <<<<<<, >>>>>>, =====(và, có lẽ, ||||||) đánh dấu (mà mâu thuẫn phân định). Đây là tập tin mà bạn chỉnh sửa thủ công để sửa xung đột.
Chỉnh sửa xung đột thủ công và chỉnh sửa xung đột trực quan được thực hiện trên các tệp khác nhau và trình bày các thông tin khác nhau.
Khi sử dụng mergetool (giả định meld), các tập tin được nhìn thấy trong đó là: $LOCAL, $BASE, $REMOTE. Lưu ý rằng bạn không nhìn thấy $MERGEDtệp, mặc dù điều này được truyền dưới dạng tham số ẩn meldđể ghi kết quả chỉnh sửa ở đó.
Nói cách khác, trong meld, bạn đang chỉnh sửa tệp ở giữa, $BASEtệp và bạn chọn tất cả các thay đổi từ bên trái hoặc từ bên phải theo cách thủ công . Nó là một tập tin sạch, không bị ảnh hưởng bởi quá trình hợp nhất. Vấn đề duy nhất là, khi bạn lưu, bạn không lưu vào $BASEtệp, nhưng trong tham số ẩn thứ tư của meld, đó là $MERGEDtệp (mà bạn thậm chí không nhìn thấy). Các $BASEtập tin nào không chứa bất kỳ xung đột hay hòa trộn thành công một phần vì nó không phải là $MERGEDtập tin .
Trong chỉnh sửa trực quan, khi trình bày cho bạn $BASEtệp (thay vì $MERGEDtệp) gitvề cơ bản sẽ loại bỏ tất cả các nỗ lực của nó để thực hiện việc hợp nhất (những nỗ lực đó có thể nhìn thấy, nếu bạn muốn, trong tệp $ MERGED) và cho phép bạn thực hiện việc hợp nhất hoàn toàn từ đầu .
Điểm mấu chốt là trong xung đột hợp nhất thủ công và trực quan, bạn không nhìn vào cùng một tệp, nhưng kết quả cuối cùng được ghi trong cùng một tệp (đó là $MERGEDtệp).
Đợt điều chỉnh thủ công của các cuộc xung đột được thực hiện trên $MERGEDvì git không có nghĩa là để giới thiệu bạn ba tác phẩm, vì vậy nó squashes thông tin từ ba file ( $LOCAL, $BASE, $REMOTE) trong đó $MERGEDtập tin.
Nhưng những công cụ trực quan có phương tiện để hiển thị cho bạn ba tập tin: họ cho bạn thấy $LOCAL, $BASE, $REMOTEtập tin. Bạn đang chọn các thay đổi từ $LOCALvà $REMOTEcác tệp và bạn đang đưa các thay đổi đó vào $BASEtệp, xây dựng lại hoàn toàn và thậm chí ghi đè lên nỗ lực sáp nhập thất bại đó là $MERGEDtệp.
merge.conflictstyletùy chọn cấu hình được đặt thànhdiff3thay vì mặc địnhmerge.