Jak zmusić rodziców do scalenia w git?


140

Niektóre polecenia git przyjmują rodzica jako wersję; inne (takie jak git revert), jako numer nadrzędny. Jak zdobyć rodziców w obu przypadkach. Nie chcę używać polecenia dziennika graficznego, ponieważ często wymaga to przewinięcia długiego drzewa w celu znalezienia drugiego rodzica.

Odpowiedzi:


179

Proste git log <hash>wezwanie do zatwierdzenia scalającego pokazuje skrócone skróty swoich rodziców:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git wyprowadza rodziców zgodnie z ich liczbą: pierwszy (skrajny lewy) hash dotyczy pierwszego rodzica i tak dalej.

Jeśli wszystko, czego chcesz, to tylko skróty, dwie równoważne opcje to:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list może również wyświetlać skróty rodziców, chociaż najpierw wyświetli hash dla zatwierdzenia:

$ git rev-list --parents -n 1 <commit>

Jeśli chcesz zbadać rodziców, możesz odnieść się do nich bezpośrednio karatami jako <commit>^1i <commit>^2np .:

git show <commit>^1

To uogólnia; w przypadku scalania ośmiornicy możesz odnieść się do n- tego rodzica jako <commit>^n. Możesz odnosić się do wszystkich rodziców <commit>^@, chociaż to nie działa, gdy wymagane jest pojedyncze zatwierdzenie. Dodatkowe przyrostki mogą pojawiać się po zastosowaniu n th składni nadrzędnej (na przykład <commit>^2^, <commit>^2^@), natomiast nie mogą one po ^@( <commit>^@^nie obowiązuje). Aby uzyskać więcej informacji na temat tej składni, przeczytaj rev-parsestronę podręcznika .


1
Odpowiadając na moje własne pytanie: wyniki polecenia „git rev-list --parents -n 1 <somehash>” to: <somehash> <parent1> <parent2>. To znaczy rodzice są numerowani.
mikemaccana

Możesz także użyć git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Po prostu umieść to w swojej PATH i zadzwoń do $ git rodziców <commit> (<commit> domyślnie HEAD)
Daniel Ribeiro

@jefromi, naprawdę chcę, aby część „Zwróć też uwagę, że normalne dane wyjściowe dziennika pokazują…” znajdowała się na początku Twojej odpowiedzi. :)
Adam Monsen

3
git logi git showwypisuje bardzo różne rzeczy, gdy jest tylko jeden rodzic. Wolisz, git logjeśli chcesz spójności.
Noel Yap

Ta odpowiedź nie działa na moim komputerze z Ubuntu z git (v2.17.1). Nie widzę Mergepliku na git log -1wyjściu.
mja

29

Poniżej znajduje się najprostszy sposób, w jaki znalazłem, aby zobaczyć rodziców połączenia

git show --pretty=raw 3706454

14
git cat-file -p 3706454 jest taki sam, ale jeszcze krótszy :)
sabgenton

1
Oba są bardzo przydatne!
tecknut

Inna opcjagit log --pretty=raw -1 3706454
selalerer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.