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

0ve6wy6x  于 2022-11-14  发布在  Git
关注(0)|答案(2)|浏览(120)

我有一个文件,已经打破了某处下来的线,我已经找到了最后一点,它仍然是固定的。
我想知道如何使用git比较两个提交中的一个文件,或者这是否是最好的方法!!

ruyhziif

ruyhziif1#

为了直接回答你的问题,假设你想比较文件src/toaster.c在你当前的master和旧的提交f4l4f3l之间,你可以只做:

git diff master f4l4f3l -- src/toaster.c

或者,您可以使用以下命令查看对该文件的所有更改:

git log -p -- src/toaster.c

更一般地说,如果你想找到一个引入bug的提交,git有一个很棒的工具,叫做git bisect。如果你告诉这个工具一个工作提交和一个非工作提交,它会给予你一系列的提交来测试,使用折半搜索策略。
可以使用以下命令开始二等分:

git bisect start

如果你的当前提交有bug,你只需要:

git bisect bad

接下来,你需要找到一个没有bug的旧提交,它可能有一个特定的标签,或者你只需要选择一个几个月前的提交,假设一个名为a12b3d的提交,那么你可以这样做:

git checkout a12b3d
git bisect good

此时,git会计算出你需要测试的下一个提交,并执行git checkout命令将你移到那个提交。(这些 checkout 都将使用“detached HEAD,”所以原始分支指针保持不变。)然后测试该提交,并运行git bisect goodgit bisect bad,这取决于它是否有bug。并报告是哪一个。然后返回到您正在做的事情,您可以执行以下操作:

git bisect reset
j1dl9f46

j1dl9f462#

git diff $start_commit..$end_commit -- path/to/file

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

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

相关问题