Git:恢复未合并的已删除分支

  • 什么是 Git Reflog?
  • 如何以及何时删除分支?
  • 恢复已删除的分支
  • 恢复已删除的分支时,将还原哪些工作?
  • Git Reflog 子命令

考虑一个场景,一个m aintainer必须合并来自不同协作者的许多功能分支,然后最终删除它们;但是在工作可以合并之前,分支被意外删除了?

什么是 Git Reflog?

“reflog”命令跟踪在存储库的引用(分支或标记)中所做的每一项更改,并保留本地创建或签出的分支和标记的日志历史记录。引用日志,如创建或克隆分支、签出、重命名或在分支上执行的任何提交的提交快照,由 Git 维护,并由“reflog”命令列出。

注意:仅当分支曾经存在于本地存储库中时,分支才能从您的工作目录中恢复,即分支是在本地创建的,或者是从本地存储库中的远程存储库签出的,以便 Git 存储其引用历史记录日志。

此命令必须在具有丢失分支的存储库中执行。如果您考虑远程存储库的情况,则必须在拥有分支的开发人员计算机上执行 reflog 命令。

命令: git reflog

现在您知道了,什么是 Git Reflog,让我们尝试删除合并和未合并的分支,看看 Git 如何处理它?

步骤 1:列出合并到主节点中的分支
首先,如果您使用以下命令在其他分支上,请签出到“master”分支:

$git checkout master

输出


现在,要获取合并分支的列表,请提及以下命令:

$git branch --merged

输出:

如何以及何时删除分支?

众所周知,Git 是一个分布式版本控制系统 (DVCS),每台具有克隆或存储库副本的计算机都充当节点和集线器。这意味着每台计算机都将拥有自己的整个存储库代码和历史记录的副本。 毋庸置疑;您将与他人分享您的工作并发布相同的作品。

因此,在这种情况下,在实际场景中,可能会出现3种情况,其中有许多贡献者在大型项目上工作,因此可能会删除分支。可能是以下情况:

案例 1 – 开发人员可以合并或删除分支
考虑这样一个场景:开发人员将功能分支合并到本地的主分支中,然后使用带有“-d”标志的“git branch”命令删除功能分支,如前面的屏幕截图所示。

命令:“git branch -d branch_name”

也可能发生这样的情况:开发人员决定清除分支上的更改,并决定删除分支,而不使用以下命令将其与任何其他分支合并:

命令:‘git branch -D branch_name’

使用上述命令,开发人员强制删除覆盖git警告的分支

$git branch -D preprod

输出

注意:当您运行“git branch”命令时,“preprod”分支将不再列出。因此,我们在此分支上保存的工作将丢失。

案例 2 – 开发人员删除共享存储库中的分支

考虑一个场景,其中具有读/写访问权限的开发人员尝试使用带有“–delete”标志的“git push”命令强制删除远程分支。

$git push origin --delete quickfix

恢复已删除的分支

步骤 1:所有引用的历史记录日志
获取此存储库中所有引用(“master”、“uat”和“prepod”)的所有本地记录历史记录日志的列表。

git reflog

步骤 2:识别历史记录戳
正如您可以从上面的快照中参考的那样,突出显示的提交ID:e2225bb以及HEAD指针index:4是从指向您最新工作的当前HEAD指针创建“preprod”分支时的那个。

步骤3:恢复
要恢复’preprod’分支,请使用命令 'git checkout’传递索引ID为4的HEAD指针引用。 这是创建“preprod”分支时的指针引用,在输出屏幕截图中突出显示了长提交ID。


git checkout -b preprod HEAD@{4}


注意:让我重新验证上面使用的“git checkout”命令,并帮助您更好地理解:

“git checkout”命令是一个过载命令(就像任何Java重载函数一样)。这是恢复实际分支的部分。

这个单个命令首先签出到HEAD@{4}指针所指向的早期历史时间戳,然后使用“-b”选项创建一个名为“preprod”的分支;以及将工作目录切换到新创建的分支。

这意味着切换的分支将从输出屏幕中所示的“主”分支切换到“预置”。 现在,您可以根据分支模型将其与“master”或“release”分支合并。

现在,您已经知道如何恢复分支,让我告诉您在恢复已删除的分支时恢复的工作。

恢复已删除的分支时,将还原哪些工作?

隐藏并保存在存储索引列表中的文件将被恢复回来。任何未跟踪的文件都将丢失。另外,我总是分阶段并提交您的工作或隐藏它们,这是一个好主意。

要获取特定分支或标记的日志引用,请运行命令 - “git reflog <ref_name>”。

示例:要单独检查’uat’分支的日志引用,请使用命令 - “git reflog uat”。

Git Reflog 子命令

git reflog
用于打开手册页的命令

$git reflog --help

输出

