1

假设我对代码进行了多次更改,发现代码结果意外损坏。我想找出哪个更改破坏了结果。

如果它包含在某个提交中,那么很清楚如何找到错误的更改。

但是,如果它不是在单独的提交中,而是在历史重写期间进行的,如何找到错误的更改?

所以几天前我有 git 历史,比如:

commit00 ( contains no result.txt )
commit01 ( contains no result.txt )
...
commit10 ( contains version1 of result.txt )
commit11 ( contains version1 of result.txt )
...
commit20 ( contains version2 of result.txt )

results.txt 的所有版本都很好。然后我做了几次历史重写,比如:

<make changes>
git commit -m "changes to attach to commit0x"
git rebase -i commit0x
<use squash to attach changes to commit0x>

我不记得我以这种方式进行了哪些更改。但是现在我看到,当我去 commit10 或 commit20 时,我的程序给出了不同的结果(不是 version1 和 version2 结果)。

4

1 回答 1

1

你应该可以使用

git reflog

找到变基之前的提交并返回,假设变基是最近完成的或者日志没有被修剪。

例如,如果您的 git reflog 如下所示:

0fe7a44 HEAD@{0}: checkout: moving from b5e056e81aaaf9191dc88f30d54997318f585f5a to master
b5e056e HEAD@{1}: checkout: moving from master to b5e056e81
0fe7a44 HEAD@{2}: rebase -i (finish): returning to refs/heads/master
0fe7a44 HEAD@{3}: rebase -i (continue): add test file
b5e056e HEAD@{4}: rebase -i (start): checkout b5e056e^
69eb9b9 HEAD@{5}: commit: remove test file
b5e056e HEAD@{6}: commit: add test file
f1a96f7 HEAD@{7}: commit (initial): Initial commit.

您可以简单地检查您认为可能包含您的更改的 HEAD

git log HEAD@{6}

或像使用普通分支一样结帐/重置为该值。

...希望这会有所帮助。

资料来源:git-reflog 文档

于 2013-12-05T16:56:07.980 回答