我有一系列不同作者的提交,我希望在两次提交之间看到一个 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/