Đối với những thay đổi ẩn trong cam kết hợp nhất
Hợp nhất tự động xác nhận các thay đổi của chúng bị ẩn khỏi đầu ra nhật ký Git. Cả pickaxe và đổ lỗi ngược không tìm thấy sự thay đổi. Vì vậy, dòng tôi muốn đã được thêm vào và sau đó bị xóa và tôi muốn tìm sự hợp nhất đã loại bỏ nó. git log -p -- path/file
Lịch sử tập tin chỉ cho thấy nó được thêm vào. Đây là cách tốt nhất tôi tìm thấy nó:
git log -p -U9999 -- path/file
Tìm kiếm thay đổi, sau đó tìm kiếm ngược lại cho "^ commit" - "^ commit" đầu tiên là cam kết nơi tập tin cuối cùng có dòng đó. "^ Cam kết" thứ hai là sau khi nó biến mất. Cam kết thứ hai có thể là cam kết loại bỏ nó. Điều -U9999
này có nghĩa là hiển thị toàn bộ nội dung tệp (sau mỗi lần thay đổi tệp), giả sử các tệp của bạn là tất cả tối đa 9999 dòng.
Tìm bất kỳ sự hợp nhất có liên quan nào thông qua lực lượng vũ phu (khác nhau mỗi lần cam kết hợp nhất có thể với cha mẹ đầu tiên của nó, chạy với hàng tấn cam kết)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
. khi những thay đổi thực sự được hợp nhất vào dòng chính.)
Hiển thị cây Git với hai cam kết này (và rất nhiều lịch sử Git phức tạp đã bị xóa):
git log --graph --oneline A B ^$(git merge-base A B)
(A là cam kết đầu tiên ở trên, B là cam kết thứ hai ở trên)
Hiển thị lịch sử của A và lịch sử của B trừ lịch sử của cả A và B.
Phiên bản thay thế (dường như hiển thị đường dẫn tuyến tính hơn là cây lịch sử Git thông thường - tuy nhiên tôi thích cây lịch sử git thông thường):
git log --graph --oneline A...B
Ba, không phải hai dấu chấm - ba dấu chấm có nghĩa là "r1 r2 --not $ (git merge-base --all r1 r2). Đây là tập hợp các cam kết có thể truy cập từ một trong r1 (bên trái) hoặc r2 (bên phải bên), nhưng không phải từ cả hai. " - nguồn: "người đàn ông gitrevutions"
git log -S<string> /path/to/file
muốn-c
hoặc-cc
cũng sẽ hiển thị các phần xóa trong khi hợp nhất (xung đột)