コミットIDが与えられた場合、現在のブランチにコミットが含まれているかどうかをどのように判断しますか? 質問する

コミットIDが与えられた場合、現在のブランチにコミットが含まれているかどうかをどのように判断しますか? 質問する

私がやろうとしているのはバージョン チェックです。コードが最小バージョン以上であることを確認したいのです。そのため、現在のブランチに指定されたコミットが含まれているかどうかを確認する方法が必要です。

ベストアンサー1

ナイーブな方法

この結果を得るには複数の方法があります。最初の単純なオプションは、をgit log使用して特定のコミットを検索することですgrepが、これは必ずしも正確ではありません。

git log | grep <commit_id>

git log が他の理由でコミット SHA に言及している場合、たとえば別のブランチからの移植の結果としてコミット メッセージに言及している場合、誤検知が発生する可能性があります。

インタラクティブソリューション

指定git branchされたものを含むすべてのブランチを検索するには、直接使用する方がよいでしょう。COMMIT_ID

git branch --contains $COMMIT_ID

スクリプト可能なソリューション

次のステップは、現在のブランチを見つけることですgit 1.8.1

git symbolic-ref --short HEAD

そして組み合わせて

git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID

さらに優れたスクリプト可能なソリューション

しかし、上記のコマンドはtrueまたはfalseを返さず、コミットが現在のブランチにある場合は終了コード0を返し、そうでない場合は終了コード1を返す短縮バージョンがあります。

git merge-base --is-ancestor $COMMIT_ID HEAD

終了コードは良いですが、文字列truefalse回答が必要な場合はもう少し追加して、ifbashと組み合わせると次のようになります。

if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi

おすすめ記事