【原】git如何撤销已提交的commit(未push)
撤销commit一般用git reset ,语法如下:
git reset [ --mixed | --soft | --hard] [<commit ID>]
1.使用参数--mixed(默认参数),如git reset --mixed <commit ID>或git reset <commit ID>
撤销git commit,撤销git add,保留编辑器改动代码
2.使用参数--soft,如git reset --soft<commit ID>
撤销git commit,不撤销git add,保留编辑器改动代码
3.使用参数--hard,如git reset --hard <commit ID>——此方式非常暴力,全部撤销,慎用
撤销git commit,撤销git add,删除编辑器改动代码
开始撤销commit的示例:
输入git log,我们可以看到最近的3次提交,最近一次提交是test3,最早的一次是test1,其中一大串黄色的字母
是commit id
(版本号)
如果嫌输出信息太多,可加上--pretty=oneline
参数,即
git log --pretty=oneline
接下来,按下键盘上的字母q退出git日志,准备进行撤销commit
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交commit id,上一个版本就是HEAD^(或者HEAD~1),上上一个版本就是HEAD^^(或者HEAD~2),同理往上N个版本写N个^不太现实,我们写成HEAD~100。
现在,我们要把当前版本test3上一个版本test2,就可以使用git reset命令:git reset --hard HEAD^,再查看日志,发现已经剩下2个commit版本了
git reset --hard HEAD^
最新的那个版本test3已经看不到了,此时你想起有一行代码写得很好,想回到test3版本看下,怎么做?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,记录还是在,使用命令git reset --hard commit_id可以回退到指定的版本,比如当前例子,我们
找到那个test3的commit id是e09af7ae711e2a79c15144c1e792fb2e27d201ff,然后输入下面指令就回来了
git reset --hard e09af7ae711e2a79c15144c1e792fb2e27d201ff
版本号可以不用写全,输入前4位或更多也是可以,Git会自动去找,不能只写前一两位,因为Git可能会找到多个版本号。比如,看完test3版本的代码后,现在想回退到最初test1版本,我们
找到那个test1的commit id是ab7b0c2b6e10a20d524156a81f6d4bc15a4ea7f3,然后输入下面指令就回来了
git reset --hard ab7b
最后在Git中,总是有后悔药可以吃的,Git提供了一个命令git reflog
用来记录你的每一次命令,通过它可以查到每个commit id,方便你前进或者回退到指定的版本
【原】git如何撤销已提交的commit(未push)的更多相关文章
- 转!!git如何撤销上一次commit(或已push)
原博文地址 : https://www.cnblogs.com/lyy-2016/p/6509707.html git如何撤销上一次commit操作 1.第一种情况:还没有push,只是在本地comm ...
- IntelliJ idea 撤回(已经commit未push的)操作
VSC => Git => reset head => 退回到上次commit => 退回到第2次提交之前 => 退回到指定commit版本
- Git 使用revert回滚已提交的commit
在git使用中如果提交错误的代码至远程服务器,可以使用git revert 命令回滚单次commit并且不影响其他commit. 回滚最新一次的提交记录: git revert HEAD 回滚前一次的 ...
- Git 修改已提交的commit注释
两种情况: 1.已经将代码push到远程仓库 2.还没将代码push到远程仓库,还在本地的仓库中 这两种情况下的修改大体相同,只是第一种情况最后会多一步 下面来说怎么修改 先搞清楚你要修改哪次的提交注 ...
- 【转】Git 修改已提交的commit注释
https://www.jianshu.com/p/098d85a58bf1 [重点] 通过git rebase -i HEAD~2 你想修改哪条注释 就把哪条注释前面的pick换成edit git ...
- git --如何撤销已放入缓存区(Index区)的修改
修改或新增的文件通过 git add --all 命令全部加入缓存区(index区)之后,使用 git status 查看状态(git status -s 简单模式查看状态,第一列本地库和缓存区的差异 ...
- svn 撤销 已提交的修改
1.保证我们拿到的是最新代码: svn update 假设最新版本号是28. 2.然后找出要回滚的确切版本号: svn log [something] 假设根据svn log日志查出要回滚的 ...
- git如何撤销上次提交
git push提交完数据后后悔了怎么办? 写在前面的话重要:删除上次提交后本地和远程仓库的数据都将删除,所以删除上次提交前,记得备份备份备份数据!!! 1.直接删除上次提交,使用reset命令 gi ...
- git批量修改已经提交的commit的姓名和邮箱
首先,我们创建change.sh脚本,并根据个人信息复制以下脚本. #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="填写原来的邮箱 ...
随机推荐
- 什么是Scrum?
转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html SCRUM 是一个用于开发和维护复杂产品的框架 Scrum 是一个 ...
- 【Offer】[13] 【机器人的运动范围】
题目描述 思路分析 Java代码 代码链接 题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和 ...
- 封装axios来管控api的2种方式
前言:我们在开发项目的时候,往往要处理大量的接口.并且在测试环境 开发环境 生产环境使用的接口baseurl都不一样 这时候如果在开发环境完成之后切换每一个接口的baseurl会变的非常的麻烦,(要去 ...
- Python连载37-多进程、进程子类、进程父子id
一.线程替代方案 1.subprocess (1)完全跳过线程,使用进程 (2)是派生进程的主要替代方案 (3)python2.4后引入 2.multiprocessing (1)使用threadin ...
- kubernetes ConfigMap和Secret:配置应用程序
7.1.配置容器化应用程序 7.2.向容器传递命令行参数 7.2.1.待Docker中定义命令与参数 1.了解ENTRYPOINT与CMD ENTRYPOINT定义容器启动时被调用的可以执行程序 CM ...
- [Vue 牛刀小试]:第十七章 - 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍
一.前言 在上一章中,我们开始通过 Vue CLI 去搭建属于自己的前端 Vue 项目模板,就像我们 .NET 程序员在使用 asp.net core 时一样,我们更多的会在框架基础上按照自己的开发习 ...
- Winform中使用DevExpress时给控件添加子控件的方法
场景 在WInform中使用DevExpress时经常使用PanelControl控件用来进行布局设计,因此需要在代码中生成控件并添加子控件. 实现 一种是设置要添加的自控件的Parent属性为容器控 ...
- hbase shell命令及Java接口介绍
一. shell命令 1. 进入hbase命令行 ./hbase shell 2. 显示hbase中的表 list3. 创建user表,包含info.data两个列族create 'user', ...
- springboot Transactional事务的使用
直接上代码: import javax.transaction.Transactional; @Transactional(rollbackOn = { Exception.class }) publ ...
- 由于找不到opencv_world***d.dl,无法继续执行代码。重新安装程序可能会解决此问题。关于opencv使用imshow函数闪退解决方法等问题
1.将缺失的文件放到程序根目录的debug中 2.将Debug x64下的附加依赖项改为只有后缀为d.lib的那个库文件,去除另一个,问题就这么解决了,虽然我也不知道加上另一个为什么就会闪退