Làm cách nào để tìm thấy cam kết hợp nhất trước đó giữa hai nhánh?Cách tìm cam kết hợp nhất trước đó
Tôi muốn xem các thay đổi trong nhánh chính của mình kể từ lần cuối cùng tôi đã hợp nhất chi nhánh phát hành vào nhánh chính. Để xem các thay đổi trong nhánh phát hành kể từ nhánh cuối cùng, nó dễ dàng như git diff ...release
Nhưng rõ ràng là git diff release...
không hoạt động vì nó cũng bao gồm tất cả thay đổi trước lần hợp nhất cuối cùng. Vì vậy, tôi nghĩ rằng tôi cần phải cam kết id của việc hợp nhất cuối cùng để vượt qua nó để git diff
git log --reverse --ancestry-path `git merge-base HEAD release`.. \
--format=format:%H|head -n1
dường như làm việc và có thể được sử dụng với git diff $(...)
, nhưng có vẻ như hết sức phức tạp. Có giải pháp nào dễ hơn không?
Ví dụ
I
/\
A1 B1
\ |
| M
| |
A2 B2
đây I
là cam kết ban đầu. A[12]
là các cam kết phát hành và B[12]
là các cam kết chính. M
là cam kết trước đó. Trong ví dụ, các thay đổi giữa lần hợp nhất cuối cùng và cái chính chỉ là những thay đổi được giới thiệu bởi B2. git merge-base A2 B2
trả về A
1. Và git diff B2 A1
bao gồm các thay đổi của B1
. Vì vậy, câu hỏi là làm thế nào để tìm M trong trường hợp phức tạp hơn chung để người ta có thể chạy git diff M B2
mà không cần phải tìm kiếm thủ công M
.
Đây không phải là cách hiệu quả nhất, nhưng bạn có thể xem 'git log --graph --oneline' để tìm commit. – Shahbaz