Git 撤销回退
Refference:
https://git-scm.com/docs/git-reset
Recommend:
http://marklodato.github.io/visual-git-guide/index-zh-cn.html
本节主要讲版本回退,按照笔者自己的理解,可以分为两个类别:
- 远程版本回退
- 本地版本回退
- 远程版本和本地版本同时回退
git reset - 重置当前版本到指定的状态
-
命令
git reset [-q] [] [--] ... git reset (--patch | -q) [ ] [--] [ ...] git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [ ] -
描述 git reset [<mode>] [<commit>]
重置当前分支的HEAD到指定的版本(这里commit改为commit-id更为合适),根据指定的模式mode可能会更新暂存区(index)和工作区。默认模式为mixed。- –soft
不改变暂存区和工作区,但是重置当前版本库到指定的版本。这就相当于所有改变了的文件处于待提交状态(Changes to be committed)。 - –mixed
回退到指定的版本,暂存区也回退到指定版本,但是工作区不变(相对于回退版本,所有改变的文件都处于未标记为提交的状态),并且会显示待提交的文件。 - –hard
重置版本库、暂存区以及工作区到指定的版本。在工作区中所有提交的文件都会被丢弃。
- –soft
例子
-
撤销add操作
$ git add examples.txt
$ git reset
add之后,暂存区已经改变。所以撤销add操作就是重置暂存区的数据。使用git reset命名默认的模式,即可重置暂存区。 -
撤销commit操作(远程版本回退,本地仓不变)
$ git commit …
$ git reset –soft HEAD^
$ edit
$ git commit -a -c ORIG_HEAD
如果commit之后发现提交不完整或有错误等,可以回退commit操作之后,对文件进行修改制作,再执行commit操作 -
撤销commit操作(远程版本以及本地版本同时回退)
$ git commit …
$ git reset –hard HEAD~3
本地和远程仓库都会指定的版本HEAD~3(HEAD~3表示回退到前3个版本),所以hard选项要慎用! -
撤销单个文件的commit
$ git reset – examples.txt
$ git commit -m “commit files in index without examples.txt”