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指针。附加的commit pointer参数指示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状态显示该文件存在于暂存区域中,现在使用git checkout命令将其还原并查看还原文件的状态。 [tom@CentOS src]$ git checkout HEAD -- string_operations.c [tom@CentOS src]$ git status -s 使用Git Reset移动HEAD指针 进行少量更改后,您可以决定删除这些更改。Git reset命令用于重置或还原更改。我们可以执行三种不同类型的重置操作。 下图显示了Git reset命令的图形表示。 柔软的 每个分支都有一个HEAD指针,指向最新的提交。如果我们使用Git reset命令和-- soft选项后跟提交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@codingdict.com> Date: Wed Sep 11 10:21:20 2013 +0530 Removed executable binary commit 29af9d45947dc044e33d69b9141d8d2dad37cc62 Author: Jerry Mouse <jerry@codingdict.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@codingdict.com> Date: Wed Sep 11 10:16:25 2013 +0530 Added compiled binary commit 94f7b26005f856f1a1b733ad438e97a0cd509c1a Author: Jerry Mouse <jerry@codingdict.com> 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 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@codingdict.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 reset命令成功,它将从暂存区域还原文件,并删除对该文件所做的任何本地更改。 [jerry@CentOS src]$ git status -s Git状态显示文件已从暂存区域还原。 [jerry@CentOS src]$ head -2 string_operations.c #include <stdio.h> head命令还显示重置操作也删除了本地更改。 Git删除操作 Git标签操作