使用git比较两个提交中的一个文件

Mil*_*uzz 10 git debugging git-diff

我有一个文件已经破坏了某个地方,我找到了它仍然固定的最后一个点.

我想知道如何使用git,我可以比较两个提交中的一个文件,或者确实如果这是最好的方式来玩这个!

Mar*_*air 14

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

git diff master f4l4f3l -- src/toaster.c
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以通过以下方式查看该文件的所有更改:

git log -p -- src/toaster.c
Run Code Online (Sandbox Code Playgroud)

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

您将开始使用该命令进行二等分:

git bisect start
Run Code Online (Sandbox Code Playgroud)

然后,如果您当前的提交有错误,您只需:

git bisect bad
Run Code Online (Sandbox Code Playgroud)

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

git checkout a12b3d
git bisect good
Run Code Online (Sandbox Code Playgroud)

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

git bisect reset
Run Code Online (Sandbox Code Playgroud)