修复错误

收藏890

阅读5052

更新时间2025-08-21

犯错是人。 因此,每个 VCS 都提供了一个功能来修复错误直到某个点。 Git 提供了一项功能,我们可以使用它来撤消对本地存储库所做的修改。

假设用户不小心对其本地存储库进行了一些更改,然后想要撤消这些更改。 在这种情况下,revert 操作起着重要作用。


还原未提交的更改

让我们假设 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 从本地存储库中删除了一个文件,并且我们想要恢复该文件。 我们可以通过使用相同的命令来实现这一点。

[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 从他的本地存储库中修改了一个文件。 如果我们查看这个文件的状态,它会显示该文件被修改但没有添加到暂存区。

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 status 显示文件存在于暂存区,现在使用 git checkout 命令恢复它并查看恢复文件的状态。

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

[tom@CentOS src]$ git status -s

使用 Git 重置移动 HEAD 指针

在进行一些更改后,您可能会决定删除这些更改。 Git 重置命令用于重置或恢复更改。 我们可以执行三种不同类型的重置操作。

下图是 Git 重置命令的图示。

git Tutorial git Tutorial

Soft

每个分支都有一个 HEAD 指针,指向最新的提交。 如果我们使用带有 --soft 选项后跟提交 ID 的 Git 重置命令,那么它只会重置 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 
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

commit 29af9d45947dc044e33d69b9141d8d2dad37cc62
Author: Jerry Mouse 
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 
Date: Wed Sep 11 10:16:25 2013 +0530

Added compiled binary

commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a
Author: Jerry Mouse 
Date: Wed Sep 11 10:08:01 2013 +0530

Added Makefile and renamed strings.c to string_operations.c

mixed

带有 --mixed 选项的 Git 重置会从暂存区域恢复那些尚未提交的更改。 它仅恢复暂存区域的更改。 对文件工作副本所做的实际更改不受影响。 默认的 Git 重置等价于 git reset --mixed。

hard

如果在 Git 重置命令中使用 --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 
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 

他使用 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 ..." to unstage)
#
#
modified: string_operations.c
#

Git 状态显示文件存在于暂存区。 现在,使用 --hard 选项重置 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 

head 命令还显示重置操作也删除了本地更改。

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号