如果我运行gitbranch-d XYZ,是否有方法恢复该分支?有没有办法像我没有运行delete branch命令一样返回?
当前回答
确保在本地执行所有这些操作,并在推送到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>
其他回答
首先转到git批处理项目,如:
cd android studio project
cd Myproject
then type :
git reflog
你们都有一个更改列表,参考号取参考号,然后从android studio或git betcha结账。另一个解决方案是获取参考号,然后转到android工作室,单击git分支,然后单击签出标签或参考号之后的修订,然后lol您就有了分支。
如果删除了分支并忘记了它的提交id,可以执行以下命令:
git log --graph --decorate $(git rev-list -g --all)
之后,您将能够看到所有提交。然后,您可以对这个id执行git签出,并在这个提交下创建一个新的分支。
如果您使用的是Git扩展
虽然很旧,但当您在google恢复已删除的分支时,此线程是列表的顶部。我使用的是git扩展而不是命令行,所以我不熟悉这些命令,但reflog命令给了我一个线索,所以我在这里发布了我的git扩展解决方案,供其他使用git扩展的人阅读。
转到工具栏上的视图下拉列表选择Show reflog references
您删除的分支现在应该可以查看和选择,只需单击它并将其签出即可。
根据我的理解,如果要删除的分支可以由另一个分支访问,您可以使用
git branch -d [branch]
而且你的工作没有丢失。请记住,分支不是快照,而是指向快照的指针。所以当你删除一个分支时,你就删除了一个指针。
如果删除另一个分支无法访问的分支,您甚至不会丢失工作。当然,这不会像检查提交哈希那样简单,但你仍然可以做到。这就是为什么Git无法删除使用-d无法访问的分支的原因。相反,您必须使用
git branch -D [branch]
这是Scott Chacon关于Git的必看视频的一部分。查看第58:00分钟,当他谈到分支以及如何删除分支时。
GitHub的Scott Chacon介绍Git
除了tfe的答案之外,您可以使用上述过程进行恢复,除非它的提交没有被垃圾收集。Git分支只是指向提交树中特定提交的指针。但是,如果您删除了指针,并且该分支上的提交没有合并到其他现有分支中,那么git会将其视为悬空提交,并在垃圾收集期间删除它们,垃圾收集可能会定期自动运行。
如果您的分支没有合并到现有分支,并且它被垃圾收集,那么您将放弃所有提交,直到分支从现有分支分支出来。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式