个性化阅读
专注于IT技术分析

深入Git开发:Git修复错误详细操作步骤

上一章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命令的图示。

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状态显示文件已经从暂存区恢复,使用head -2命令还会显示重置操作也删除了本地更改。

赞(0)
未经允许不得转载:srcmini » 深入Git开发:Git修复错误详细操作步骤

评论 抢沙发

评论前必须登录!