带有作者过滤器的 git diff

标签 git git-diff

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

我对最终的总结差异感兴趣,而不是单个提交的差异。

有什么 git 技巧吗?

最佳答案

这里的问题是在一般情况下你不能这样做。假设爱丽丝更改了一个特定的文件,然后鲍勃更改了它——包括爱丽丝更改的部分——最后爱丽丝再次更改它。如何将爱丽丝的两个差异 merge 为一个差异?如果您将它们作为两个补丁,则如果没有首先应用 Bob 的补丁,则第二个补丁根本不会应用!但您也不能简单地将最终状态与原始状态进行比较,因为这将包括 Bob 的更改。

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

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

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

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

关于带有作者过滤器的 git diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509419/

相关文章:

git - 远程和本地存储库之间的“git diff”

git rebase -i with squash 无法分离 HEAD

linux - git diff --numstat 按字符串而不是文件路径

Git:从本地仓库推送的文件未显示在远程 git 仓库中

git - 如何在 Git 中 check out 远程分支?

git 差异 : what is the difference between --cached and --staged

git - 如何将整个 git repo 输出到单个文件?

git:所有更改文件的列表,包括子模块中的文件

git - 通过curl添加SSH key : Fingerprint cannot be generated

git - 推送到 CI 服务器中的 GitLab 存储库(部署 key )