我有一个文件,已经打破了某处下来的线,我已经找到了最后一点,它仍然是固定的。我想知道如何使用git比较两个提交中的一个文件,或者这是否是最好的方法!!
ruyhziif1#
为了直接回答你的问题,假设你想比较文件src/toaster.c在你当前的master和旧的提交f4l4f3l之间,你可以只做:
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的提交,那么你可以这样做:
a12b3d
git checkout a12b3d git bisect good
此时,git会计算出你需要测试的下一个提交,并执行git checkout命令将你移到那个提交。(这些 checkout 都将使用“detached HEAD,”所以原始分支指针保持不变。)然后测试该提交,并运行git bisect good或git bisect bad,这取决于它是否有bug。并报告是哪一个。然后返回到您正在做的事情,您可以执行以下操作:
git checkout
git bisect good
git bisect reset
j1dl9f462#
git diff $start_commit..$end_commit -- path/to/file
例如,您可以看到文件file.c在现在提交和两次提交之间的差异
file.c
git diff HEAD^^..HEAD -- file.c
2条答案
按热度按时间ruyhziif1#
为了直接回答你的问题,假设你想比较文件
src/toaster.c
在你当前的master
和旧的提交f4l4f3l
之间,你可以只做:或者,您可以使用以下命令查看对该文件的所有更改:
更一般地说,如果你想找到一个引入bug的提交,git有一个很棒的工具,叫做git bisect。如果你告诉这个工具一个工作提交和一个非工作提交,它会给予你一系列的提交来测试,使用折半搜索策略。
可以使用以下命令开始二等分:
如果你的当前提交有bug,你只需要:
接下来,你需要找到一个没有bug的旧提交,它可能有一个特定的标签,或者你只需要选择一个几个月前的提交,假设一个名为
a12b3d
的提交,那么你可以这样做:此时,git会计算出你需要测试的下一个提交,并执行
git checkout
命令将你移到那个提交。(这些 checkout 都将使用“detached HEAD,”所以原始分支指针保持不变。)然后测试该提交,并运行git bisect good
或git bisect bad
,这取决于它是否有bug。并报告是哪一个。然后返回到您正在做的事情,您可以执行以下操作:j1dl9f462#
例如,您可以看到文件
file.c
在现在提交和两次提交之间的差异