【Git实战技巧】恢复被强制推送push失踪的代码

【Git实战技巧】恢复被强制推送push失踪的代码

前言

Git是一个易学难精的分布式版本控制系统,被咱们码农经常使用于代码的管理。若是你还不了解Git,建议先经过廖雪峰的Git教程进行了解,再来看本文,由于本文以使用技巧为主,不会在基础名词上作过多解释。git

廖雪峰的Git教程:算法

https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000后端

恢复被强制推送push失踪的代码

在常规的开发流程中,不免有时由于各类缘由(例如须要使用git rebase)会须要使用到git push -f,也就是强制推送,该命令会覆盖远程分支。分布式

但若是操做不当,会容易把小伙伴的以前提交的commit给覆盖掉,不要慌,这并不表明你小伙伴的commit已经永远找不回来了,大部分状况下,他们仍是能够被找回的。ide

git reflog 能够查看全部分支的全部操做记录(包括(包括commit和reset的操做),包括已经被删除的commit记录,git log则不能查看已经删除了的commit记录工具

虽然有reflog这跟救命稻草,但因为Git会定时gc(回收),清理掉reflog,因此被人覆盖后不要等待过久才进行恢复操做,否则可能就真的找不回了。命令行

操做方法

  1. 备份当前工做区的数据
    你能够使用git stash等命令备份下如今正在写的代码版本控制

  2. 在命令行输入git reflog/git log -g
    显示全部历史操做,找到你须要的提交(包括已经被删除的commit记录,git log则不能查看已经删除了的commit记录)
    【Git实战技巧】恢复被强制推送push失踪的代码

2.1 强制回退到当时被删除的commitcode

git reset --hard <SHA1>

2.2 或者直接对象

git cherry-pick <SHA1>

直接把当时版本的工做拿回来。不过若是有冲突的话还要处理冲突。

  1. 强推上远程分支
git push -f origin <branch>

若是引发commit丢失的缘由并无记录在reflog 中,好比运行了rm -Rf .git/logs/, 由于 reflog 数据是保存在 .git/logs/ 目录下的,这样就没有 reflog 了。

能够使用 git fsck 工具,该工具会检查仓库的数据完整性。若是指定 --full 选项,该命令显示全部未被其余对象引用 (指向) 的全部对象:

【Git实战技巧】恢复被强制推送push失踪的代码
而后,用相同的方法就能够恢复它,即建立一个指向该 SHA 的分支。

是否是对于强推git push -f再也不慌了呢?

关注我

原创博客主要内容

  • Java知识点复习全手册
  • Leetcode算法题解析
  • 剑指offer算法题解析
  • SpringBoot菜鸟入门实战系列
  • SpringCloud菜鸟入门实战系列
  • 爬虫相关技术文章
  • 后端开发相关技术文章
  • 逸闻趣事/好书分享/我的兴趣

我的公众号:后端技术漫谈

【Git实战技巧】恢复被强制推送push失踪的代码
公众号:后端技术漫谈.jpg

若是文章对你有帮助,不妨收藏,投币,转发,在看起来~

相关文章
相关标签/搜索