我的git log
看起来像这样:
commit 5757cbb4380322121747c78040aad08540b3c707
Author: Fabio M. Costa <email@email.com>
Date: Tue Apr 11 11:26:29 2017 -0700
comment 1
commit 5431794f78df3cba720bdfa8331db0c0f75a80fd
Author: Fabio M. Costa <email@email.com>
Date: Tue Apr 11 11:23:41 2017 -0700
comment 2
commit ad4ee4efb35e74552b4dc617d92b5ae99fdc1f3c
Author: Other Author <otherguy@email.com>
Date: Wed Apr 12 09:07:32 2017 -0700
...
我想展示我所有差异之间的差异,从HEAD开始,然后停在我作为作者的最后一个。
对于此示例,我可以通过运行git diff HEAD~2..HEAD
手动完成此操作,但我想知道如何根据作者自动执行此操作。
答案 0 :(得分:0)
我不知道如何在一行中完成,但这是一个简单的bash脚本:
#!/usr/bin/env bash
email="$1"
upto="$(awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD) | grep $email | head -n 1 | awk '{ print $1 }')"
from="$(awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD~$upto) | grep -v $email | head -n 1 | awk '{ print $1 }')"
git log HEAD~$from..HEAD~$upto
email
首先,列出HEAD
只能打印作者电子邮件时可以访问的所有提交:
git log --pretty=format:'%ae' HEAD
然后,将行号(从0
开始)添加到从上面命令返回的每个提交中:
awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD)
然后,只选择给定email
的提交:
awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD) | grep $email
然后,获得给定email
的第一次提交:
awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD) | grep $email | head -n 1
然后,获取行号,它表示来自HEAD
的提交次数:
awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD) | grep $email | head -n 1 | awk '{ print $1 }'
最后,将其存储到$upto
变量中,因为它是范围的顶部:
upto="$(awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD) | grep $email | head -n 1 | awk '{ print $1 }')"
email
的提交,它是在第一次提交之后该命令类似于两个不同之处:
HEAD~$from
。email
的第一个提交。因此,突出显示差异的命令是:
from="$(awk '{print NR-1 " " $0}' <(git log --pretty=format:'%ae' HEAD~$upto) | grep -v $email | head -n 1 | awk '{ print $1 }')"
^^^^^^^^^^ ^^
最后,打印从第一次提交到非给定email
的提交日志到来自给定email
的第一次提交:
git log HEAD~$from..HEAD~$upto
修改尽管如评论所示,使用分支并执行git log master..HEAD
比此解决方案更受欢迎。