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.
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) –