Git – 修复错误

Git – 修复错误

犯错是人之常情。所以每一个VCS都提供了一个修复错误的功能,直到某一个点。Git 提供了一个功能,我们可以用它来撤销对本地仓库所做的修改。

假设用户不小心对他的本地仓库做了一些修改,然后想撤消这些修改。在这种情况下, 还原 操作就发挥了重要作用。

撤销未提交的修改

让我们假设 Jerry 不小心修改了他本地版本库中的一个文件。但他想撤消他的修改。为了处理这种情况,我们可以使用 git checkout 命令。我们可以用这个命令来恢复一个文件的内容。

[jerry@CentOS src]pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src] git status -s
M string_operations.c

[jerry@CentOS src]git checkout string_operations.c

[jerry@CentOS src] git status –s

此外,我们可以使用 git checkout 命令从本地仓库获取一个被删除的文件。我们假设汤姆从本地仓库中删除了一个文件,而我们想要回这个文件。我们可以用同样的命令来实现这个目的。

[tom@CentOS src]pwd
/home/tom/top_repo/project/src

[tom@CentOS src] ls -1
Makefile
string_operations.c

[tom@CentOS src]rm string_operations.c

[tom@CentOS src] ls -1
Makefile

[tom@CentOS src]$ git status -s
D string_operations.c

Git在文件名前显示字母 D 。这表明该文件已经从本地仓库中删除。

[tom@CentOS src]git checkout string_operations.c

[tom@CentOS src] ls -1
Makefile
string_operations.c

[tom@CentOS src]$ git status -s

注意 - 我们可以在提交前执行所有这些操作。

从暂存区删除更改

我们已经看到,当我们执行添加操作时,文件会从本地仓库移到暂存区域。如果用户不小心修改了一个文件并将其添加到暂存区域,他可以通过使用 git checkout 命令来恢复他的修改。

在Git中,有一个HEAD指针,总是指向最新的提交。如果你想撤销暂存区的修改,那么你可以使用git checkout命令,但在checkout命令中,你必须提供一个额外的参数,即HEAD指针。额外的提交指针参数指示git checkout命令重置工作树,同时也删除了已缓存的修改。

让我们假设汤姆修改了他本地仓库中的一个文件。如果我们查看这个文件的状态,会发现该文件被修改了,但没有被添加到暂存区域。

tom@CentOS src]pwd
/home/tom/top_repo/project/src
# Unmodified file

[tom@CentOS src] git status -s

# Modify file and view it’s status.
[tom@CentOS src]git status -s
M string_operations.c

[tom@CentOS src] git add string_operations.c

Git状态显示该文件存在于暂存区,现在使用git checkout命令恢复它,并查看恢复后的文件状态。

[tom@CentOS src]git checkout HEAD -- string_operations.c

[tom@CentOS src] git status -s

用 Git 重置移动 HEAD 指针

在做了一些改动之后,你可能会决定删除这些改动。Git 的重置命令就是用来重置或恢复更改的。我们可以执行三种不同类型的重置操作。

下图显示了Git重置命令的图示。

Git - 修复错误

Soft

每个分支都有一个 HEAD 指针,它指向最新的提交。如果我们在使用Git reset命令时,在提交ID后面加上–软选项,那么它将只重置HEAD指针,而不会破坏任何东西。

.git/refs/heads/master 文件存储了 HEAD 指针的提交 ID。我们可以通过使用 git log -1 命令来验证它。

[jerry@CentOS project]$ cat .git/refs/heads/master
577647211ed44fe2ae479427a0668a4f12ed71a1

现在,查看最新的提交ID,它将与上述提交ID相匹配。

[jerry@CentOS project]$ git log -2

上述命令将产生以下结果。

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@tutorialspoint.com>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary


commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@tutorialspoint.com>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary

让我们重置HEAD指针。

[jerry@CentOS project]$ git reset --soft HEAD~

现在,我们只是将 HEAD 指针重新设置了一个位置。让我们检查一下 .git/refs/heads/master文件 的内容

[jerry@CentOS project]$ cat .git/refs/heads/master
29af9d45947dc044e33d69b9141d8d2dad37cc62

文件中的提交ID已经改变,现在通过查看提交信息来验证。

jerry@CentOS project]$ git log -2

上述命令将产生以下结果。

commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse <jerry@tutorialspoint.com>
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary


commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse <jerry@tutorialspoint.com>
Date: Wed Sep 11 10:08:01 2013 +0530

Added Makefile and renamed strings.c to string_operations.c

mixed

带有–混合选项的 Git 重置会恢复暂存区域中尚未提交的改动。它只恢复暂存区域的改动。对文件的工作副本所做的实际修改不受影响。默认的 Git 重置等同于 git reset — mixed。

hard

如果您在 Git reset 命令中使用 –hard 选项,它将清除暂存区域;它将把 HEAD 指针重置为特定提交 ID 的最新提交,并同时删除本地文件的更改。

让我们检查一下提交ID。

[jerry@CentOS src]pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src] git log -1

上述命令将产生以下结果。

commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <tom@tutorialspoint.com>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

Jerry修改了一个文件,在文件的开头添加了单行注释。

[jerry@CentOS src]$ head -2 string_operations.c
/* This line be removed by git reset operation */
#include <stdio.h>

他通过使用git status命令验证了这一点。

[jerry@CentOS src]$ git status -s
M string_operations.c

Jerry将修改过的文件添加到暂存区,并用git status命令进行验证。

[jerry@CentOS src]git add string_operations.c
[jerry@CentOS src] git status

上述命令将产生以下结果。

# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#
modified: string_operations.c
#

Git 状态显示该文件在暂存区域。现在,用 — 硬选项重置 HEAD。

[jerry@CentOS src]$ git reset --hard 577647211ed44fe2ae479427a0668a4f12ed71a1

HEAD is now at 5776472 Removed executable binary

Git重置命令成功了,这将从暂存区域恢复该文件,并删除对该文件所作的任何本地修改。

[jerry@CentOS src]$ git status -s

Git状态显示,该文件已经从暂存区恢复了。

[jerry@CentOS src]$ head -2 string_operations.c
#include <stdio.h>

头部命令还显示,重置操作也删除了本地变化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程