Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何撤销 Git 操作?

如何撤销 Git 操作?

作者头像
小小杨
发布于 2021-10-13 02:32:57
发布于 2021-10-13 02:32:57
93400
代码可运行
举报
文章被收录于专栏:下落木下落木
运行总次数:0
代码可运行

Git 版本管理时,往往需要撤销某些操作。

本文介绍几种最主要的情况,给出详细的解释。

一、撤销提交

一种常见的场景是,提交代码以后,你突然意识到这个提交有问题,应该撤销掉,这时执行下面的命令就可以了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git revert HEAD
代码语言:javascript
代码运行次数:0
运行
复制

上面命令的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险。

git revert 命令只能抵消上一个提交,如果想抵消多个提交,必须在命令行依次指定这些提交。比如,抵消前两个提交,要像下面这样写。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git revert [倒数第一个提交] [倒数第二个提交]

git revert命令还有两个参数。

代码语言:javascript
代码运行次数:0
运行
复制

--no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。 --no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。

二、丢弃提交

如果希望以前的提交在历史中彻底消失,而不是被抵消掉,可以使用git reset命令,丢弃掉某个提交之后的所有提交。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git reset [last good SHA]
代码语言:javascript
代码运行次数:0
运行
复制

git reset的原理是,让最新提交的指针回到以前某个时点,该时点之后的提交都从历史中消失。

默认情况下,git reset不改变工作区的文件(但会改变暂存区),--hard参数可以让工作区里面的文件也回到以前的状态。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git reset --hard [last good SHA]

执行git reset命令之后,如果想找回那些丢弃掉的提交,可以使用git reflog命令。

三、替换上一次提交

提交以后,发现提交信息写错了,这时可以使用git commit命令的--amend参数,可以修改上一次的提交信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git commit --amend -m "Fixes bug #42"
代码语言:javascript
代码运行次数:0
运行
复制

它的原理是产生一个新的提交对象,替换掉上一次提交产生的提交对象。

这时如果暂存区有发生变化的文件,会一起提交到仓库。所以,--amend不仅可以修改提交信息,还可以整个把上一次提交替换掉。

四、撤销工作区的文件修改

如果工作区的某个文件被改乱了,但还没有提交,可以用git checkout命令找回本次修改之前的文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git checkout -- [filename]
代码语言:javascript
代码运行次数:0
运行
复制

它的原理是先找暂存区,如果该文件有暂存的版本,则恢复该版本,否则恢复上一次提交的版本。

注意,工作区的文件变化一旦被撤销,就无法找回了。

五、从暂存区撤销文件

如果不小心把一个文件添加到暂存区,可以用下面的命令撤销。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git rm --cached [filename]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
上面的命令不影响已经提交的内容。

六、撤销当前分支的变化

你在当前分支上做了几次提交,突然发现放错了分支,这几个提交本应该放到另一个分支。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 新建一个 feature 分支,指向当前最新的提交
# 注意,这时依然停留在当前分支
$ git branch feature

# 切换到这几次提交之前的状态
$ git reset --hard [当前分支此前的最后一次提交]

# 切换到 feature 分支
$ git checkout feature
代码语言:javascript
代码运行次数:0
运行
复制

上面的操作等于是撤销当前分支的变化,将这些变化放到一个新建的分支。

七、参考资料

