Git的。在重写历史记录期间创建的代码中查找错误

时间:2013-12-05 16:34:54

标签: git rewriting

假设我在代码中进行了一些更改,并发现代码结果意外地已损坏。我想找出哪个更改破坏了结果。

如果在某些提交中包含错误的更改,很明显如何找到错误的更改。

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

前几天我的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结果)。

1 个答案:

答案 0 :(得分:1)

你应该可以使用

git reflog

在rebase之前找到提交并返回到那个,假设最近完成了rebase或者没有修剪日志。

例如,如果您的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 docs