如何查看作者的所有代码更改?

时间:2017-04-18 04:12:18

标签: git filter version-control

例如,我有一个像这样的项目

[ID]--[Date]-------[Commit message]-------[Author]

[5]--[Today]-------[Update Feature A]-----[Michael]

[4]--[Yesterday]---[Add Feature Y]--------[Tom]

[3]--[1 day ago]---[Add Feature X]--------[Dick]

[2]--[2 days ago]--[Add feature A]--------[Michael]

[1]--[3 days ago]--[First commit]---------[Michael]

我正在使用Git Extensions,我无法找到一种方法来查看作者Michael的差异。

例如,我只想看到功能A的更改代码,当我单击提交1和2时,我可以看到这些提交之间的差异。但是当我过滤作者[迈克尔]并点击1和5时,我希望只能看到作者[迈克尔]的所有差异 - 但[汤姆]和[迪克]也有差异。

有什么方法可以查看作者的所有代码更改?我不关心我使用的工具(如SourceTree,Git Extensions,...)

3 个答案:

答案 0 :(得分:1)

您可以使用git log --author=<pattern>查看特定作者的所有提交,其中模式是正则表达式。

但是你似乎想要在仅由某个作者完成的更改提交之间进行差异,忽略之间的提交。这违背了Git的本性。从概念上讲,Git提交不是差异。而是每次提交都是提交时所有文件状态的完整快照。您不能在1和5之间取差异,而忽略2,3和4,因为5是1,2,3和4的顶点。

你可以cherry pick 1和5进入临时分支(并处理所有冲突),但我相信你正试图解决错误的问题。你有一个XY Problem。你真正想要的是看到&#34;功能A&#34;的所有变化。在这种情况下,他们碰巧由一位作者完成,但事实并非如此。

相反,您想要的是将您的功能组织到各个分支中,恰当地命名为&#34;功能分支&#34;或&#34;主题分支&#34;。每个功能的一个分支。在功能 完成 之前,分支不会合并,然后将其删除。这是允许多人处理多项功能的基本方式,而不会过早地分享未完成的工作并相互进入。

然后,当您想要查看功能A的更改时,您可以查看功能A的分支,无论是谁处理过该功能。

您可以阅读有关Branching Workflows in the Pro Git book的更多信息。

答案 1 :(得分:0)

试试这个:

git log --author="author_name"

答案 2 :(得分:0)

老问题了,但是为了那些寻找它的人-这是解决问题的方法。

  1. 获取请求的用户(git log -author | grep)的所有提交
  2. 从输出(awk -F)中提取提交哈希值
  3. 在这些哈希(git show)上运行git show

这是完整的命令:

git show `git log --author=bob | grep ^commit | awk -F ' ' '{print $2}'`