前情:最近在开发项目中对版本管理有了新的理解,感觉在这方面有了新的收获。同时学习了一个新的git指令:git reflog
实际了解之后,发现这个指令不是很常用,但是对于特定的场景的话它还是非常比较方便
这里我列举两种我觉得可以借助git reflog的使用场景
首先,我看到了几篇不错的博文,分享一下,这里就不再介绍git reflog的基础知识。我想在你真正了解过git reflog的基础之后再来看这两篇文章会加深你的印象。
Git reflog 引用日志使用详解-CSDN博客文章浏览阅读3.6k次,点赞2次,收藏9次。转载原文:https://www.jiyik.com/w/git/git-reflog本章节主要介绍 git reflog 命令。 Git 使用一种称为引用日志或“reflogs”的机制来跟踪分支顶端的更新。 许多 Git 命令接受用于指定引用或“ref”的参数,它是指向提交的指针。 常见的例子包括:git checkoutgit resetgit mergeReflogs跟踪本地仓库中Git引用的更新时间。除了分支提示引用日志之外,还为Git存储维护了一个特殊的reflog。Reflogs存_git refloghttps://blog.csdn.net/fengqianlang/article/details/122325907?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172239773316800207047014%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172239773316800207047014&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-122325907-null-null.142%5Ev100%5Econtrol&utm_term=git%20reflog&spm=1018.2226.3001.4187
Git进阶系列 | 8. 用Reflog恢复丢失的提交_git reflog 恢复-CSDN博客文章浏览阅读1.3k次,点赞4次,收藏9次。Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。Git会将操作记录在Reflog中,使它成为一个有价值的日志,当出现问题时,这是一个很好的起点。中的一个文件,用来跟踪每个分支的本地提交。_git reflog 恢复https://blog.csdn.net/yuff100/article/details/131391544?ops_request_misc=&request_id=&biz_id=102&utm_term=git%20reflog&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-131391544.142%5Ev100%5Econtrol&spm=1018.2226.3001.4187
使用场景:
场景一:帮助你恢复之前删除的提交
偶尔我们需要使用git reset 回退版本的时候,假如我们前一步没有使用git log查看提交,又如果我们关闭了git命令行,又如果我们之前也并没有推送远程分支留有备份的的话,这些都没有做的话,那我们是可以使用git reflog查看找到当前分支回退之前的版本,只要找到那个哈希值,那么使用git reset就可以回退到之前的版本(以前我认为git reset只能回退到以前的某个版本,实际上你只要有对应的版本号-哈希值,那么你可以任意穿梭)
注:这里我不举例描述(因为我已经比较熟练这个操作,详细内容可以参考我推荐的第二篇博文)
场景二:帮你你恢复之前删除的分支
这种情况也是存在的,比如现在你从主分支master拉取最新代码到你的开发分支develop1去开发新功能,测试环境的分支比如说是release,那我们在做项目迭代的时候会有修复问题和开发并行的时候,我们是需要经常切换分支的。假设有一天我们收到通知,我要开发的功能不需要做了,那么我的开发分支develop1不被需要了,我手欠切换到release分支,并且删掉了develop1分支。但是很快又被通知需要开发这个功能,但是我已经把develop1开发分支删掉了。我们知道那个分支是有一部分写好的功能的,如果我们不想二次开发的话,就需要尝试恢复develop1分支。同样的,远程仓库也没有备份过我刚刚开发的develop1分支,那么我们就可以通过git reflog指令去查找最近的操作日志,找到我们从develop1分支切换到release分支的记录,可以看一下当时develop1分支对应的的哈希值,或者我们在更早之前在develop1分支上一定是做过提交的,找到对应你想回到的那个版本的哈希值,此时我们要做的就是从当前稳定分支上(比如master),新建一个分支(名字随便,一般是保持和之前删除的分支名称一致),然后还是利用git reset指令,去穿梭到我复制的那个哈希值的版本,即可实现恢复之前删除的分支。
注:这里我不举例描述(因为我已经比较熟练这个操作,详细内容可以参考我推荐的第二篇博文)
小结:
我们需要知道的是,git reflog指令相当于是我们的操作日志,使用它可以对我们有时的一些误操作或者恢复某些版本起到一定的弥补作用。不过它确实也不是必须的(如果我们做好备份,或者确定明确我们需要做什么),但是如果你在git上做错了一些事情,它或许能帮到你挽回一些损失。还有就是一个项目多人同时开发的时候,确实还是要保证应该有一个自己的分支,不要随便merge别人的代码,当然你可以先从当前你的分支切换一个新分支之后在merge别人代码,而你的代码分支一定要保留好,最好不要被污染。
git reflog
git reset --hard 哈希值