2012-03-08 15 views
3

コミットが別のものの親であるかどうかを調べる一般的な方法があるかどうかは疑問でした。Gitには任意のコミットが含まれています

git branch --contains <hash> 

ほとんど私が欲しいものです。コミットを含むすべてのブランチをリストしますが、任意のコミットが別のコミットを「含む」かどうかを知りたいと思います。

私の一時的なハックは、コミット時にブランチを作成して、それがリストに含まれているかどうかを確認することですが、これはうんざりです。

git branch __temp_branch__ <hash1> 
git branch --contains <hash2> # check if __temp_branch__ is in output 
git branch -d __temp_branch__ 

答えて

2

commitAがcommitBの祖先である場合、git merge-base commitA commitBcommitAです。たとえば:

if [ "$(git merge-base $commitA $commitB)" = "$commitA" ]; then ... 

これは、実質上git rev-listの出力をgrepをするよりも効率的であるという事はあなたにする必要があります。

+0

私はこの回答を受け入れるつもりです。これは他の回答よりもかなり速く、両方のハッシュが有効であることを保証します。 –

2

git rev-list <childSHA> | grep <parentSHA>

これは<childSHA>

+0

ありがとう、ありがとう:) –

0

の親であれば一つの可能​​性は多分ある<parentSHA>を返します。

git log --ancestry-path <parentSHA> <childSHA> 

それは何も返さない場合、あなたはparentSHAではありません知っています親。

関連する問題