如何撤销Git操作?

本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何撤销Git操作?

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

本文介绍几种最主要的情况,给出详细的解释。更多的命令可以参考《常用 Git 命令清单》 一文。

一、撤销提交

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

$ git revert HEAD

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

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

$ git revert [倒数第一个提交] [倒数第二个提交]

git revert命令还有两个参数。

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

二、丢弃提交

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

$ git reset [last good SHA]

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

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

$ git reset --hard [last good SHA]

执行git reset命令之后,如果想找回那些丢弃掉的提交,可以使用git reflog命令,具体做法参考这里。不过,这种做法有时效性,时间长了可能找不回来。

三、替换上一次提交

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

$ git commit --amend -m "Fixes bug #42"

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

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

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

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

$ git checkout -- [filename]

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

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

五、从暂存区撤销文件

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

$ git rm --cached [filename]

上面的命令不影响已经提交的内容。

六、撤销当前分支的变化

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

# 新建一个 feature 分支,指向当前最新的提交
# 注意,这时依然停留在当前分支
$ git branch feature

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

# 切换到 feature 分支
$ git checkout feature

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

(完)

本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何撤销Git操作?

原文地址:https://www.cnblogs.com/cobcmw/p/12095713.html

时间: 2024-07-30 23:17:08

如何撤销Git操作?的相关文章

Git操作(基础篇)

Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/g?t/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版

Git操作记录

Git操作记录 恩首先说明下这只是为了避免自己忘记Git操作的时候重新跑去看一遍教程写的,只是作为记录,要教程的跑去下面的三个链接处.暂时这些内容都够个人用了.以后玩服务器了我就再更相关的内容. 昨晚部长在我电脑的Ubuntu系统上想将我的代码推上Github(来的本意是想为我整理后的django上线),发现我连配置都没配置好(之前学习的时候操作都是在VirtualBox上进行),随口问了我点问题也答得不好,被吐槽一番.于是花了一下午恶补了一下Git,顺便整理成这个记录. 恩,Github真的神

git 操作基础

1.git简介 2.git与svn比较 3.git工作流程 4.git分支管理 5.git使用 6.基础命令 7.过滤文件 8.创建远程gitee仓库 9.用本地仓库首次初始化远程仓库 10.remote源操作 11.多分支开发 一.git简介 什么是git:版本控制器 - 控制的对象是开发的项目代码 代码的开发时间轴:需求1 > 版本库1 > 需求2 > 版本库2 > 版本库1 > 版本库2 二.git与svn比较 svn的工作流程 git的工作流程 三.git工作流程(重

Git操作(提高篇)

Git操作(提高篇) 分支管理 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险.有了分支,就不用怕了.创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次

git 操作精选

删除远程分支 git push origin :branch-name 删除本地分支(先要切换到其他的分支) git branch -D brachname 本地创建分支 并切换到新的分支 git checkout -b  newBranch 本地创建分支 但不切换到 git branch  newBranch 提交到远程分支 注意 没有冒号 git push origin   branch-name git 操作精选

git操作上传码云

1,注册登录码云 2,先创建一个项目 参考(https://www.liaoxuefeng.com/)git教程 →使用码云 3.本地创建同名项目名称文件 4.git命令克隆项目 5.右键本地文件,Git GUI Here ,然后open   确认后push 5.修改文件后,执行git的add commit操作 6.最后 git push {助手:地址在码云上的克隆.下载处 ,git操作必须在master下}

使用Gitkraken进行其他Git操作

使用Gitkraken进行其他Git操作 查看某次 commit 的文件改动 使用 Gitkraken 能非常方便的看到任意一次的 commit 对项目文件的改动. 具体操作是:在树状分支图上单击某个 commit 记录,在右侧会显示出此次 commit 信息.文件的改动情况(分为红.绿.黄三种标志,分别代表删除文件.添加文件.修改文件). 当单击某个改动的文件时,会展示出具体的变更情况,可选择 "Diff View" 视图查看与上一次 commit 的差别,或 "File

常用的Git操作

今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令:        删除某一个文件:   rm -rf node,然后按下tab 查看分支: git branch -a 合并分支: git checkout -b 迭代  origin/迭代:    然后在切换分支: git branch -a: 从版本库拉取代码: git clone git地址 查看代码修改的内容: git status -s 查看修改文件的修改的详细信息:  git diff 文

Vim字符的替换及撤销(Undo操作)

字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+ 将游标所在字母替换为指定字母 R 连续替换,直到按下Esc cc 替换整行,即删除游标所在行,并进入插入模式 cw 替换一个单词,即删除一个单词,并进入插入模式 C(大写) 替换游标以后至行末 ~ 反转游标所在字母大小写 u{n} 撤销一次或n次操作 U(大写) 撤销当前行的所有修改 Ctrl+r redo,即撤销undo的操作 打开文件进行编辑: $ vim prac