git - 使用 git 比较来自两个提交的一个文件

标签 git debugging git-diff

我有一个文件在某处损坏了,我找到了它仍然修复的最后一点。

我想知道如何使用 git 比较来自两个提交的一个文件,或者这是否是玩这个游戏的最佳方式!!

最佳答案

为了直接回答你的问题,假设你想比较当前 master 和旧提交 f4l4f3l 之间的文件 src/toaster.c >,你可以这样做:

git diff master f4l4f3l -- src/toaster.c

作为替代方案,您可以使用以下方法查看对该文件的所有更改:

git log -p -- src/toaster.c

但是,更一般地说,如果您试图找到引入特定错误的提交,git 有一个很棒的工具,称为 git bisect。 .如果您告诉该工具一个工作和非工作提交,它会使用二进制搜索策略为您提供一系列提交以在这些提交之间进行测试。

您将使用以下命令开始平分:

git bisect start

然后,如果您当前的提交有错误,您只需执行以下操作:

git bisect bad

接下来,您需要找到一个肯定没有错误的旧提交。这可能有一个特定的标签,或者您可能只是选择几个月前的提交。假设一个叫做 a12b3d,那么你会这样做:

git checkout a12b3d
git bisect good

此时,git 将计算出您需要测试的下一个提交,并执行 git checkout 将您移至该提交。 (这些 checkout 都将使用“分离的 HEAD”,因此您的原始分支指针未更改。)然后您测试该提交,并运行 git bisect goodgit bisect bad取决于它是否有错误。修订之间的这种二进制搜索将迅速缩小到第一个错误的提交,并报告它是哪个。然后回到你正在做的事情,你可以这样做:

git bisect reset

关于git - 使用 git 比较来自两个提交的一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550137/

相关文章:

IIS 的 wwwroot 中的 Git 工作树

linux - 从一个分支克隆三个其他分支

android - Gradle 发布版本仍然可以调试?

git - 基于 Emacs 的 Git 差异工具?

git - 如何让 git 在本地使用图形差异并通过 ssh 使用文本差异?

git - 如何在 gitk 中设置 diff 选项(--compaction-heuristic)

git - Trac 票证有文件引用

git - 如何为所有子域设置 Git 配置选项?

r - 从 do.call 内部调用时,R/Rstudio 中的调试浏览器崩溃

c - 带有调试信息的二进制文件的 objdump 产生损坏的输出