2012-01-30 13 views
97

Biorąc pod uwagę zatwierdzenie scalenia, jak mogę uzyskać jego rodziców? Niektóre polecenia git przyjmują rodzica jako wersję; inne (takie jak git revert), jako numer nadrzędny. Chciałbym wiedzieć, jak zdobyć rodziców w obu przypadkach. Nie chcę używać graficznego polecenia dziennika, ponieważ często wymaga przewijania w dół długiego drzewa, aby znaleźć drugiego rodzica.Otrzymuj rodziców zatwierdzenia scalenia w git

Odpowiedz

118

Należy również pamiętać, że normalne wyjście dziennika przedstawia skrócone mieszań z rodziców, nie ma potrzeby, aby przejść:

commit 395f65d438b13fb1fded88a330dc06c3b0951046 
Merge: 9901923 d28790d 
... 

git zawsze drukuje je w kolejności liczby dominującej: pierwszy hash jest dla pierwszego rodzica, i tak dalej.

Jeśli chcesz tylko mieszań, dwie równoważne możliwości:

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

rev-list może również pokazać rodzic mieszań dla commit. Najpierw wylistuje hash dla zatwierdzenia, a następnie przez rodziców.

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

Jeśli chcesz zbadać rodziców, można zwrócić się do nich bezpośrednio z karatów jako <commit>^1 i <commit>^2, np .:

git show <commit>^1 

ten sposób uogólnienia; w przypadku scalania ośmiornicy można odwołać się do rodzica jako jako . Możesz odwołać się do wszystkich rodziców z <commit>^@, ale to nie działa, gdy wymagany jest pojedynczy commit. Dodatkowe sufiksy mogą pojawiać się po składni macierzystej (np. <commit>^2^, <commit>^2^@), podczas gdy nie mogą one po ^@ (<commit>^@^ być nieprawidłowe). Więcej informacji na temat tej składni można znaleźć na stronie podręcznika: rev-parse.

Należy również pamiętać, że normalne wyjście dziennika wykazuje skróconych mieszań z rodziców:

commit 395f65d438b13fb1fded88a330dc06c3b0951046 
Merge: 9901923 d28790d 
... 
+0

sekretarki moje własne pytanie: wyniki "git rev-list - parents -n 1 " są: . Tzn. Rodzice są policzeni. – mikemaccana

+0

Możesz również użyć git-parent https://github.com/danielribeiro/dotfiles/blob/master/bin/git-parents. Po prostu umieść go w swojej PATH i zadzwoń do gitów rodziców ( domyślnie HEAD) –

+0

@jefromi, naprawdę chcę, aby "Zauważ, że normalne logowanie pokazuje ..." część, która znajduje się na górze twojej odpowiedzi. :) –

19

Oto najprostszy sposób znalazłem aby rodzice z seryjnej

git show --pretty=raw 3706454 
+10

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

+0

Oba są bardzo przydatne! – tecknut

Powiązane problemy