我想要一种方法来记录某些提交并提交路径参数,以便为每个提交显示这些路径上的差异(如果有),就像提供这些路径参数一样
git diff -- <path args>
。
git log -p <path args>
几乎实现了这一点。这是我希望它如何工作:
$ git log develop..mybranch -p mydir
1010101 my commit msg
(diff of files in mydir)
2323232 my other commit msg
(nothing here because the commit doesn't touch mydir)
问题是第二次提交不会显示,因为它没有触及
mydir
。
如何实现与
git log -p <path args>
相同的效果,但不跳过不触及给定路径的提交?
git log <path args>
自动将提交限制为那些接触 <path args>
的提交,并且无法列出其他提交。因此,没有简单的方法可以做你想做的事。可以通过列出所有提交、解析列表、查看每个提交并逐一处理提交来完成。像这样:
git rev-list develop..mybranch -- mydir |
while read sha1; do
if git show --format= --name-only | grep -Fq mydir; then
git show $sha1 # mydir found in the commit, show diff
else
git show -s $sha1 # mydir not found, don't show diff
fi
done
每次提交都有三个命令(
git show
、grep
、git show
)!上一个
大存储库会很慢,因此代码需要优化。