我正在尝试解析 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
第一个分支,其输出git branch --contains $i
包含不以*
指定“当前分支”的字符开头的行。我应该阅读哪些 Bash 文档?
请注意,我知道这个问题的其他解决方案。但是,我计划添加其他答案未考虑到的内容。此外,这也是我提高 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
如果不是当前分支,则打印提交及其分支。