前言

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,所以被人覆盖后不要等待太久才进行恢复操作,不然可能就真的找不回了。

操作方法

  1. 备份当前工作区的数据

你可以使用git stash等命令备份下现在正在写的代码

  1. 在命令行输入git reflog/git log -g

显示所有历史操作,找到你需要的提交(包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录)

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

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 选项,该命令显示所有未被其他对象引用 (指向) 的所有对象:

然后,用相同的方法就可以恢复它,即创建一个指向该 SHA 的分支。

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

关注我

我是一名后端开发工程师。

主要关注后端开发,数据安全,爬虫,物联网,边缘计算等方向,欢迎交流。

个人公众号:后端技术漫谈

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

Git实战技巧:恢复被强制push -f失踪的代码的更多相关文章

  1. (20/24) webpack实战技巧:watch实现热打包和添加代码备注

    在前面的学习中,我们一直使用webpack-dev-server充当(本地)服务器和完成打包任务,但是当出项目团队联合开发,共同使用一个服务器时,这时候我们需要实时进行打包以确保团队间能进行联调或者进 ...

  2. 第十二组 -摩天脆脆冰淇淋队-第四次团队作业:Git实战

    这个作业属于哪个课程 至诚软工实践F班 - 福州大学至诚学院 - 班级博客 - 博客园 (cnblogs.com) 这个作业要求在哪里 第四次团队作业:Git实战 - 作业 - 至诚软工实践F班 - ...

  3. git push -f

    有的时候使用GIT工作时,会遇到一下这种问题, Pushing to git@github.com:519ebayproject/519ebayproject.git To git@github.co ...

  4. 12个git实战建议和技巧

    摘要:git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场.本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助. ...

  5. git强制push

    Git 如何强制push? $ git push -u origin master –f   文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有 ...

  6. Git操作:一次性强制push所有分支

    现在手上有两个分支,master和rotation,想一次性推送所有分支,可以用--all参数来实现: git push --all origin 如果远程仓库有更改,但你需要直接推送,那就可以使用强 ...

  7. 七个你必须重视的 Git 使用技巧

    与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...

  8. 七个你无法忽视的Git使用技巧(转)

    与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...

  9. 七个你无法忽视的Git使用技巧

    与其他技术相比,Git应该拯救了更多开发人员的饭碗.只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误. 尽管这么说,Git的命 ...

  10. git实战经验(很实用)

    推荐学习git很好的网站https://www.breakyizhan.com/git/216.html 以下内容,虽然编排不行,但是请认真的读下去,都是自己平时请自操作的,放心使用. 这是个人的gi ...

随机推荐

  1. spring redis 工具类

    import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; ...

  2. 感悟:FPGA的串行及并行设计思路

    前言 FPGA设计过程中, 会遇到大量的串行转并行或者并行转串行的问题; 这些问题主要体现在FPGA对于速度和面积的均衡上; 一般而言, FPGA使用并行的设计可以提高处理的速度, 消耗更多的资源; ...

  3. ABC326 A-F

    vp on 2023.11.12 A.B:略. C:双指针或者二分. D:暴搜+剪枝,每一行的计算量最多是 $60$. E:期望相关.计算每个点的概率,乘上这个点的权值,并求和即可. F:meet i ...

  4. openGauss 列存表PSort索引

    openGauss 列存表 PSort 索引 概述 PSort(Partial sort) Index 是在列存表的列上建的聚簇索引.CUDesc 上有每个 CU 的 min 和 max 值,但如果业 ...

  5. docker 应用篇————docker-compose[十九]

    前言 简单介绍一下docker compose. 正文 首先进行下载一下. sudo curl -L "https://github.com/docker/compose/releases/ ...

  6. 重新整理数据结构与算法(c#)—— 线索化二叉树[二十]

    前言 为什么会有线索化二叉树呢? 是这样子的,二叉树呢,比如有n个节点,那么就有n+1个空指针域. 这个是怎么来的呢?比如我们假如一个节点都有左子树和右子树,那么就有2n个节点. 但是我们发现连接我们 ...

  7. MMDeploy部署实战系列【第六章】:将编译好的MMdeploy导入到自己的项目中 (C++)

    MMDeploy部署实战系列[第六章]:将编译好的MMdeploy导入到自己的项目中 (C++) 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给 ...

  8. 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍

    一.伺服刹车 关键词:急停,急停中间继电器.刹车中间继电器,刹车使能 正文: 通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠. 伺服刹车硬件,一般是24v电源给进去,就会释放刹 ...

  9. .NET开源强大、易于使用的缓存框架 - FusionCache

    前言 缓存在程序中扮演着提升性能.降低资源消耗.改善用户体验等重要角色,是构建高效.可伸缩.稳定的系统不可或缺的重要组成部分.今天大姚给大家分享一款.NET开源(基于MIT license).强大.易 ...

  10. pypinyin 获取拼音,作为智能设备的唤醒比对结果

    from pypinyin import lazy_pinyin,TONE,TONE2,TONE3,NORMAL a = "小七同学" b = "小琦同学" c ...