我有不同作者的一系列提交,我希望看到git dff两个提交之间的输出,但只考虑其中一个作者的提交,比如像git log中的--author.
我对最终的摘要差异感兴趣,而不是个别提交的差异.
那有一个git技巧吗?
Cas*_*bel 27
这里的问题是你不能在一般情况下这样做.假设Alice更改了特定文件,然后Bob更改了它 - 包括Alice更改的部分 - 最后Alice再次更改它.你如何将Alice的两个差异组合成一个差异?如果你把它们当作两个补丁,那么第二个补丁根本不适用而不首先应用Bob的补丁!但是你也不能简单地将最终状态与原始状态区分开来,因为这将包括鲍勃的变化.
如果你更喜欢使用git操作的例子,这就像做一个交互式rebase,只是删除随机提交.当然,有时它会起作用,但有时它会完全失败,因为其中一个提交取决于你取出的那个之一.
所以,我知道你说你不想要个人提交差异,但这是你真正希望的:
git log -p --author=Alice
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的非常渴望一个差异,这将为你得到它,但只有在没有像我上面提到的补丁交互的情况下:
git checkout -b temp first_commit
git log --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 --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp
Run Code Online (Sandbox Code Playgroud)
这确实需要在工作树中进行操作,因为一旦跳过提交,绝对不能保证任何补丁都会应用.你只需要试试看.