Có vẻ như đây vẫn là một vấn đề nan giải chưa có lời giải thích hợp. Tôi không có đủ tín dụng để bình luận, vì vậy đây là đóng góp nhỏ của tôi.
Giải pháp đầu tiên của Seth Robertson khá phù hợp với tôi, nhưng chỉ cung cấp cho tôi các nhánh cục bộ, trong đó có nhiều kết quả dương tính giả, có thể là do hợp nhất từ nhánh ổn định.
Giải pháp thứ 2 của Adam Dymitruk không phù hợp với tôi. Đối với người mới bắt đầu, --format =% 5 là gì? Nó không được git nhận dạng, tôi không thể tìm thấy gì về nó và tôi không thể làm cho nó hoạt động với các tùy chọn định dạng khác.
Nhưng giải pháp đầu tiên của anh ấy kết hợp với tùy chọn --source và với một grep đơn giản đã tỏ ra hữu ích:
git log --all --source -- <filename> | grep -o "refs/.*" | sort -u
Điều này cung cấp cho tôi một số thẻ và nhánh từ xa và một nhánh cục bộ, nơi tôi thực hiện những thay đổi mới nhất đối với tệp. Không chắc chắn rằng điều này là hoàn chỉnh như thế nào.
CẬP NHẬT theo yêu cầu của @nealmcb, sắp xếp các nhánh theo thay đổi gần đây nhất:
Đầu tiên, bạn có thể thay đổi grep thành "refs / heads /.*", điều này sẽ chỉ cung cấp cho bạn các chi nhánh cục bộ. Nếu chỉ có một vài nhánh, bạn có thể kiểm tra cam kết mới nhất của từng nhánh như sau:
git log -1 <branch> -- <filename>
Nếu có nhiều nhánh hơn và bạn thực sự muốn tự động hóa việc này, bạn có thể kết hợp hai lệnh bằng cách sử dụng xargs, định dạng git log và một cách sắp xếp khác vào một lớp lót này:
git log --all --source -- <filename> | grep -o "refs/heads/.*" | sort -u | xargs -I '{}' git log -1 --format=%aI%x20%S '{}' -- <filename> | sort -r
Điều này sẽ dẫn đến đầu ra như thế này:
2020-05-07T15:10:59+02:00 refs/heads/branch1
2020-05-05T16:11:52+02:00 refs/heads/branch3
2020-03-27T11:45:48+00:00 refs/heads/branch2