Czy oprócz pisania aliasu lub skryptu istnieje krótsze polecenie pobierania różnic dla konkretnego zatwierdzenia?
git diff 15dc8^..15dc8
Jeśli podasz tylko jeden identyfikator zatwierdzenia git diff 15dc8
, różni się on od zatwierdzenia względem HEAD.
Odpowiedzi:
Zastosowanie
git show $COMMIT
. Pokaże ci komunikat dziennika dla zatwierdzenia i różnicę dla tego konkretnego zatwierdzenia.źródło
Posługiwać się:
jak opisano w poniższym fragmencie strony man git-rev-parse (1) (lub we współczesnej stronie gitrevisions (7) man ):
Oznacza to, że możesz używać go
15dc8^!
jako stenografii w15dc8^..15dc8
dowolnym miejscu w git, gdzie potrzebne są poprawki. Dla polecenia diffgit diff 15dc8^..15dc8
rozumiane jest jakogit diff 15dc8^ 15dc8
, co oznacza różnicę między rodzicem funkcji commit (15dc8^
) i commit (15dc8
).Uwaga : opis na stronie
git-rev-parse(1)
podręcznika mówi o zakresach wersji , w których musi działać również w przypadku zatwierdzeń łączenia, z więcej niż jednym rodzicem. Następnier1^!
jest „r1 --not r1^@
” tj. „r1 ^r1^1 ^r1^2 ...
”Możesz także użyć,
git show COMMIT
aby uzyskać opis zatwierdzenia i różnicę dla zatwierdzenia. Jeśli chcesz tylko różnicę, możesz użyćgit diff-tree -p COMMIT
źródło
^!
Notacja rodzic skrótowym działa poprawnie z difftool dla normalnych zobowiązuje ale diff jest odwrócony do zatwierdzeń seryjnej. Dlaczego tak?Jeśli wiesz, jak daleko wstecz, możesz spróbować czegoś takiego:
Wcześniejsze zatwierdzenia działają mniej więcej tak:
Istnieje wiele sposobów określania zatwierdzeń:
Zobacz tę stronę, aby uzyskać szczegółowe informacje .
źródło
Jak wskazuje @mipadi, możesz użyć
git show $COMMIT
, ale pokazuje to także niektóre nagłówki i komunikat zatwierdzenia. Jeśli chcesz mieć prosty diff, użyjgit show --pretty=format:%b $COMMIT
.To oczywiście nie jest krótka ręka, więc zachowuję ten alias w moim .gitconfig
To pozwala mi używać
git sd $COMMIT
do pokazywania różnic .źródło
Wiele z wymienionych przykładów (np.
git diff 15dc8^!
Lubgit diff 15dc8^..15dc8
) nie działa, jeśli używasz zsh i maszextendedglob
ustawione opcje. Możesz to naprawić na jeden z następujących trzech sposobów:unsetopt extendedglob
(i / lub usuń go z .zshrc)setopt NO_NOMATCH
(i / lub ustaw w .zshrc)uciekaj z karetki i uderzaj za każdym razem odwrotnym ukośnikiem, np
git diff 15dc8\^\!
źródło
~ 1 oznacza „rodzic”, ~ 2 „dziadek itp.
źródło
Powyższe rozwiązanie Paula zrobiło to, na co liczyłem.
Przydatne jest również dodawanie aliasów, takich jak wspomniane płyty grzewcze, jeśli umieścisz poniższe w sekcji [alias] pliku ~ / .gitconfig, możesz użyć skrótu, aby wyświetlić różnice między głową a poprzednią.
Następnie uruchomienie $ git diff-last da ci wynik. Pamiętaj, że obejmie to także wszelkie zmiany, których jeszcze nie zatwierdziłeś, a także różnicę między zatwierdzeniami. Jeśli chcesz zignorować zmiany, których jeszcze nie zatwierdziłeś, możesz użyć diff, aby bezpośrednio porównać HEAD z jego rodzicem:
źródło
Używa aliasów, więc nie odpowiada dokładnie na twoje pytanie, ale uważam, że są przydatne do robienia tego, co zamierzasz ...
źródło