我在许多已删除的提交中都有一个已删除的提交,我尝试恢复。我发现了fsck --lost-found命令。太好了!
问题是我有超过一百个悬挂的提交语句,信息很少。
dangling commit 654857f5e8418c4031e1d8411579906c528da562
dangling commit 74499bd482d688c1416d5091b391d82a438855a9
dangling commit 124ed7cd4465434865577c82757732df62febb59
dangling commit 92573bf4595be6f80f22eba94548dbc88d8796fc
dangling commit 125b0ffa3f0db71f23fda65d6adb2f9941748cc0
dangling commit ba5b1f8d6d920900abc88bd725d44ba86c8c772f
dangling blob e760d751ae4e3dab9beed0996e683c0f291eb4cc
如果它可以抛出提交名称与sha将是一个很大的帮助。实际上,我必须逐个运行git show,以找到正确的提交。有更简单的方法吗?
答案 0 :(得分:13)
这适用于Linux和Mac:
playerResource.name
我不确定您在Windows git shell中是否有playerResource.firstName + playerResource.lastName
和git fsck --lost-found | grep "dangling commit" | cut -d" " -f 3 | xargs -I "{}" git --no-pager show --stat "{}"
。
说明:
grep
找到数据xargs
将其简化为仅悬空提交git fsck
仅保留提交ID grep
使用ID cut
[编辑] 修复了有多个悬空提交的情况。
答案 1 :(得分:6)
这不是用git fsck解决这个问题的答案,而是可能在这种情况下有用的东西。
git reflog
输出存储库中过去HEAD的列表。例如,如果从分支主机切换到分支机构,则会生成一个带有主分支HEAD的reflog条目。
因此,如果提交在某个时间是分支的一部分,那么您可以使用git reflog
,git log
和一些手动工作的组合来恢复它。
有几种情况:
点击git reflog
然后滚动浏览。如果它显示您正在寻找的提交消息,那太好了!复制提交ID并将其用于您想要的任何内容(例如git cherry-pick
,或使用git branch save-my-commit commitid
将其保存到分支中。
提交不是直接在git reflog
中,但是您会看到在要查找的提交之后(以及在删除之前)提交的提交。在这种情况下,请使用您在git reflog
中找到的提交后的提交ID,并将其作为参数传递给git log
:git log commitid
。滚动输出,看看是否可以找到您的提交。使用提交ID,如案例1所示。
提交不直接在git reflog
中,并且在删除提交之后 之前 < / em>删除它。
这是最繁琐的案例,在这种情况下,可能更容易通过此处的其他流程。我不确定它们实际上是否会被列为悬空提交,因此如果您使用git fsck
找不到提交,则值得一试。
查看git reflog
中的所有条目,并使用提交ID作为git log
的参数,如案例2中所述。尝试查找您之后的提交。
答案 2 :(得分:0)
或更简单:
git fsck --lost-found | sed 's/\(dangling commit \|dangling blob \)//' | xargs -t -n1 git show