4

有人可以帮我理解这里发生了什么吗?

我从 开始git log --oneline,它吐出:

4df9421 (HEAD, master) moved some aliases around
d3810e4 (origin/master) some terminal color changes
a7182d3 git colors, ignores, etc.
995fe8c added gitconfig, moved some personal stuff out of the public repo
8a100b7 misc unimportant updates
55d2c08 added a fix to "open with", refactored
7ec7d83 Removed some vim colors; added a couple searching aliases
330c7fc Minor updates
44e80a1 Added vim files
48537c6 Fixed some formatting problems
14933a2 Initial Commit

然后我git reset --hard 330c7fc将日志返回到:

330c7fc (HEAD, master) Minor updates
44e80a1 Added vim files
48537c6 Fixed some formatting problems
14933a2 Initial Commit

到目前为止一切顺利,但是(现在我已经重置)当我这样做时git log --oneline --all

 d3810e4 (origin/master) some terminal color changes
 a7182d3 git colors, ignores, etc.
 995fe8c added gitconfig, moved some personal stuff out of the public repo
 8a100b7 misc unimportant updates
 55d2c08 added a fix to "open with", refactored
 7ec7d83 Removed some vim colors; added a couple searching aliases
 330c7fc (HEAD, master) Minor updates
 44e80a1 Added vim files
 48537c6 Fixed some formatting problems
 14933a2 Initial Commit

请注意,此列表中缺少最新条目“4df9421 移动了一些别名”。

我的理解是该--all选项应该显示所有提交。为什么一旦我恢复到较早的提交,最新的会丢失?

谢谢。

4

3 回答 3

6

它丢失了,因为 HEAD 或分支不再引用它。
您已使用git reset --hard.

只会git reflog向您显示最近的提交。

git log --all仅用于列出引用的提交refs/(如标签、头等)

--all

假装所有 refsrefs/都在命令行上列为<commit>.

于 2013-03-15T06:56:00.873 回答
2

--all选项不告诉显示git log所有提交。它要求所有refs的日志,基本上是您的分支和标签。重置命令从 中删除了该提交master,这是包含它的唯一 ref,因此该提交现在无法访问。

于 2013-03-15T06:56:05.237 回答
0

您应该接受VonC 的回答。要完成它:

“丢失的提交”未推送到服务器,或保存在另一个分支中。您git reset --hard因此删除了它。

幸运的是,git 有某种神奇的 undo stack : git reflog。检查 VonC 的链接以了解如何取回它。

使用时要小心git reset,此命令可能会破坏提交。

作为一个经验法则:在你操纵你的历史之前,确保你仍然有办法回到你原来的位置。我的本地存储库被backup,origwip分支破坏了,我每个月左右都会清理它们。

于 2013-03-15T10:22:19.333 回答