【Git实战技巧】恢复被强制推送push失踪的代码
前言
Git是一个易学难精的分布式版本控制系统,被我们码农常用于代码的管理。如果你还不了解Git,建议先通过廖雪峰的Git教程进行了解,再来看本文,因为本文以使用技巧为主,不会在基础名词上做过多解释。
廖雪峰的Git教程:
https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000
恢复被强制推送push失踪的代码
在常规的开发流程中,难免有时因为各种原因(例如需要使用git rebase)会需要使用到git push -f,也就是强制推送,该命令会覆盖远程分支。
但如果操作不当,会容易把小伙伴的之前提交的commit给覆盖掉,不要慌,这并不代表你小伙伴的commit已经永远找不回来了,大部分情况下,他们还是可以被找回的。
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能查看已经删除了的commit记录
虽然有reflog这跟救命稻草,但由于Git会定时gc(回收),清理掉reflog,所以被人覆盖后不要等待太久才进行恢复操作,不然可能就真的找不回了。
操作方法
- 备份当前工作区的数据
你可以使用git stash
等命令备份下现在正在写的代码
- 在命令行输入
git reflog/git log -g
显示所有历史操作,找到你需要的提交(包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录)
2.1 强制回退到当时被删除的commit
git reset --hard <SHA1>
2.2 或者直接
git cherry-pick <SHA1>
直接把当时版本的工作拿回来。不过如果有冲突的话还要处理冲突。
- 强推上远程分支
git push -f origin <branch>
如果引起commit丢失的原因并没有记录在reflog 中,比如运行了rm -Rf .git/logs/
, 因为 reflog 数据是保存在 .git/logs/ 目录下的,这样就没有 reflog 了。
可以使用 git fsck
工具,该工具会检查仓库的数据完整性。如果指定 --full 选项,该命令显示所有未被其他对象引用 (指向) 的所有对象:
然后,用相同的方法就可以恢复它,即创建一个指向该 SHA 的分支。
是不是对于强推git push -f
不再慌了呢?
关注我
我是一名后端开发工程师。
主要关注后端开发,数据安全,爬虫,物联网,边缘计算等方向,欢迎交流。
各大平台都可以找到我
- 微信公众号:后端技术漫谈
- Github:@qqxx6661
- CSDN:@Rude3Knife
- 知乎:@Zhendong
- 简书:@蛮三刀把刀
- 掘金:@蛮三刀把刀
- 头条:@后端技术漫谈
原创博客主要内容
- Java知识点复习全手册
- Leetcode算法题解析
- 剑指offer算法题解析
- SpringBoot菜鸟入门实战系列
- SpringCloud菜鸟入门实战系列
- 爬虫相关技术文章
- 后端开发相关技术文章
- 逸闻趣事/好书分享/个人兴趣
个人公众号:后端技术漫谈
如果文章对你有帮助,不妨收藏,投币,转发,在看起来~
【Git实战技巧】恢复被强制推送push失踪的代码相关推荐
- Git回退已经提交commit的(还未推送push的)代码及撤回代码回退
1.Git回退已经提交的代码 原文链接(原文写的是已经推送push的代码) http://t.csdn.cn/CDjgq 已经开始难过了,我提交后没有推送就按照上文提示进行了代码回退,结果idea里面 ...
- git 强制推送_Git 常用命令清单,掌握这些,轻松驾驭版本管理
工程下载.分支的增删查改 工程下载: clone 远程工程:git clone https://XXXX.git fetch 远程分支到本地某分支:git fetch origin : 分支的增删查改 ...
- Git版本回退并强制推送到远端
Git版本回退并强制推送到远端 本文参考廖雪峰的Git教程 前言:本文章解决问题的前提是本人不小心修改了本地代码仓库的最外层目录权限,不知道原权限是什么,导致本地git提示几十个文件被修改过,实际内容 ...
- Git的强制操作:强制推送[项目中千万不要用] 强制下拉
强制推送 git push --force origin 强制下拉 git pull --force origin master:master git pull --force origin dev: ...
- git第一次提交代码至远程仓库-强制推送
一 首次提交代码到git仓库 第一步:git init 初始化项目文件夹 第二步:git add . 键所有文件添加到暂存区 第三步:git commit -m "first commit& ...
- Git 更安全的强制推送,--force-with-lease
由于 git rebase 命令的存在,强制将提交推送到远端仓库似乎也有些必要.不过都知道 git push --force 是不安全的,这让 git rebase 命令显得有些鸡肋. 本文将推荐 - ...
- 乌龟git强制推送(不到万不得已不要使用!!!)
有时候我们在推送的时候会出现这样那样的问题,比如多添加了文件,需要删除却不知道ignore这个东西的时候,或者链接推送总是失败啊,在这种情况下,TortoiseGit还有一个强制推送的功能,不到万不得 ...
- Git实战技巧-多人协作开发出现代码冲突,如何合并代码
Git实战技巧-多人协作开发出现代码冲突,如何合并代码 1.企业场景 小智和小黑两个人交叉修改同一个文件,这个时候小智修改完提交.问题来了,如果小智提交成功,那么就相当于忽略了小黑提交的内容.这个时候 ...
- Git实战技巧-比较不同分支之间的差异和代码的改动
Git实战技巧-比较不同分支之间的差异和代码的改动 1.企业场景 播仔即将结束在传智公司的开发工作,跳槽到黑马公司.项目经理考虑到播仔即将离职,只分配了一个简单的账户密码登录功能,而其他方式的登录功能 ...
最新文章
- 关于学习Python的一点学习总结(19->if及相关的符号运算)
- 02移动端布局基础之流式布局项目实战(京东移动端首页)
- 可怕!如果张东升是个程序员......
- 皮一皮:太像了....
- STM32 IO口的八种模式使用小结
- C#反射Assembly 具体说明
- Linux 多线程开发-线程创建pthread_creat
- 初窥Linux 之 我最常用的20条命令
- sqlyong导出sql没有数据_sqlyog怎么导入外部数据库-sqlyog导入数据库的方法 - 河东软件园...
- c++ 链表_链表(单向链表的建立、删除、插入、打印)
- Python办公自动化 - 4 PDF办公自动化
- Django的应用部署
- dblink 同步数据_使用DBLINK同步TC数据库
- Ajax基础 Ajax发送Get请求和post请求
- ios 团购信息客户端demo(二)
- 结构优化设计with OPtiStruct
- linux系统点歌机 ntfs分区,嵌入式点歌机说明
- gaussian 和gaussview_「测试狗」Gaussian量化模拟入门教程(一)
- OneNote解决字体不同的问题【完美解决】
- 三角形外接球万能公式_【光速解题】如何秒定各类外接球的球心