Có 4 tệp liên quan:
$LOCAL
Cá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
$REMOTE
Cá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
$BASE
Tổ 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
$MERGED
Cá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 $MERGED
tậ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 $MERGED
tệ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, $BASE
tệ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 $BASE
tệp, nhưng trong tham số ẩn thứ tư của meld
, đó là $MERGED
tệp (mà bạn thậm chí không nhìn thấy). Các $BASE
tậ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à $MERGED
tập tin .
Trong chỉnh sửa trực quan, khi trình bày cho bạn $BASE
tệp (thay vì $MERGED
tệp) git
về 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à $MERGED
tệp).
Đợt điều chỉnh thủ công của các cuộc xung đột được thực hiện trên $MERGED
vì 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 đó $MERGED
tậ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
, $REMOTE
tập tin. Bạn đang chọn các thay đổi từ $LOCAL
và $REMOTE
các tệp và bạn đang đưa các thay đổi đó vào $BASE
tệ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à $MERGED
tệp.
merge.conflictstyle
tùy chọn cấu hình được đặt thànhdiff3
thay vì mặc địnhmerge
.