我有一个文件在某处损坏了,我找到了它仍然修复的最后一点。
我想知道如何使用 git 来比较两个提交中的一个文件,或者这是否是最好的播放方式!!
要直接回答您的问题,假设您想比较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
$ git diff $start_commit..$end_commit -- path/to/file
例如,您会看到现在和两次提交之间的文件“file.c”的差异
$ git diff HEAD^^..HEAD -- file.c
我希望它对你有帮助