假设我在代码中进行了一些更改,并发现代码结果意外地已损坏。我想找出哪个更改破坏了结果。
如果在某些提交中包含错误的更改,很明显如何找到错误的更改。
但是,如果它不在单独的提交中,但是如果它是在历史重写期间制作的,那么如何找到错误的更改?
前几天我的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结果)。
答案 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.
您可以使用
检查您认为可能包含更改的HEADgit log HEAD@{6}
或结帐/重置为正常分支。
...希望这会有所帮助。
资料来源:git-reflog docs