Git学习之回退撤销


Git学习之回退撤销操作


Git是一个版本控制工具,所以灵活的回退或者撤销操作是必不可少的, 这里你将学到几个将操作撤销,或者将文件回滚的操作。但是注意,有一些操作时时不能撤销。下面我们先认识下总体的操作示意图:
Git学习之回退撤销
由上图我们可以知道,总体的操作汇总:

  • git add命令用于把工作目录的文件放入暂存区域
  • git commit 命令用于把暂存区域的文件提交到 Git 仓库
  • git reset 命令用于把 Git 仓库的文件还原到暂存区域
  • git checkout命令用于把暂存区域的文件还原到工作目录


这里我们学习的重点时resetcheckout命令

1.首先是reset命令

reset命令有三个选项,语法:git reset <选项> HEAD/快照ID<~>,其中<快照ID/HEAD> 默认是HEAD,~表示回退的版本数,也可以表达~N,

  • --soft
  • --mixd默认,不加选项就是mixd
  • --hard

    手册里是这样描述的:
    Git学习之回退撤销
  1. 如果你是使用--soft选项,仅仅是改变HEAD指针的指向,实际上是撤销上一次commit,暂存区和工作区都没有改变
    Git学习之回退撤销
  2. 如果你是使用默认选项,那么HEAD指针会指向上一个快照,然后将这个上个快照复制到暂存区,暂存区的内容会被覆盖,工作区不会改变。
    Git学习之回退撤销
  3. 如果你使用–hard选项,那么这个操作会改变HEAD指针指向上一个快照,同时将上一个快照的内容复制到暂存区和工作区,暂存区和工作区原先的内容会被覆盖,这带有一点的危险性,因为覆盖的工作区文件不可撤销。
    Git学习之回退撤销

初次之外reset还有以下功能:

  • 回滚到指定的快照 只需要将HEAD换成你想回退的快照ID,语法:git reset 指定的快照ID
  • 回滚某个文件,这个操作并不会改变HEAD的指向,因为你只是回滚快照的一部分内容,语法:git reset 快照 文件名/路径
  • 还可以向前滚,直选将快照换成你想滚到的快照,语法:git reset 快照

如果操作失误,错误的使用git reset --hard回滚,使得工作目录改变了,可以使用git reflog,看到相应的快照,可以回滚回去。


2. 其次是checkout命令

这个命令有两个功能:一个是撤消对文件的修改;一个是切换分支,分支后面会说到,这里我们先了解它的撤消对文件的修改

它实际上将暂存区的文件内容覆盖到工作目录下
Git学习之回退撤销
我们用diff命令查看下差别:
Git学习之回退撤销
我们用checkout从暂存区回滚到工作区:
Git学习之回退撤销
可以看到已经回退到暂存区保存的状态

参考于小甲鱼博客和Git手册,用于学习的目的,水平有限,有错误的地方可以联系邮箱:[email protected]
一缕清风