git回退版本教程

发布时间:2022-07-23 23:35:18 作者:yexindonglai@163.com 阅读(993)

前言

在git 中,我们要将一个文件提交到远程仓库很简单,git提交流程如下

其中,暂存区也被称为工作空间

但是要回退到之前的版本,还是有一点难度的,因为大部分的人都没有操作过,知道的人也就少了;所以今天特地写一篇博客,记录下回退的过程;

如何知道文件是否在暂存区呢?

有2种方式

第一种:通过命令

输入命令git status命令查看,下图中,

  • Changes to be cimmitted :表示是修改的文件,既然是修改,就代表这个文件是已存在的;
  • Untracked files :翻译为中文是:“未跟踪”的意思,也就是不在暂存区的文件;

第一种:通过idea查看

打开idea的LocalChanges查看:

  • 蓝色表示修改的文件,
  • 红色表示未添加到暂存区的文件

回退类型

  • 已提交,未push到远程仓库
    • git reset --soft 版本id: 撤销commit
    • git reset --mixed 版本id:撤销commit 和 add 两个动作
  • 已提交,并且已push到远程仓库
    • git reset --hard 版本id: 撤销并舍弃版本号之后的提交记录,使用需谨慎
    • git revert 版本id : 撤销。但是保留了提交记录;
  • 修改了文件,未提交
    • git checkout -- 文件名称 还原已修改的文件

1、git reset —soft 撤销commit

首先看看已提交的记录,通过 git status查看

如果你用的 idea 开发工具,也可以通过快捷键 ctrl + shift + k查看已提交但未push的记录

通过git log查看所有的提交记录,第一个就是我们的刚刚提交但未push的版本;第二个是当前远程仓库最新的版本

要回退到上一个版本,先复制当前远程仓库最新的版本号id,也就是上图的第二个版本号id

  1. ca38ec2648d51067a9f108689431ba640236d43c

回退,通过指定版本id的方式即可回退到最新的版本

  1. git reset --soft ca38ec2648d51067a9f108689431ba640236d43c

执行后没有报错就表示成功

在通过命令git status 查看,本地仓库中的版本已经没了,已经回退到指定了版本了,回到了,未提交的状态,其中 modified 就是你已经修改了,但是未提交的文件;

通过快捷键 ctrl + shift + k看到提交的也没了

2、git reset —mixed 撤销commit 和 add 两个动作

首先创建一个文件 123.txt

然后添加到 暂存区,然后commit到本地仓库

  1. # 添加到暂存区
  2. git add .
  3. # 提交到本地仓库
  4. git commit -m "commit..."

通过 git status可以看到已经提交到本地仓库了,这边只会告诉你有一个文件未push,但是不是告诉你具体是什么文件

输入 git log可以看到刚刚提交的内容,因为我们要回滚到上一个版本,所以先复制上一个版本的id;

进行回滚,输入以下命令

  1. git reset --mixed ca38ec2648d51067a9f108689431ba640236d43c

没有报错,表示回滚成功了

通过 git status 查看,回到了原始状态,未添加到 暂存区,同时撤销了 commitadd 两个操作

3、git reset —hard 撤销并舍弃版本号之后的提交记录,撤销push、commit、add 三个动作

首先创建一个文件 123.txt

然后添加到 暂存区,然后commit到本地仓库并push到远程仓库

  1. # 添加到暂存区
  2. git add .
  3. # 提交到本地仓库
  4. git commit -m "commit..."
  5. # push到远程仓库
  6. git push

通过 git log 命令可以看到,已经提交到远程仓库了

然后进行回退到上一个版本的操作,复制上一个版本的id,输入以下命令

  1. git reset --hard ca38ec2648d51067a9f108689431ba640236d43c
  2. # 一定要强制推送到远程分支,否则不会变更
  3. git push -f origin master

通过 git log查看,发现已经将远程仓库的版本回退到了上个版本,并且刚刚push的记录也没了;

4、git revert 撤销。但是保留了提交记录;

git revert 和其他的回退不太一样,其他的回退到指定版本后,都会清除调之后的版本,但是 git revert 不会删除版本,而是新建一个版本来存储回退的内容

用户也很简单,根据上面的例子操作一遍就号,因为 git revert 这个命令确实用的不多,所以这边也不做演示,使用格式为;

  1. git revert 版本id

5、git checkout — 还原已修改但是未提交的文件

  1. // 指定还原`aaa.html`文件
  2. git checkout -- aaa.html
  3. // 还原所有文件
  4. git checkout -- *
  5. git checkout -- .

关键字git