将分支与master合并,然后列出所有文件

时间:2009-12-26 19:29:24

标签: git

假设我将一个分支合并到我的主分支,工作了一段时间,然后意识到合并后引入了一些错误。

如何查看合并中受影响的文件列表,然后逐个查看它们的差异?

2 个答案:

答案 0 :(得分:2)

git bisect,正如另一个答案中所建议的那样,对于跟踪哪个提交引入了一个错误肯定非常有用,并且很可能很快找到你的问题。但是,合并提交可能是错误的,但无论如何,对您的问题的直接回答可能会很有趣。

首先,您应该找到您感兴趣的合并提交的对象名称(即SHA1 sum),可能是git log --graph --pretty=onelinegitk - 让我们说这个合并提交的对象名称以这个例子是d8fa

在git中,提交是根据树的完整快照定义的,而不是对树的更改,对于与两个(或更多)父项的合并与任何其他提交一样,这也是如此。因此,对于合并提交所改变的内容,可能最明显的问题是“这个合并的每个父级的变化是什么?”您可以将第一个父级称为d8fa^1,将第二个父级称为d8fa^2,这样您就可以看到哪些文件已更改为:

git diff --stat d8fa^1 d8fa

......和:

git diff --stat d8fa^2 d8fa

或者你可以一起看到这些:

git whatchanged -1 -m --stat d8fa

(您可以将--stat更改为-p以查看完整差异,而不是使用git whatchanged查看diffstat,或者仅使用--stat忽略git diff如果你只是想看一个文件对一个父文件的差异,你可以做git diff d8fa^1 d8fa -- README.txt,例如。)

在大多数情况下,这个输出可能不是很有趣 - 这些主要是在一个父母而不是另一个父母中引入的变化。但是,它还值得检查git show d8fa的输出 - 如果合并引入的更改似乎不在父系统中,这只会显示补丁作为其输出的一部分,有时称为{ {3}}

答案 1 :(得分:0)

最好的办法是将错误描述为测试,然后使用git bisect告诉您哪个更改引入了错误。如果你不使用自动化测试,它会更难(不会自动化),但会告诉你导致这个bug的具体变化。

假设你的项目中的人善于沟通小的(做一件事)和描述性(描述那件事情是好的)的变化,那么确切地弄清楚什么是破坏的东西所需的努力是微不足道的。