带有作者过滤器的git diff

带有作者过滤器的git diff,git,git-diff,Git,Git Diff,我有一系列不同作者的提交,我希望看到两次提交之间的git-dff输出,但只考虑其中一位作者的提交,类似于,类似于--git日志中的作者 我感兴趣的是最终的摘要差异,而不是个人提交的差异 有没有git的窍门?也许你可以使用 将显示如下内容: fe6e0ee的作者是Junio C Hamano,23小时前 标题是>>t4119:test autocomputing-p for traditional diff input.这里的问题是,在一般情况下不能这样做。假设Alice更改了一个特定的文件,然后

我有一系列不同作者的提交,我希望看到两次提交之间的
git-dff
输出,但只考虑其中一位作者的提交,类似于,类似于--git日志中的作者

我感兴趣的是最终的摘要差异,而不是个人提交的差异


有没有git的窍门?

也许你可以使用

将显示如下内容:

fe6e0ee的作者是Junio C Hamano,23小时前
标题是>>t4119:test autocomputing-p for traditional diff input.这里的问题是,在一般情况下不能这样做。假设Alice更改了一个特定的文件,然后Bob更改了它(包括Alice更改的部分),最后Alice再次更改它。如何将Alice的两个微分组合成一个微分?如果您将它们作为两个补丁,那么如果不首先应用Bob的补丁,第二个补丁将无法应用!但是您也不能简单地将最终状态与原始状态区分开来,因为这将包括Bob的更改

如果您更喜欢使用git操作的示例,这就像执行交互式重基,只是删除随机提交。当然,有时它会工作,但有时它会完全失败,因为其中一个提交依赖于您执行的其中一个提交

所以,我知道你说过你不想要个人提交差异,但这就是你真正希望的:

git log -p --author=Alice
或者,如果你真的非常想要一个diff,这会让你得到它,但只有在没有补丁交互的情况下,就像我上面提到的:

git checkout -b temp first_commit
git log --reverse --pretty=%H --author=Alice first_commit..second_commit |
while read commit; do
    git cherry-pick $commit || exit
done
# or if you have a new version of git, cherry-pick works with multiple arguments:
# git cherry-pick $(git log --reverse --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp

这确实需要在工作树中进行操作,因为绝对不能保证一旦跳过提交,就会应用任何补丁。您只需试试看。

这不完全是一个副本,但您可以在这里找到一些有用的信息:排除被请求作者从未接触过的文件似乎并不难处理。如果补丁必须在后台累积以生成此问题所需的摘要,只需将所有补丁包含在请求作者的第一个补丁之后的文件中即可。
The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
git log -p --author=Alice
git checkout -b temp first_commit
git log --reverse --pretty=%H --author=Alice first_commit..second_commit |
while read commit; do
    git cherry-pick $commit || exit
done
# or if you have a new version of git, cherry-pick works with multiple arguments:
# git cherry-pick $(git log --reverse --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp