GIT撤销修改 restore

撤销修改

GIT 撤销修改,主要利用 git restore 命令。现在,我们来假象一个使用场景。当我们大半夜战至性头时,一上头不小心在文件中写了句不该写的话"老板是个大煞笔"!并且已经 git add 到暂存区(staged) 中了!如果再继续commit 的话,第二天就面临失业的风险!

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   READEME.md

从上面可以看到,有一个待提交文件,并且还有一个重要的提示:use "git restore --staged <file>..." to unstage ,翻译过来就是,使用 git restore --staged <file>... 可以使文件变成已修改(未执行 add 时 )状态。
好的,是时候展现真正的技术了,命令敲起来ヾ(゚∀゚ゞ):

$ git restore --staged READEME.md
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   READEME.md

当我们执行 store --staged 命令后,再用 status 查看状态,会发现,文件已经变成 add 执行前的状态了。是的,这样咱们就彻底保住了工作。现在划重点,我们看下执行 git restore --staged READEME.md 到底发生了什么。

git restore --staged [file] : 表示从暂存区将文件的状态修改成 unstage 状态。当然,也可以不指定确切的文件 ,例如:
git restore --staged *.java 表示将所有暂存区的java文件恢复状态
git restore --staged . 表示将当前目录所有暂存区文件恢复状态
--staged 参数就是表示仅仅恢复暂存区的

问题总结接踵而至,如果我不们不止执行了 add 命令,还执行了 commit 命令。是不是也可以利用 restore 命令返回呢?答案是肯定的。下面,我们介绍几个命令。

image.png

可以看到,我我们又有错别字了,但是已经 commit 了,那么应该怎么办呢?

$ git restore -s HEAD~1 READEME.md  // 该命名表示将版本回退到当前快照的前一个版本
$ git restore -s 91410eb9  READEME.md  // 改命令指定明确的 commit id ,回退到指定的快照中
$ git reset --soft HEAD^  // 该命令表示撤销 commit 至上一次 commit 的版本

总结

本篇文章的所有重点都集中在一个命令上 restore ,该命令主要有三个参数,我重点介绍一下,restore 命令,默认是带着 --worktree 参数的

命令 作用 备注
git restore --worktree README.md 表示撤销 README.md 文件工作区的的修改 参数等同于 -W
git restore --staged README.md 表示撤销暂存区的修改,将文件状态恢复到未 add 之前 参数等同于 -S
git restore -s HEAD~1 README.md 表示将当前工作区切换到上个 commit 版本
git restore -s dbv213 README.md 表示将当前工作区切换到指定 commit id 的版本

推荐阅读更多精彩内容

  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 780评论 0 7
  • 其实使用git已经有两年多时间了,但是对Git的概念一直懵懵懂懂,平时常用的命令就那么几个,而且大部分的时候都是直...
    Claire_wu阅读 265评论 0 5
  • 转自:https://my.oschina.net/foreverich/blog/19215421. 如何创建一...
    逍遥无铭阅读 111评论 0 0
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    Im_Coder阅读 671评论 0 3
  • 前言 Git使用教程 Git是什么 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 ...
    90后的思维阅读 435评论 0 0