2010-08-18 35 views
25

Tôi có một loạt các cam kết của các tác giả khác nhau và tôi muốn thấy một kết quả giữa 2 cam kết nhưng chỉ xem xét các cam kết của một trong các tác giả, một cái gì đó giống như - author in git đăng nhập.git diff với bộ lọc tác giả

Tôi quan tâm đến sự khác biệt tóm tắt cuối cùng và không phải là sự khác biệt của các cam kết riêng lẻ.

Có mẹo vặt nào cho điều đó không?

+2

Không chính xác là trùng lặp, nhưng bạn có thể tìm thấy một số thông tin hữu ích tại đây: [Trích xuất các thay đổi có liên quan để xem xét mã] (http://stackoverflow.com/questions/78339/extract-relevant-changes-for-code-review) –

Trả lời

19

Vấn đề ở đây là bạn không thể làm điều này trong trường hợp chung. Giả sử Alice thay đổi một tập tin cụ thể, sau đó Bob thay đổi nó - bao gồm cả những phần mà Alice đã thay đổi - và cuối cùng Alice thay đổi nó một lần nữa. Làm thế nào để bạn kết hợp hai diffs của Alice thành một diff khác? Nếu bạn coi chúng là hai bản vá, thứ hai sẽ không áp dụng nếu không có bản vá của Bob được áp dụng trước tiên! Nhưng bạn cũng không thể đơn giản phát hiện ra trạng thái cuối cùng so với bản gốc, bởi vì điều đó sẽ bao gồm các thay đổi của Bob.

Nếu bạn thích một ví dụ với các hoạt động git, điều này giống như thực hiện một lần rebase tương tác và chỉ xóa các cam kết ngẫu nhiên. Chắc chắn, đôi khi nó sẽ làm việc, nhưng đôi khi nó sẽ chỉ hoàn toàn thất bại, bởi vì một trong những cam kết phụ thuộc vào một trong những người bạn đã lấy ra.

Vì vậy, tôi biết bạn nói bạn không muốn cá nhân cam kết diffs, nhưng đó là tất cả các bạn thực sự có thể hy vọng:

git log -p --author=Alice 

Hoặc nếu bạn thực sự tuyệt vọng cho một diff duy nhất, điều này sẽ có được điều đó cho bạn, nhưng chỉ trong trường hợp không có sự tương tác vá như tôi đã đề cập ở trên:

git checkout -b temp first_commit 
git log --pretty=%H --author=Alice first_commit..second_commit | 
while read commit; do 
    git cherry-pick $commit || exit 
done 
# or if you have a new version of git, cherry-pick works with multiple arguments: 
# git cherry-pick $(git log --pretty=%H --author=Alice first_commit..second_commit) 
git diff first_commit temp 

này thực sự đòi hỏi hoạt động trong cây công việc, bởi vì có hoàn toàn không có sự đảm bảo rằng bất kỳ bản vá lỗi sẽ được áp dụng một lần cam kết đã bị bỏ qua. Bạn chỉ cần thử và xem.

0

Có thể là bạn có thể sử dụng tính năng định dạng của diff-tree

format:<string> 

Định dạng format:<string> cho phép bạn xác định những thông tin mà bạn muốn hiển thị.
Nó hoạt động hơi giống như định dạng printf, với ngoại lệ đáng chú ý là bạn nhận được dòng mới với %n thay vì \n.

ví dụ,

format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" 

sẽ hiển thị một cái gì đó như thế này:

The author of fe6e0ee was Junio C Hamano, 23 hours ago 
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<< 

Sau đó bạn có thể grep trên tác giả có liên quan.

Các vấn đề liên quan