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