同事不小心在 uat 分支把我的代码覆盖了,我试着把我的 dev 分支重新合并到 uat,但是提示没有更改。

同事给我的方案是在我的 dev 分支删除我的代码,合并到 uat,然后在 dev 重新提交我的代码,合并到 uat。

总所周知,git 回退 commit 有两种方法,一种是 git revert,一种是 git reset

git revert 只能回退单个提交,而且适合回退最新的提交,因为回退 HEAD 移动大于 1 的提交大概率会导致冲突,而我合并到 uat 分支有三个提交,所以只能选择 git reset

然而我在网络搜索到的使用 git reset 回退代码并推送到远程的操作方法都是:

# 回退到指定 commit
$ git reset --hard commitId
# 推动到远程
$ git push --force

但是我在执行 git push --force 的时候报错了,公司的 git 设置了不能推送 non-fast-forward 的提交。

在搜索了很多 git 的相关文档后,还是可以使用 git reset 来实现该需求,只是会比上面的方法步骤要多。

比如此时你 dev 分支的 git 日志如下:

A    7572d
B   29d83
C   e422a
D   d82ee

你要将 dev 分支的代码回退到提交 D 然后合并到 uat。你可以

# 使用 hard 模式切换到 D 提交
git reset --hard d82ee
# 使用 mix 模式切换到 A 提交(即远程分支的 HEAD)
git reset --mix 7572d

此时你 git 中的 HEAD 和 INDEX 都是 A 提交的内容,但是工作目录是 D 提交的内容,所以会显示文件被改动,此时将改动提交到 INDEX,push 到远程仓库,则远程仓库的代码就和 D 分支一样了。

这时将 dev 分支合并到 uat 分支。

然后

# 查询提交日志
git reflog
# 使用 hard 模式切换到 A 提交
git reset --hard 7572d
# 使用 mix 模式切换到 D 提交(即远程分支的 HEAD)
git reset --mix d82ee

同理,工作目录是 A 提交的内容,然后将改动 push 到远程,此时 dev 的远程仓库的代码就是 A 提交的代码了。但这时候 dev 合并到 uat 的时候就不会提示说没有改动了。

Git 使用场景--恢复被覆盖的代码相关推荐

  1. IDEA恢复被覆盖的代码

    由于误操作导致代码被覆盖了,慌得一匹 经过百度,顺利解决,特此记录一下 首先,项目右键,点击Local History-->show History 然后就可以看到自己操作的时间和对应的文件,选 ...

  2. git恢复commit过的代码

    一.查看丢失记录 git fsck --lost-found 找回丢失的satsh记录,只有commit 才能够被恢复. 也可以执行git log命令找到commit id. 二.查看具体内容 git ...

  3. 45 个 Git 操作场景,专治不会合代码

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 17 分钟. 来自:blog.csdn.net/xinzhifu1/article/details/123271097 git ...

  4. git 命令详解和Android Studio代码管理工具

    目录 前言 git命令上传项目 一.核心操作 二.解决冲突 三.情景举例 四.查看ssh密钥 五.克隆远程项目 六.回退某个操作 七.和远程分支建立关联 八.删除文件 九.远程仓储 十.多人协作 十一 ...

  5. Git 操作场景大全

    git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便.但找工作面试和一些需彰显个人实力的场景, ...

  6. git stash 强制恢复_git操作与分支管理规范

    git操作与分支管理规范 一.git操作规范 git操作流程数据流图 Remote:远程主仓库 Repository:本地仓库 Index:Git追踪树,暂存区 workspace:本地工作区 代码正 ...

  7. git reset后本地拉取_Git 代码防丢指南

    优质文章,第一时间送达 作者:joymufeng 我们在日常使用Git的过程中经常会发生一些意外情况,如果处理不当,则可能会出现代码丢失的假象.本文将针对IDEA&Git日常开发中的一些场景, ...

  8. Git 切换分支,拉取分支代码指令操作

    git命令切换分支_ZHL's Blog-CSDN博客_git切换分支  git命令切换分支 https://www.jianshu.com/p/856ce249ed78 Git如何拉取指定远程分支 ...

  9. git stash 强制恢复_开发中必须要掌握的 Git 技巧

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:你喜欢吃青椒么 juejin.im/post/5d157bf3f265da1bcc1 ...

最新文章

  1. 14 Java面试之 IO 流技术
  2. 网站权重增加需要做的
  3. mysql 获取姓名首字母_MySQL取姓名的首字母
  4. 在项目中引入领域驱动设计的经验
  5. Python文件基本操作
  6. 通过JConsole查看本地远程虚拟机
  7. 触摸旋转 Android,Opengl es Android 3D 手指触控旋转object
  8. 06jQuery-04-DOM操作
  9. 2015蓝桥杯省赛---java---A---1(熊怪吃核桃)
  10. Scala 获取当前时间
  11. 63.magento 后台重置密码
  12. jquery 封装ajax方法,关于二次封装jquery ajax办法示例详解
  13. Spotlight – Recommend Node.js Projects For January
  14. LBP算法 人脸识别特征提取
  15. Python爬取链家成都二手房源信息 asyncio + aiohttp 异步爬虫实战
  16. java中乘法计算的三种方式 位运算中的另一种运算 — 左移运算
  17. 相机模型-鱼眼模型/Omnidirectional Camera(1)
  18. fp5139应用电路图_基于FP5139的可调节电压源适配器
  19. python 类和对象 atm_Python实现ATM提款机系统
  20. VRchat上传角色error无法保存蓝图解决

热门文章

  1. 把oracle11g数据导入19c,oracle11g2oracle11g oracle11g2oracle19c
  2. otc:场外交易市场
  3. Python实现带南海九段线分位数地图完整可视化版本(附代码及数据)
  4. TQ210_裸机编程(一)——点亮LED灯
  5. 自然语言处理技术的三个里程碑
  6. 南昌大学数字电路设计大作业-大药片
  7. 单片机基础知识之定时计数器和寄存器
  8. 将RGB数据写入BMP位图文件
  9. php2020春节倒计时,春节倒计时_2019_01_21
  10. ubuntu20.04 RTX 8000 安装GPU驱动,CUDA,cuDNN,TensorRT