我有一个文件在某处损坏了,我找到了它仍然修复的最后一点。
我想知道如何使用 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 good
或 git bisect bad
取决于它是否有错误。修订之间的这种二进制搜索将迅速缩小到第一个错误的提交,并报告它是哪个。然后回到你正在做的事情,你可以这样做:
git bisect reset
关于git - 使用 git 比较来自两个提交的一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550137/