Como obter os pais de uma consolidação de mesclagem no git?


140

Alguns comandos git tomam o pai como uma revisão; outros (como git revert), como um número pai. Como obter os pais para os dois casos. Não quero usar o comando gráfico log, pois isso geralmente exige a rolagem de uma árvore longa para encontrar o segundo pai.

Respostas:


179

Simple git log <hash>chamado para um commit de mesclagem mostra hashes abreviados de seus pais:

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

git gera os pais de acordo com seu número: o primeiro hash (mais à esquerda) é para o primeiro pai e assim por diante.

Se tudo o que você deseja são apenas os hashes, as duas opções equivalentes são:

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

git rev-list também pode mostrar os hashes dos pais, embora ele primeiro liste o hash de um commit:

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

Se você deseja examinar os pais, pode consultá-los diretamente com quilates como <commit>^1e <commit>^2, por exemplo:

git show <commit>^1

Isso generaliza; para uma mesclagem de polvo, você pode consultar o enésimo pai como <commit>^n. Você pode consultar todos os pais com <commit>^@, embora isso não funcione quando uma única confirmação é necessária. Sufixos adicionais podem aparecer após a nona sintaxe pai (por exemplo <commit>^2^, <commit>^2^@), enquanto que não podem depois ^@( <commit>^@^não é válido). Para mais informações sobre esta sintaxe, leia a rev-parsepágina de manual.


1
Respondendo à minha própria pergunta: os resultados de 'git rev-list --parents -n 1 <somehash>' são: <somehash> <parent1> <parent2>. Ou seja, os pais são um numerados.
— Mikemaccana

Você também pode usar o git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Basta colocá-lo no seu PATH e chamar $ git parents <commit> (<commit> assume como padrão HEAD) #
— Daniel Ribeiro

@ jefromi, eu realmente quero que a parte "Observe também que a saída normal do log mostra ..." esteja no topo da sua resposta. :)
— Adam Monsen

3
git loge git showproduz coisas muito diferentes quando há apenas um pai. Prefira git logse você deseja consistência.
— Noel Yap

Esta resposta não funciona na minha máquina Ubuntu com git (v2.17.1). Não vejo Mergearquivo na git log -1saída.
— Md22

29

A seguir, é a maneira mais simples de encontrar os pais de uma mesclagem

git show --pretty=raw 3706454

14
git cat-file -p 3706454 é o mesmo, mas ainda mais curto :)
— sabgenton

1
Ambos são muito úteis!
— Tecknut

Outra opçãogit log --pretty=raw -1 3706454
— selalerer 6/06/18
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.