Bashループで実行されるコマンドの出力を解析しようとしています。例は次のとおりです。
$ for i in `git log --format='%H'`; do echo $i ; git branch --contains $i; done | head -n 8
5f11ce7da2f9a4c4899dc2e47b02c2d936d0468e
* foobar
e1c3f6fabd45715b527a083bc797e9723c57ac89
dev1
* foobar
7053e08775d2c1da7480a988a235e445799cbca5
dev1
* foobar
このコマンドはgit log --format='%H'
単に各GitコミットのコミットIDを出力します。このコマンドは、git branch --contains $i
コミットを含むGitブランチを印刷します。
"foobar"ブランチにない最新のgitコミットを見つけようとしています。 「現在の分岐」を指定する文字で始まらない行が、出力に含まれる最初の$i
分岐をエコーしたいと思います。どのBash文書を読むべきですか?git branch --contains $i
*
知っておいてくださいこの問題に対するその他の解決策。ただし、他の回答で考慮されていない内容を追加する予定です。また、これは Bash スクリプティング技術を改善する方法です。
答え1
このようなものがあなたが望むものかもしれません。
for i in $(git log --format='%H'); do
branch="$(git branch --contains $i|awk 'NR==1{print $1}')"
[ "$branch" != "*" ] && echo "commit '$i' is in branch '$branch'"
done
現在のブランチでない場合は、コミットとそのブランチを印刷します。