git - 所有缺少提交

时间:2013-03-15 06:38:21

标签: git

有人可以帮我理解这里发生的事情吗?

我从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选项应该显示所有提交。一旦我恢复到之前的提交,为什么最新的丢失?

感谢。

3 个答案:

答案 0 :(得分:5)

它缺失了,因为它不再被HEAD或分支引用 您已将(HEAD和master)重置为另一个提交,并使用git reset --hard

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

git log --all仅用于列出refs/中引用的提交(如标记,标题,...)

--all
  

假设refs/中的所有引用都在命令行中列为<commit>

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您应该接受VonC's answer。完成它:

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

幸运的是,git有一些神奇的撤销堆栈:git reflog。检查VonC的链接,找出如何取回它。

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

根据经验:在操纵历史之前,请确保您仍然有一些方法可以回到原来的位置。我的本地存储库与backuporigwip分支机构相混淆,我每个月都会清理这些分支机构。