有人可以帮我理解这里发生的事情吗?
我从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
选项应该显示所有提交。一旦我恢复到之前的提交,为什么最新的丢失?
感谢。
答案 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
时要小心,此命令可以破坏提交。
根据经验:在操纵历史之前,请确保您仍然有一些方法可以回到原来的位置。我的本地存储库与backup
,orig
和wip
分支机构相混淆,我每个月都会清理这些分支机构。