Tôi nghi ngờ bạn nhầm lẫn ở đây vì về cơ bản là khó hiểu. Để làm cho mọi thứ tồi tệ hơn, toàn bộ công cụ của chúng ta / của họ chuyển đổi vai trò (trở nên ngược) khi bạn đang thực hiện một cuộc nổi loạn.
Cuối cùng, trong một git merge
, nhánh "của chúng ta" đề cập đến nhánh bạn đang hợp nhất vào :
git checkout merge-into-ours
và nhánh "của họ" đề cập đến nhánh (đơn) mà bạn đang hợp nhất:
git merge from-theirs
và ở đây "chúng ta" và "họ" làm cho một số ý nghĩa, vì mặc dù "họ" có lẽ là bạn dù sao, "họ" không phải là một trong những bạn đã vào khi bạn chạy git merge
.
Mặc dù sử dụng tên chi nhánh thực tế có thể khá tuyệt, nhưng nó lại bị phá vỡ trong các trường hợp phức tạp hơn. Chẳng hạn, thay vì ở trên, bạn có thể làm:
git checkout ours
git merge 1234567
nơi bạn đang hợp nhất bằng ID cam kết thô. Tệ hơn, bạn thậm chí có thể làm điều này:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
trong trường hợp không có tên chi nhánh liên quan!
Tôi nghĩ rằng nó rất ít giúp đỡ ở đây, nhưng trên thực tế, theo gitrevisions
cú pháp , bạn có thể tham khảo một đường dẫn riêng lẻ trong chỉ mục theo số, trong quá trình hợp nhất xung đột
git show :1:README
git show :2:README
git show :3:README
Giai đoạn # 1 là tổ tiên chung của các tệp, giai đoạn # 2 là phiên bản nhánh mục tiêu và giai đoạn # 3 là phiên bản bạn đang hợp nhất từ đó.
Lý do các khái niệm "của chúng ta" và "của họ" bị hoán đổi xung quanh rebase
là vì rebase hoạt động bằng cách thực hiện một loạt các quả anh đào, vào một nhánh ẩn danh (chế độ CHÍNH). Nhánh mục tiêu là nhánh ẩn danh và nhánh hợp nhất là nhánh ban đầu (pre-rebase) của bạn: vì vậy "--ours" có nghĩa là nhánh rebase ẩn danh đang xây dựng trong khi "--theirs" có nghĩa là "nhánh của chúng tôi bị từ chối" .
Đối với mục gitattribut: nó có thể có tác dụng: "chúng ta" thực sự có nghĩa là "sử dụng giai đoạn # 2" trong nội bộ. Nhưng như bạn lưu ý, nó không thực sự tại chỗ vào thời điểm đó, vì vậy nó không có tác dụng ở đây ... tốt, trừ khi bạn sao chép nó vào cây công việc trước khi bạn bắt đầu.
Ngoài ra, bằng cách này, điều này áp dụng cho tất cả việc sử dụng của chúng tôi và của họ, nhưng một số ở cấp độ toàn bộ tệp ( -s ours
đối với chiến lược hợp nhất; git checkout --ours
trong xung đột hợp nhất) và một số trên cơ sở từng mảnh ( -X ours
hoặc -X theirs
trong khi-s recursive
hợp nhất). Mà có lẽ không giúp được gì với sự nhầm lẫn.
Tôi chưa bao giờ nghĩ ra một cái tên hay hơn cho những thứ này. Và: xem câu trả lời của VonC cho một câu hỏi khác, nơi git mergetool
giới thiệu thêm tên cho những cái này, gọi chúng là "cục bộ" và "từ xa"!