2009-12-26 65 views
1

说我合并了一个分支到我的主分支,工作了一段时间,然后意识到合并后引入了一些错误。合并分支与主,然后列出所有文件

我怎样才能看到合并中受影响的文件列表,然后逐个看到它们的差异?

+1

也许这个问题的答案可以帮助你? http://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-for-a-commit-in-git – Makis 2009-12-26 20:49:43

回答

2

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

首先,你应该找到对象名称合并的(即SHA1总和)提交你有兴趣,也许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看到完整的diff,而不是diffstat的wi第git whatchanged,或者只是将--statgit diff省略。如果你只是想看到一个文件的差异对一个家长,你可以做git diff d8fa^1 d8fa -- README.txt,例如)

在大多数情况下,这种输出可能不是很有趣 - 这将主要是它是在一个父引入的更改但不是其他。但是,检查git show d8fa的输出也是值得的 - 如果合并引入的变化似乎不在父代中,有时称为evil merge,这将仅显示补丁作为其输出的一部分。

0

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

假设项目中的人善于沟通变化很小(是一件事)和描述性(描述哪一件事情是好的),那么确定究竟是什么东西的努力是微不足道的。

相关问题