2010-08-18 22 views
25

Mam serię commits różnych autorów i chciałbym zobaczyć wyjście git dff między 2 zatwierdzeniami, ale tylko biorąc pod uwagę zatwierdzenia przez jednego z autorów, coś w stylu, coś w rodzaju --author in git log.git diff z filtrem autora

Interesuje mnie końcowe podsumowanie różnic, a nie różnice poszczególnych zatwierdzeń.

Czy jest do tego sztuczka?

+2

To nie jest dokładnie duplikat, ale możesz znaleźć tu przydatne informacje: [Wyodrębnij istotne zmiany do przeglądu kodu] (http://stackoverflow.com/questions/78339/extract-relevant-changes-for-code-review) –

Odpowiedz

19

Problem polega na tym, że nie można tego zrobić w ogólnym przypadku. Załóżmy, że Alicja zmienia konkretny plik, a następnie zmienia go - w tym części, które Alice zmieniła - i wreszcie Alice zmienia je ponownie. Jak połączyć dwie dyferencje Alice w jedną różnicę? Jeśli weźmiesz je jako dwie łatki, druga po prostu nie będzie obowiązywać bez uprzedniego nałożenia łatki Boba! Ale nie możesz także po prostu zmienić stanu końcowego w stosunku do oryginału, ponieważ to spowoduje zmiany Boba.

Jeśli wolisz przykład z operacjami git, to tak, jakby robić interaktywny rebase i po prostu usuwać przypadkowe zatwierdzenia. Pewnie, czasami to zadziała, ale czasami po prostu całkowicie się nie powiedzie, bo jedno z tych zobowiązań zależało od jednego z tych, które wyjęliście.

Tak, wiem, że nie chcesz popełnić indywidualna dyferencjału, ale to wszystko naprawdę można liczyć na:

git log -p --author=Alice 

lub jeśli jesteś naprawdę zdesperowany dla pojedynczego diff, to dostanie to dla ciebie, ale tylko w przypadkach, gdy nie ma interakcji łata jak wspomniałem powyżej:

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 

to naprawdę nie wymaga operacji w drzewie pracy, ponieważ nie ma absolutnie żadnej gwarancji, że którykolwiek z łatami zastosuje raz Zatwierdzenie zostało pominięte. Musisz tylko spróbować.

0

Może można korzystać z funkcji formatowania diff-tree

format:<string> 

sformatować format:<string> pozwala określić, które informacje mają być wyświetlane.
To działa trochę jak formacie printf, z chlubnym wyjątkiem, że masz przełamane z %n zamiast \n.

Np,

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

by pokazać coś takiego:

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

Następnie można grep na właściwej autora.