我有一个已删除的提交,在许多已删除的提交中,我正在尝试恢复.我发现了fsck --lost-found命令.大!
问题是我有超过一百个悬空提交语句,信息很少.
dangling commit 654857f5e8418c4031e1d8411579906c528da562
dangling commit 74499bd482d688c1416d5091b391d82a438855a9
dangling commit 124ed7cd4465434865577c82757732df62febb59
dangling commit 92573bf4595be6f80f22eba94548dbc88d8796fc
dangling commit 125b0ffa3f0db71f23fda65d6adb2f9941748cc0
dangling commit ba5b1f8d6d920900abc88bd725d44ba86c8c772f
dangling blob e760d751ae4e3dab9beed0996e683c0f291eb4cc
Run Code Online (Sandbox Code Playgroud)
如果它可以抛出提交名称与sha将是一个很大的帮助.实际上,我必须逐个运行git show,以找到正确的提交.有没有更简单的方法?
Aar*_*lla 15
这适用于Linux和Mac:
git fsck --lost-found | grep "dangling commit" | \
cut -d" " -f 3 | xargs -I "{}" git --no-pager show --stat "{}"
Run Code Online (Sandbox Code Playgroud)
我不知道你是否有git log与grep在Windows的git壳.
说明:
xargs 找到数据git fsck 减少到只有悬空提交grep 只留下提交IDcutxargs使用ID 运行命令[编辑]修复了有几个悬空提交的情况.
这不是用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,但是您会看到在要查找的提交之后(以及在删除之前)提交的提交.在这种情况下,使用之后提交的提交的提交ID,git reflog并将其作为参数传递给git log:git log commitid.滚动输出,看看是否可以找到您的提交.使用提交ID,如案例1所示.
提交不是直接进入的git reflog,并且在删除提交之后和删除提交之前,您没有找到您知道自己提交的提交.
这是最繁琐的情况,在这种情况下,可能更容易通过这里的其他过程.我不确定它们实际上是否会被列为悬挂提交,所以如果你找不到你的提交,那么值得一试git fsck.
遍历所有条目git reflog并使用提交ID作为参数,git log如案例2中所述.尝试查找您之后的提交.
祝好运!