为了账号安全,请及时绑定邮箱和手机立即绑定

在Git中删除一个分支后,我能恢复它吗?

在Git中删除一个分支后,我能恢复它吗?

Git
料青山看我应如是 2019-07-03 18:49:42
在Git中删除一个分支后,我能恢复它吗?如果我跑git branch -d XYZ有没有办法恢复树枝?是否有办法像我没有运行DELETE分支命令一样返回呢?
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

大多数情况下,不可访问的提交都在reflg中。所以,第一件事就是看一下翻版使用命令git reflog(它显示的是HEAD).

如果提交是仍然存在的特定分支的一部分,则可能更容易使用以下命令git reflog name-of-my-branch..它也适用于遥控器,例如,如果您强制推送。


如果您的提交不在重发中(可能是因为被不写入reflg的第三方工具删除了),我成功地恢复了一个分支,方法是使用这样的命令将我的分支重新分配到提交的sha(它创建了一个包含所有悬空提交的文件):

git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline
 > .git/lost-found.txt

如果您应该多次使用它(或者希望将它保存在某个地方),您还可以使用该命令创建一个别名.

git config --global alias.rescue '!git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1
 git log -n 1 --pretty=oneline > .git/lost-found.txt'

然后把它和git rescue

要调查已找到的提交,可以使用一些命令来查看每个提交。

要显示提交元数据(作者、创建日期和提交消息):

git cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

也可以看到不同之处:

git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

找到提交后,在此提交上创建一个分支:

git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560


查看完整回答
反对 回复 2019-07-03
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

最高投票的解决方案实际上比要求的要多:

git checkout <sha>
git checkout -b <branch>

git checkout -b <branch> <sha>

将您与最近可能忘记提交的所有更改一起移到新分支。这可能不是你的意图,特别是在“恐慌模式”后失去分支。

更清洁(更简单)的解决方案似乎是唯一的一条线(在你发现<sha>带着git reflog):

git branch <branch> <sha>

现在,您的当前分支或未实现的更改都不会受到影响。相反,只会创建一个新分支,直到<sha>.

如果不是提示,它将仍然工作,您将得到一个较短的分支,然后您可以重新尝试使用新的<sha>和新的分支机构的名字,直到你弄好为止。

最后,可以将成功还原的分支重命名为它的名称或其他任何内容:

git branch -m <restored branch> <final branch>

不用说,成功的关键是找到正确的承诺。<sha>因此,请明智地指出您的承诺:)


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 2671 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信