【发布时间】:2017-04-11 09:36:08
【问题描述】:
在我们团队的 git 上执行了给定的合并提交,删除了一个文件,我们只能在 tortoisegit 日志中看到:
git 命令行的日志不会产生删除( git log --stat 的输出):
试图找出导致删除的实际提交在 git gui 上没有结果:
此日志显示没有文件删除。
所以问题是这样的:我们如何使用 git 命令行和 TortoiseGit 来完全追踪这个“删除”并证明是什么提交(合并与否)删除了文件?
非常感谢。
编辑:使用 torek 的反馈,使用 git log -c --stat 和 git log --cc --stat 仍然没有显示哪个提交确实“删除”了文件,但它确实显示了有关合并提交的更多信息:
我已经在日志中搜索了受影响的文件,并且只获得了其他提交的添加和更改,但是使用 git log -m --numstat 我确实得到了这个:
显然,该文件的行存在于父提交 07a2fb4 中,但不存在于父提交 d0941f2 中。
如何判断合并提交中特定文件的提交“胜出”,以便检测这些丢失的文件?
【问题讨论】:
-
你没有显示你运行的命令行
git log命令(精确的选项,包括任何路径名限制器,很重要)但默认情况下git log不显示 任何关于合并提交的信息。添加-c或--cc(注意cc两个破折号,c一个破折号)以获得组合差异,或-m获得per-parent diffs(似乎 TortoiseGit 正在这样做)。如果使用路径选择器,请注意这会打开历史简化。 -
您好,感谢您的反馈。使用 -c 和 --cc 我确实获得了更多信息,但只是对应该在 git repo 中的文件进行了添加和修改,实际上它不是,这引起了很多混乱。我也会根据您的反馈更新问题。
-
组合的差异故意抑制在“正常”合并中通常是多余的信息。如果合并完成错误,这可能会隐藏一些细节。使用
-m将合并拆分为每个父操作,将合并结果单独与每个父提交进行比较;该信息与您在任何差异中获得的信息一样完整,但是笨重且难以解释。另见stackoverflow.com/q/43138569/1256452 -
谢谢,我一定会调查的。所以检测将是一个手动程序,对吗?您必须知道必须存在哪些文件才能确定合并是否做得不好。
-
差不多,是的。不过有一种更快的方法,如果您有某种可以识别“好树”与“坏树”的自动化测试:使用
git bisect。设置这一切需要一些工作——尤其是编写测试(“文件不存在”可能还不够,因为可能有一些提交不应该拥有它)——但在那之后,如果你test 是可靠的,Git 会自动找到出错的提交。
标签: git merge tortoisegit