列出他人提交的提交记录(即不是我提交的)?

5
有没有一种标准的方法可以列出git仓库中其他人(即非我)所做的所有提交记录?
我尝试使用“git log --not --author=username”,但似乎“--not”只适用于修订版本。 “git log”的man页面似乎没有提供反转谓词(如“--author”)的方法。
(我在工作中使用“git-svn”,想要一种方式来查看同事自上次运行“git svn rebase”以来更改了什么,或者更普遍地说,在过去的“X”天里发生了什么。通常我知道我改变了什么,我只是想看看哪些文件被其他人触及/读取它们的提交日志消息/也许审查有趣的补丁/等等。)
编辑:精确定义范围,我实际上更感兴趣的是“最近”而不是“自上次'git svn rebase'以来”。

看起来你应该能够避免这种作者搜索。我不使用git-svn,但是git svn rebase被记录为获取然后重新设置基础,所以它肯定会更新refs/remotes/git-svn中的引用。你不能只做一些像git log master@{1}..git-svn这样的事情吗? - Cascabel
我可以轻松地通过 git log git-svn.. 看到我的“未推送”补丁,反之亦然,但我真正想要的是能够看到其他人最近几天所做的更改。作者搜索似乎是唯一的方法,因为像提交对象/块等都会被 git svn rebase 重写,就像你所说的那样。 - RobM
那么,git log git-svn或者git log master@{1}..git-svn有什么问题呢?历史记录不应该看起来像这样吗:-o-o-o(git-svn)-o-o-o(master) - Cascabel
@Jefromi:没问题,除了我想要过滤掉自己的提交。 - RobM
我只是不明白为什么从svn中新获取的提交会包含你的任何提交。只有在“最近”而不是检查你正在获取的内容时才有意义,因为你进行了编辑。 - Cascabel
2个回答

5

这不是一个真正的解决方案,但是可以利用--author使用的正则表达式匹配来制造一些东西。如果你的名字是Jefromi:

git log --author='^[^J]\|J[^e]\|Je[^f]' # and so on

这可能不是很好,但对于您的目的而言可能足够了。(如果没有其他人的名字以与您相同的字母开头,则更短。)

至于最近,除了使用分支来缩小范围(start..end^stop1 ^stop2 branch等),您还可以使用--since=<date>选项。


不错的主意!您知道 git log 使用哪种正则表达式吗? - RobM
@RobM:Git对待正则表达式基本上像grep一样 - 所有使用它的命令默认都是基本的正则表达式,然后有-i(忽略大小写)、-E(扩展正则表达式)和-F(固定字符串)选项。 - Cascabel

2
git log --perl-regexp --author='^(?!RobM)'

解释:使用^将正则表达式锚定到字符串的开头;然后使用前瞻(?!whatever)来禁止在该位置之后出现您的姓名。这样,您甚至可以排除多个作者的提交:

git log --perl-regexp --author='^(?!jack|jill)'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接