如果我运行gitbranch-d XYZ,是否有方法恢复该分支?有没有办法像我没有运行delete branch命令一样返回?
当前回答
根据我的理解,如果要删除的分支可以由另一个分支访问,您可以使用
git branch -d [branch]
而且你的工作没有丢失。请记住,分支不是快照,而是指向快照的指针。所以当你删除一个分支时,你就删除了一个指针。
如果删除另一个分支无法访问的分支,您甚至不会丢失工作。当然,这不会像检查提交哈希那样简单,但你仍然可以做到。这就是为什么Git无法删除使用-d无法访问的分支的原因。相反,您必须使用
git branch -D [branch]
这是Scott Chacon关于Git的必看视频的一部分。查看第58:00分钟,当他谈到分支以及如何删除分支时。
GitHub的Scott Chacon介绍Git
其他回答
谢谢大家。
我的问题是我删除了GitLab(远程)和GIT(本地)上的分支。
但不知怎么的,我得到了我的承诺,就像这样:
首先,我得到了最后一次提交(SHA)
git log --graph --decorate $(git rev-list -g --all)
我简单地签出了上一个SHA
git checkout <SHA>
然后我通过键入
git switch -c <branch-name>
然后我拿回了我的承诺我又把树枝推了一遍
谢天谢地。
ps:不知为什么(SHA)是一个提交代码
是的,您应该能够执行git reflog(无缩写),并在已删除分支的顶端找到提交的SHA1,然后只需git checkout[sha]。一旦您完成了提交,就可以使用gitcheckout-b[branchname]从那里重新创建分支。
感谢@Cascabel的这款浓缩/单内胆版本,以及@Snowscrash如何获得sha。
如果你刚刚删除了分支,你会在你的终端中看到类似这样的内容:deleted branch<your branch>(was<sha>)。然后在这一行中使用<sha>:
git checkout -b <your-branch> <sha>
当提交在reflog中时
大多数时间无法访问的提交都在reflog中。因此,首先要尝试使用命令git reflog(它显示HEAD的reflog)查看reflog。
如果提交是一个特定且仍然存在的分支的一部分,那么使用命令git reflog名称可能会更简单。它也适用于远程设备,例如,如果您使用了强制推送(尽管应该使用gitpush-forcewithlease,这样可以防止错误,并且更容易恢复)。
当他们不在reflog中时
如果您的提交不在reflog中(可能它们被不写入reflog的第三方工具删除了),您可以先尝试使用此命令创建一个包含所有悬空提交的文件
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
然后读取缺失提交的SHA并将分支重置为它。
经常使用的用户可以使用
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 cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560
另请参见差异:
git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560
在找到的提交上创建分支:
git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560
Windows GUI可以通过菜单Repository=>Git maintenance=>recover lost objects。。。
相关:轻松恢复以前暂存的已删除文件
确保在本地执行所有这些操作,并在推送到Bitbucket云之前确认您的回购处于所需状态。克隆当前的回购协议,并首先测试这些解决方案可能也是一个好主意。
如果您刚刚删除了分支,您将在终端中看到类似的内容:
Deleted branch <your-branch> (was <sha>)
2.要恢复分支,请使用:
git checkout -b <branch> <sha>
如果你不知道头顶上的“sha”,你可以:
使用以下方法在已删除分支的末端查找提交的“sha”:
git reflog
要恢复分支,请使用:
git checkout -b <branch> <sha>
如果您的提交不在reflog中:
您可以尝试通过使用以下命令将分支重新设置为提交的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
2.然后可以使用以下选项之一显示每个提交:
git log -p <commit>
git cat-file -p <commit>
添加到tfe答案:git源代码的contrib/区域(在git.git存储库中)中还有git-resurrect.sh脚本,这可能会对您有所帮助。
git restore<name>尝试查找分支提示的痕迹调用<name>,并尝试恢复它。当前,reflog是搜索签出消息,并使用-r合并消息。具有-m和-t,将扫描所有ref的历史记录,以便将<name>合并到other/将<other>合并到<name>中(分别)提交主题很慢,但可以让你重新提起别人的话题分支。