我有不同作者的一系列提交,我希望在2个提交之间看到git dff
输出,但只考虑其中一个作者的提交,比如像git log中的--author
我对最终的摘要差异感兴趣,而不是对各个提交的差异感兴趣。
是否有一个git技巧?
答案 0 :(得分:26)
这里的问题是在一般情况下你不能这样做。假设Alice更改了特定文件,然后Bob更改了它 - 包括Alice更改的部分 - 最后Alice再次更改它。你如何将Alice的两个差异组合成一个差异?如果你把它们当作两个补丁,那么第二个补丁根本不适用而不首先应用Bob的补丁!但是你也不能简单地将最终状态与原始状态区分开来,因为这将包括鲍勃的变化。
如果你更喜欢使用git操作的例子,这就像做一个交互式rebase,只是删除随机提交。当然,有时它会起作用,但有时候它会完全失败,因为其中一个提交取决于你取出的那些之一。
所以,我知道你说你不想要个人提交差异,但这是你真正希望的:
git log -p --author=Alice
或者,如果你真的非常渴望一个单独的差异,这将为你提供,但只有在没有像我上面提到的补丁交互的情况下:
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
这确实需要工作树中的操作,因为绝对不能保证一旦跳过提交就会应用任何补丁。你只需要试试看。
答案 1 :(得分:1)
可能您可以使用diff-tree
的格式设置功能format:<string>
format:<string>
格式允许您指定要显示的信息 它的工作方式有点像printf
格式,但值得注意的是,您使用%n
代替\n
获取换行符。,例如,
format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"
将显示如下内容:
The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
然后你可以向相关作者致意。