当前位置: 首页 > news >正文

git回退未commit、回退已commit、回退已push、合并某一次commit到另一个分支

文章目录

  • 1、git回退未commit
  • 2、git回退已commit
  • 3、git回退已push的代码
    • 3.1 直接丢弃某一次的push
    • 3.2 撤销push后,不丢弃改动,重新修改后要再次push
  • 4、合并某一次commit到另一个分支

整理几个工作上遇到的git问题。

1、git回退未commit

git回退未commit,即 在一个分支修改代码后,还没commit提交,不想要这些修改了,想回到刚开始的样子

  • 查看修改的文件
git status
  • 放弃单个文件的修改
// 注意:
// 1、--和文件路径之间是有个空格的
// 2、后面跟git status返回的文件的全路径
git checkout -- 你的文件path/your-file.java
  • 也可直接放弃所有修改
git checkout .

= = = = = = = = = = = 完成分割线 = = = = = = = = = = = =

两点补充说明:

  • 1) git checkout -b 分支名 是切换分支,注意-b

  • 2) git checkout -- main.go: 这个命令的作用是撤销对文件 main.go 的修改,它会丢弃工作区中 main.go 的更改,常用于恢复意外的修改或者放弃不需要的更改

  • 3) git checkoout --main.go时,可能会有以下弹窗:内存变更Memory Changes即你新加的那些变更,既然不要这些改动了,那就选Load File System Change即可,也可先Show Difference确认下不同
    在这里插入图片描述

2、git回退已commit

git回退已commit,即 在一个分支修改代码并commit到了本地仓库,但没push到远程仓库,想回到刚开始的样子。回退所有已commit的文件:

图形界面操作

打开git log,直接Drop Commit,注意,这样不仅会让这次commit从待push列表移除,且这次commit里对代码的修改也会回退到原样,即这次commit的修改会丢失

在这里插入图片描述

那这样,也可以解决上面的场景(git回退未commit),即先commit,再drop commit

指令操作

用指令的话:

  • 先看下当前分支的head位置,发现就是我刚commit的那次
git log --pretty=oneline --all --graph --abbrev-commit

在这里插入图片描述

  • 回退,丢弃一次提交,HEAD~n,其中 n 是你要回退的提交数。如,HEAD~2 表示回退两个提交,注意–hard相当于上面的Drop Commit,会放弃commit并丢失这次commit对代码的修改
git reset --hard HEAD~1

在这里插入图片描述

  • 如果只是想放弃commit,但这次commit对代码的修改需要保留,可以使用--soft
git reset --soft HEAD~1

回退某一个已commit的文件

如果只是放弃已commit文件里的某一个文件,可以先放弃提交:

git reset --soft HEAD~1

然后重新提交需要的文件,试了半天git checkout,好像不好使。

3、git回退已push的代码

图形界面操作

最近一次的push我不要了,那就选择上一次push的位置,右键Reset Current Branch to Here(注意这里改的是本地仓库,远程仓库此时还是那个样子

在这里插入图片描述

此时,上一次push的代码就在你的待commit列表里:

在这里插入图片描述

要改的话,就改,直接不要了的话,就git checkout --filename

在这里插入图片描述

强推到远程:

git push --force origin <branch-name>// 或者
git push -f origin <branch-name>

之所以强推到远程,是因为刚才reset,改变的是本地仓库,远程还是没变,因此需要强推到远程,直接git push也不行,因为此时远程仓库比本地版本超前,会报错non-fast-forward

指令操作

3.1 直接丢弃某一次的push

  • 用commit编号或者HEAD~n (注意,–hard是这次commit或者push的修改直接丢弃,–soft则是保留修改),如果是直接不要这次push的改动了,就用–hard,如果是想撤回这次push的改动后重新修改,就用–soft
git reset --hard <commit-hash>
git reset --hard HEAD~1

强推到远程:

git push --force origin <branch-name>// 或者
git push -f origin <branch-name>

3.2 撤销push后,不丢弃改动,重新修改后要再次push

git reset --soft HEAD~1

在这里插入图片描述

此时最好就别强推了,直接push,会有冲突,合并下冲突即可。

4、合并某一次commit到另一个分支

只把A分支的一次提交,合并到B分支:

  • 切换到A分支,找到要合过去的那次提交的哈希值,比如abcdef1234567890
git log
// q退出
  • 切换到B分支,将那一次commit合过来
git cherry-pick abcdef1234567890
  • 处理冲突

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 下载安装docker并解决拉去镜像的connect:connection refused问题(2024.7.31亲测有效)
  • 【Linux】文件描述符 fd
  • uniapp手写滚动选择器
  • 开机WiFi没了只能宽带,连声音都有问题,服务里系统还原等一堆错误无法调试!——DHCP服务器常见的故障影响这么大?
  • Go 语言中如何使用指针
  • ABAP+json格式数据转换时参数为空没传值
  • Python 3.12新功能(1)
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第七十三章内核添加网卡驱动
  • 布隆过滤器
  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 五粮液提价获渠道积极反馈:增强信心、促进动销、利好产业
  • 医疗器械产品没有互联网连接,就不适用于网络安全要求吗?
  • Llama 3.1:Meta 的开源 AI 巨兽,智能新高度
  • Java中常用的配置类:最佳实践与示例
  • [C++] 容器适配器:深入理解Stack与Queue的底层原理
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • ECS应用管理最佳实践
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PAT A1120
  • Promise面试题2实现异步串行执行
  • spring security oauth2 password授权模式
  • 多线程 start 和 run 方法到底有什么区别?
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 记一次删除Git记录中的大文件的过程
  • 简单实现一个textarea自适应高度
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 实习面试笔记
  • 推荐一个React的管理后台框架
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 物联网链路协议
  • RDS-Mysql 物理备份恢复到本地数据库上
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • (06)金属布线——为半导体注入生命的连接
  • (9)目标检测_SSD的原理
  • (C++17) optional的使用
  • (pojstep1.3.1)1017(构造法模拟)
  • (补充)IDEA项目结构
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (黑马C++)L06 重载与继承
  • (回溯) LeetCode 77. 组合
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)可以带来幸福的一本书
  • (转)母版页和相对路径
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .bat文件调用java类的main方法
  • .gitignore文件设置了忽略但不生效