解析 bash 循环的输出行

解析 bash 循环的输出行

我正在尝试解析 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

如果不是当前分支,则打印提交及其分支。

相关内容