上一章Git教程请查看: Git仓库之stash操作、移动、rename和删除操作
人非圣贤,孰能无过,而每个VCS都提供一个特性来修复错误,直到某个特定的点,Git提供了这一个功能,我们可以使用它来撤销对本地仓库所做的修改。
假设用户意外地对其本地仓库进行了一些更改,然后希望撤消这些更改,在这种情况下,恢复操作起着重要的作用。
一、恢复未提交的更改让我们假设UserB不小心修改了本地仓库中的一个文件,但是他想撤销他的修改。为了处理这种情况,我们可以使用git checkout命令,我们可以使用这个命令来恢复文件的内容。
$ pwd$ git status -s$ git checkout string_operations.c$ git status –s
此外我们可以使用git checkout命令从本地仓库获取已删除的文件,让我们假设UserA从本地仓库中删除了一个文件,并希望恢复该文件,我们可以通过使用相同的命令来实现这一点。
$ pwd$ ls -1
Makefile
string_operations.c$ rm string_operations.c$ ls -1
Makefile$ git status -s
D string_operations.c
Git在文件名之前显示字母D,这表明文件已从本地仓库中删除。
$ git checkout string_operations.c$ ls -1
Makefile
string_operations.c$ git status -s
注意我们可以在提交之前执行所有这些操作。
二、从暂存区删除更改我们已经看到在执行添加操作时,文件从本地仓库移动到暂存区,如果用户不小心修改了一个文件并将其添加到暂存区,那么他可以使用git checkout命令恢复他的更改。
在Git中有一个头指针总是指向最新的提交,如果你希望撤消对暂存区域的更改,那么你可以使用git checkout命令,但是在使用checkout命令时,你必须提供一个附加参数,即HEAD头部指针。附加的提交指针参数指示git checkout命令重置工作树,并删除暂存的更改。
让我们假设UserA修改了本地仓库中的一个文件,如果我们查看这个文件的状态,它将显示文件被修改了,但是没有添加到暂存区域。
$ pwd$ git status -s$ git status -s
M string_operations.c$ git add string_operations.c
Git status显示文件在暂存区域中,现在使用Git checkout命令恢复文件并查看恢复文件的状态。
$ git checkout HEAD -- string_operations.c$ git status -s
三、移动头部指针与Git rest重置在做了一些更改之后,你可能决定删除这些更改,Git reset命令用于重置或还原更改,我们可以执行三种不同类型的重置操作。
下图显示了Git reset命令的图示。
文章图片
文章图片
1、软重置—soft
每个分支都有一个指向最新提交的HEAD指针,如果我们使用带有– soft选项和提交ID的Git reset命令,那么它只会重置HEAD指针而不会破坏任何东西。
.git/refs/heads/主文件存储头指针的提交ID,我们可以使用git log -1命令来验证它。
$ cat .git/refs/heads/master
现在查看最新的提交ID,它将与上面cat显示的提交ID匹配。
$ git log -2
下面让我们重置HEAD头指针。
$ git reset --soft HEAD~
现在我们只需将HEAD指针复位一个位置,让我们检查一下.git/refs/heads/master文件的内容。
$ cat .git/refs/heads/master
可以看到文件的提交ID被更改,现在通过查看提交消息来验证它。
$ git log -2
2、混合mixed重置
Git混合—mixed重置选项将从暂存区域中还原那些尚未提交的更改,它仅从暂存区恢复更改,对文件的工作副本所做的实际更改不受影响,默认的Git重置相当于Git重置– mixed。
3、硬重置– hard
如果在Git reset命令中使用– hard选项,它将清除暂存区域,它将把头指针重置为特定提交ID的最新提交,并删除本地文件更改。
让我们检查提交ID。
$ pwd
/home/src$ git log -1
在这里UserB可以通过在文件开头添加单行注释来修改文件。
$ head -2 string_operations.c
他使用git status命令进行了验证。
$ git status -s
M string_operations.c
UserB将修改后的文件添加到暂存区域,并使用git status命令验证它。
$ git add string_operations.c
$ git status
Git status显示文件在暂存区域中,现在使用reset HEAD与—hard选项。
$ git reset --hard {SHA}
这里Git reset命令成功,它将从暂存区域恢复文件,并删除对文件所做的任何本地更改。
$ git status -s
【深入Git开发(Git修复错误详细操作步骤)】Git状态显示文件已经从暂存区恢复,使用head -2命令还会显示重置操作也删除了本地更改。
推荐阅读
- 深入Git开发(Git标签tag操作和补丁patch操作详解)
- 深入Git开发(Git仓库之stash操作、移动、rename和删除操作详解)
- 深入Git开发(Git远程仓库之push推送和update更新操作详解)
- 深入Git开发(Git更改操作之执行更改、查看更改和提交更改)
- 深入Git开发(Git生命周期和Git远程仓库操作详解)
- 深入Git开发(linux Git环境部署和自定义Git环境详解)
- git|gitee
- git|青龙脚本合集(不定期更新版)
- 互联网|Git基础常用功能