1. ホーム
  2. git

[解決済み] コミット ID が与えられた場合、現在のブランチにそのコミットが含まれているかどうかを判断する方法は?

2022-02-09 03:01:12

質問

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

どのように解決するのですか?

この結果を得るには、複数の方法があります。まず、素朴な方法として git log を使い、特定のコミットを検索します。 grep しかし、それは必ずしも正確ではありません。

git log | grep <commit_id>

を使用したほうがよいでしょう。 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

終了コードもいいのですが、文字列が欲しいので true または false を回答として追加し、その後に if bash からは次のようになります。

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