- Git 教程
- Git - 主页
- Git - 基本概念
- Git - 环境设置
- Git - 生命周期
- Git - 创建操作
- Git - 克隆操作
- Git - 执行更改
- Git - 审查更改
- Git - 提交更改
- Git - 推送操作
- Git - 更新操作
- Git - 存储操作
- Git - 移动操作
- Git - 重命名操作
- Git - 删除操作
- Git - 修复错误
- Git - 标签操作
- Git - 补丁操作
- Git - 管理分支
- Git - 处理冲突
- Git - 不同的平台
- Git - 在线存储库
- Git 有用的资源
- Git - 快速指南
- Git - 有用的资源
- Git - 讨论
- 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 从本地存储库中删除了一个文件,并且我们希望恢复该文件。我们可以使用相同的命令来实现这一点。
[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 Reset 移动 HEAD 指针
进行一些更改后,您可能决定删除这些更改。Git重置命令用于重置或恢复更改。我们可以执行三种不同类型的重置操作。
下图显示了 Git 重置命令的图示。
柔软的
每个分支都有一个 HEAD 指针,它指向最新的提交。如果我们使用带有--soft选项的Git重置命令,后跟提交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重置--mixed。
难的
如果您在 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 状态显示该文件存在于暂存区域中。现在,使用 --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 <stdio.h>
head 命令还显示重置操作也删除了本地更改。