gitでマージコミットの親を取得するにはどうすればよいですか?


140

一部のgitコマンドは親をリビジョンとして使用します。その他(などgit revert)、親番号として。両方のケースで親を取得する方法。グラフィカルログコマンドを使用したくないので、2番目の親を見つけるには長いツリーを下にスクロールする必要があることがよくあります。

回答:


179

単純にgit log <hash>マージコミットを呼び出すと、その親のハッシュの省略形が表示されます。

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

git 番号に従って親を出力します。最初の(左端の)ハッシュは最初の親を表し、以下同様です。

必要なのがハッシュだけの場合、同等の2つの選択肢は次のとおりです。

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

git rev-list 親のハッシュを表示することもできますが、最初にコミットのハッシュがリストされます:

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

親を調べたい場合は、カラットとして<commit>^1and <commit>^2で直接参照できます。例:

git show <commit>^1

これは一般化します。タコのマージの場合、n 番目の親をとして参照できます<commit>^n。ですべての親を参照できますが<commit>^@、単一のコミットが必要な場合は機能しません。追加のサフィックスは、nの後に表示することができます番目の親構文を(例えば<commit>^2^<commit>^2^@彼らは後にすることはできません一方で、) ^@<commit>^@^有効ではありません)。この構文の詳細については、rev-parsemanページを参照してください。


1
私自身の質問への回答: 'git rev-list --parents -n 1 <somehash>'の結果は次のとおりです:<somehash> <parent1> <parent2>。つまり、両親には1つの番号が付けられています。
mikemaccana 2013

git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parentsを使用することもできます。それをPATHに入れて$ git parents <commit>を呼び出します(<commit>のデフォルトはHEADです)
Daniel Ribeiro

@jefromi、私は本当に「通常のログ出力が表示されることにも注意してください...」という部分があなたの答えの上にあることを望みます。:)
Adam Monsen 2014年

3
git loggit show親が1つしかない場合は、非常に異なるものを出力します。好むgit logあなたは一貫性が必要な場合。
Noel Yap 14

この回答は、Ubuntuマシンでは動作しませんgit (v2.17.1)。出力にMergeファイルが表示されませんgit log -1
mja 2018

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.