git reflog show
显示命令行中提供的引用的日志。

git reflog show master@{0}
git reflog expire
git reflog expire
git reflog delete

此命令从引用历史记录中删除单个条目。

git reflog delete

git reflog 存在

此命令检查 ref(分支或标记)是否具有引用日志 – 日志历史记录条目。

git reflog exists

Git:恢复未合并的已删除分支相关推荐

  1. git reflog 恢复已删除分支

    语法: git reflog --date=[iso | local | relative] | grep [-w 全词匹配] <branchname> iso:格式化后的时间时间 loc ...

  2. 计算机中丢失repo,我的本地git repo有“未上演”的已删除文件,远程是文件,如何删除丢失的文件?...

    我读过关于git clean和git reset但我不认为他们做了我需要的事情.我尝试了git pull,但没有解决问题(git pull结果为:Already up-to-date.) 我在gith ...

  3. git branch -D 大写的D 删除分支

    今天删除本地分支 git branch -d XX 提示:  the branch  XXX is not fully merged 原因:XXX分支有没有合并到当前分支的内容 解决方法:使用大写的D ...

  4. 成功恢复 Linux 系统中已删除的文件

    点击关注公众号,回复"1024"获取2TB学习资源! 当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件.不过,幸运的是文件是可以通过 ...

  5. 使用git恢复未提交的误删数据

    不小心将项目中一个文件夹删除还未提交,或者已经提交, 此时想要恢复数据该怎么办? 答案是git reflog,使用git reflog命令可以帮助恢复git误操作,进行数据恢复. 操作过程: 打开终端 ...

  6. Git:如何在项目提交历史中查找已删除的文件?

    曾几何时,我的项目中现在有一个文件,我现在希望能够得到. 问题是:我不知道何时删除它以及它在哪条路径上. 如何找到该文件的提交? #1楼 无法编辑接受的回复,因此在此处将其添加为答案, 要恢复git中 ...

  7. [转]Git:如何在项目提交历史中查找已删除的文件?

    曾几何时,我的项目中现在有一个文件,我现在希望能够得到. 问题是:我不知道何时删除它以及它在哪条路径上. 如何找到该文件的提交? #1楼 无法编辑接受的回复,因此在此处将其添加为答案, 要恢复git中 ...

  8. 玩转GIT系列之【git的分支操作(查看分支/切换分支/新建分支/删除分支)】

    一.查看分支 1.查看全部分支 git branch -a 2.查看本地分支 git branch -l 3.查看远程分支 git branch -r 二.切换分支 假设本地当前处于master分支下 ...

  9. 微信记录怎么恢复?恢复已删除微信历史记录的4种方式

    恢复已删除微信历史记录的4种方式 如何在有/没有备份的情况下在 iPhone 和 Android 上恢复旧的或已删除的微信历史记录,如聊天对话.语音消息.照片.图片和视频剪辑?参考本指南,祝您成功恢复 ...

最新文章

  1. linux 分析磁盘性能,03.分析性能瓶颈 - 3.4.磁盘瓶颈 - 《Linux性能调优指南》 - 书栈网 · BookStack...
  2. 13、MySQL比较运算符
  3. 数据结构之B树与B+树
  4. GDCM:将文件封装在RawData中的测试程序
  5. 【机器视觉】 dev_set_line_width算子
  6. TortoiseSVN Launch Failed Error:系统找不到指定路径
  7. 黑马程序员-面向对象-06天-5(单例设计模式)
  8. python getattr_Python 内置方法和属性应用:反射和单例
  9. mcu比较器技巧和诀窍_如何准备技术面试-技巧和窍门,以帮助您表现最好
  10. 2016年下半年信息安全工程师考试真题含答案(下午题)
  11. LeetCode Min Stack 最小值栈
  12. PLSQL个性化设置
  13. IT 从业者要如何在国企「活」下去?
  14. 《CLR via C#》读书笔记 之 泛型
  15. 【linux】常用网络操作
  16. 财务报表软件免费版下载
  17. 盘片式过滤器是盘式过滤器吗?
  18. 【檀越剑指大厂--jvm】jvm总结
  19. 瑞禧PLGA-PEG-Val-Thr-Cys-Gly 聚乙二醇
  20. Python数据导入

热门文章

  1. STM32F103 SX1278 驱动
  2. PW2330原厂规格书12V转5V,3.3V稳压电源芯片,1A-3安
  3. java编程基础(一)十六进制
  4. 【转】配置Symbian模拟器支持模拟MMC存储卡
  5. 脑机接口科普0009——侵入式与非侵入式的优缺点
  6. IBM Rational ClearQuest查询使用教程
  7. Cube添加FreeRTOS 下
  8. 2019年4月试题解析-计算机网络原理
  9. FreeModbus添加主机功能
  10. CommonCollection1反序列化学系