在 git 中,我如何从分支头返回并找到包含(不一定涉及)特定文件的每个提交?“touches”版本可以这样写:
git log mybranch -- filename | grep "^commit" | awk '{print $2}'
但是,对于我正在尝试做的事情,即构建包含特定文件 (a pom.xml
) 的所有修订,这还不够。有任何想法吗?
在 git 中,我如何从分支头返回并找到包含(不一定涉及)特定文件的每个提交?“touches”版本可以这样写:
git log mybranch -- filename | grep "^commit" | awk '{print $2}'
但是,对于我正在尝试做的事情,即构建包含特定文件 (a pom.xml
) 的所有修订,这还不够。有任何想法吗?
作为另一种方法,这似乎不需要检查不同的修订版就可以工作:
for REV in `git rev-list <mybranch>`
do
HASPOM=`git ls-tree --name-only -r $REV | grep '<filename>'`
echo "$REV $HASPOM" | awk 'NF==2{print $1}{}'
done
这是一个快速而肮脏的 bash 解决方案。它获取从任何分支可访问的所有提交 ID 的列表,遍历它们,检查每个提交。如果在签出提交后文件存在,它会打印出该提交 ID。
这将通过git checkout -f
. 在运行之前存储您的更改。
for x in `git log --all | grep -o "[a-z0-9]\{40\}"`
do
git checkout -f $x &> /dev/null
if [ -e "config/pom.xml" ]
then
echo $x
fi
done