Vì tôi đã tạo ra những hình ảnh này, tôi nghĩ rằng có thể đáng để sử dụng chúng trong một câu trả lời khác, mặc dù mô tả về sự khác biệt giữa ..
(dấu chấm) và ...
(dấu chấm-chấm) về cơ bản giống như trong câu trả lời của manojlds .
Lệnh git diff
thường¹ chỉ cho bạn thấy sự khác biệt giữa các trạng thái của cây giữa chính xác hai điểm trong biểu đồ cam kết. Các ..
và ...
ký hiệu trong git diff
có ý nghĩa như sau:
Nói cách khác, git diff foo..bar
giống hệt như git diff foo bar
; cả hai sẽ cho bạn thấy sự khác biệt giữa các mẹo của hai nhánh foo
và bar
. Mặt khác, git diff foo...bar
sẽ cho bạn thấy sự khác biệt giữa "cơ sở hợp nhất" của hai nhánh và đỉnh của bar
. "Cơ sở hợp nhất" thường là điểm chung cuối cùng giữa hai nhánh đó, vì vậy lệnh này sẽ cho bạn thấy những thay đổi mà công việc của bạn bar
đã đưa ra, trong khi bỏ qua mọi thứ đã được thực hiện foo
trong thời gian trung bình.
Đó là tất cả những gì bạn cần biết về ..
và ...
ký hiệu trong git diff
. Tuy nhiên...
... Một nguồn gây nhầm lẫn phổ biến ở đây là điều đó ..
và ...
có nghĩa là những thứ khác nhau một cách tinh tế khi được sử dụng trong một lệnh như git log
mong đợi một tập hợp các xác nhận là một hoặc nhiều đối số. (Tất cả các lệnh này đều kết thúc bằng cách sử dụng git rev-list
để phân tích một danh sách các xác nhận từ các đối số của chúng.)
Ý nghĩa của ..
và ...
cho git log
có thể được hiển thị bằng đồ họa như dưới đây:
Vì vậy, git rev-list foo..bar
cho bạn thấy tất cả mọi thứ trên chi nhánh bar
cũng không phải trên chi nhánh foo
. Mặt khác, git rev-list foo...bar
cho bạn thấy tất cả các cam kết trong một foo
hoặc bar
, nhưng không phải cả hai . Sơ đồ thứ ba chỉ cho thấy rằng nếu bạn liệt kê hai nhánh, bạn sẽ nhận được các cam kết nằm trong một hoặc cả hai.
Chà, dù sao thì tôi cũng thấy hơi khó hiểu và tôi nghĩ rằng biểu đồ cam kết sẽ giúp :)
Tôi chỉ nói "thông thường" vì khi giải quyết xung đột hợp nhất, chẳng hạn, git diff
sẽ cho bạn thấy hợp nhất ba chiều.
..
và...
tronggit diff
và ý nghĩa khác nhau của chúng tronggit log
.