10

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

我想知道如何使用 git 来比较两个提交中的一个文件,或者这是否是最好的播放方式!!

4

2 回答 2

14

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

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您移至该提交。(这些签出都将使用“分离的 HEAD”,因此您的原始分支指针未更改。)然后您测试该提交,并根据它是否有错误来运行git bisect good或运行。git bisect bad修订之间的这种二进制搜索将迅速缩小到第一个错误提交,并报告它是哪一个。然后回到你正在做的事情,你可以这样做:

git bisect reset
于 2011-04-05T10:05:38.990 回答
3
$ git diff $start_commit..$end_commit -- path/to/file

例如,您会看到现在和两次提交之间的文件“file.c”的差异

$ git diff HEAD^^..HEAD -- file.c

我希望它对你有帮助

于 2011-04-05T11:04:43.847 回答