我有一个文件已经破坏了某个地方,我找到了它仍然固定的最后一个点。
我想知道如何使用git,我可以比较两个提交中的一个文件,或者确实如果这是最好的方式来玩这个!!
答案 0 :(得分: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
答案 1 :(得分:3)
$ git diff $start_commit..$end_commit -- path/to/file
例如,您可以看到现在和两次提交之间文件“file.c”的区别
$ git diff HEAD^^..HEAD -- file.c
我希望它对你有帮助