http://www.ruanyifeng.com/blog/2019/12/git-undo.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 下落木 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Git常规使用备忘录
git安装 1.下载后安装 以Windows系统为例,下载地址:http://git-scm.com/download/win 自动下载 2.运行Git Bash git config --global user.name xxx git config --global user.email xxx@huifu.com 3.生成SSH公钥 ssh-keygen #一路回车就行 4.配置公钥到gitlab C:\Users\admin\.ssh路径下,记事本打开id_rsa.pub,拷贝内容到gitlab上配
JavaQ
2022/03/30
3420
Git 的一些事
假设远程分支上有2个提交,然后基于远程develop,再创建一个分支feature。
腾讯工蜂
2018/11/20
11.6K0
Git撤销&回滚操作(git reset 和 get revert)
俗话说,老虎也有打盹的时候。我们提交代码,也会有出错的时候。 我今天不小心把不该提交的文件给提交了。
赵云龙龙
2020/02/13
38.8K0
Git撤销&回滚操作(git reset 和 get revert)
head/reset/revert/rebase代码回滚全解:git提交记录的背后原理
多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有:
周陆军博客
2023/04/09
3K0
Git 基础操作
GitFlow 是由 Vincent Driessen 提出的一个 git 操作流程标准。
Cellinlab
2023/05/17
3490
Git 基础操作
Git操作命令
Git操作命令 目录 1、新建代码库 2、配置 3、增加/删除文件 4、代码提交 5、分支 6、标签 7、查看信息 8、远程同步 9、撤销 10、其他 1、新建代码库 # 公众号:AllTests软件测试 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url] 2、配置 # 公众号:AllTests软件测试 # 显示当前的Git配置
wangmcn
2022/07/26
3080
珍藏多年的 Git 问题和操作清单
本文整理自工作多年以来遇到的所有 Git 问题汇总,之前都是遗忘的时候去看一遍操作,这次重新整理了一下,发出来方便大家收藏以及需要的时候查找答案。
猿天地
2019/09/03
1.4K0
珍藏多年的 Git 问题和操作清单
【工具】Git 常用操作 - 备忘录
后面会把前端进阶的课程内容都总结一遍。有些都是很常见的知识,但是为了梳理自己的知识树,所以尽量模糊的地方都会记录
神仙朱
2020/03/10
4790
【工具】Git 常用操作 - 备忘录
Git - reset, checkout, revert 总结
将会查出倒数第二次(即当前commit的往前一次)提交的修改,并创建一个新的提交,用于撤销当前提交的上一次 commit。
为为为什么
2022/08/05
5700
Git 备忘清单详解
Git 是一个免费并且开源的分布式版本控制系统,旨在快速高效地处理从小到大所有项目的版本管理。Git 是目前最流行的版本管理工具,目前绝大部分公司都是使用 Git 作为项目的版本管理工具。目前最火的开源社区 Github,就是基于 Git 版本控制系统,所以掌握 Git 技能很重要。由于 Git 开发效率高、团队协作方便,现在很多 IDE 都集成了 Git,并且提供一些相关的图形化操作。也有很多很优秀,专门用来简化 Git 操作的 Git GUI 工具,例如 Sourcetree,Tortoise 等。我刚接触 Git 的时候,就是从 GUI 入手的,使用 Sourcetree 可视化版本控制工具进行操作。Sourcetree 底层也是对常用的 Git 命令进行封装实现的,傻瓜式操作,使用非常方便,但是我用完什么都不懂,Git 的内部原理也不易理解,决定在回头仔细学习一下 Git 命令行。学习完 Git 命令行后发现,命令行很好学,非常灵活,而且使用起来非常帅气。因此,直接 Git 命令,才是最灵活的操作。
程序员小强
2021/04/29
5640
Git 备忘清单详解
Git 代码回滚与找回的艺术
Git 是一个灵活和强大的版本管理工具,正确使用能够有效促进团队协作,防止版本丢失。然而实践中,有些开发人员会或有意或无意地误用部分 Git 的功能,给团队带来困扰,甚至造成损失。不恰当的代码回滚操作是其中的主要问题之一。
腾讯云 CODING
2021/03/02
1.6K0
Git 代码回滚与找回的艺术
Git_学习_01_ 常用 Git 命令清单
一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。
shirayner
2018/08/10
3090
Git_学习_01_ 常用 Git 命令清单
01 . Git常用命令及方法和分支管理
Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
iginkgo18
2020/09/27
5550
01 . Git常用命令及方法和分支管理
常用Git命令清单
一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。
框架师
2021/11/22
2890
常用 Git 命令清单
Git 命令清单。几个专用名词的译名如下。 Workspace:工作区 Index Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一、新建代码库 在当前目录新建一个Git代码库 $ git init 新建一个目录,将其初始化为Git代码库 $ git init [project-name] 下载一个项目和它的整个代码历史 $ git clone [url] 二、配置 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目
程序员鹏磊
2018/02/09
7700
如何进阶成公司 Git 小能手(常见问题总结)
Git 命令对于程序员的你来说再熟悉不过,但是发现好多小伙伴都是会一些基本的提交流程,当遇到问题的时,查到的命令还不敢用,总是请教组里那几个精通 Git 的小伙伴。本文对 Git 使用过程中常出现的问题进行总结并且对 Git 的一些误区概念说明了一些,看完后记得自己尝试下,希望你也能成为组里被请教的那 个 Git 小能手。
coder_koala
2020/03/18
5700
如何进阶成公司 Git 小能手(常见问题总结)
git初入门(二):文件操作
如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过 "git add" 添加到暂存区,然后执行以下命令:
传说之下的花儿
2023/09/16
4260
git初入门(二):文件操作
相关推荐
Git常规使用备忘录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验