📜  我错误地删除了代码,我可以通过 git 命令检索 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:39:39.638000             🧑  作者: Mango

通过 Git 命令检索误删除的代码

如果你是一名程序员,那么一定会遇到这样的情况:在代码编辑过程中不小心将一些代码删除了,但你又不知道已经删除了哪些,甚至已经提交到了 Git 仓库。这时,Git 提供了一些命令可以帮助你找回被误删除的代码。

1. 使用 git log 查看历史提交记录

我们可以通过 git log 命令查看最近的提交记录,以确定被删除代码的最后一个版本。在命令行窗口中键入 git log,Git 会返回一个包含所有提交记录的列表,如下所示:

commit c4938fb3fc3e38fc0def864fc2c6b983a6b021c5 (HEAD -> master)
Author: John Smith <john.smith@example.com>
Date:   Mon Sep 13 09:23:19 2021 +0800

    Implemented new feature

commit fd88b419e90bfdce3656e0600f641b33e02ee4d7
Author: John Smith <john.smith@example.com>
Date:   Sat Sep 11 16:28:51 2021 +0800

    Refactor code

commit a8b343ab0b0c79adb565611d2608ad7454fe488f
Author: John Smith <john.smith@example.com>
Date:   Fri Sep 10 21:10:34 2021 +0800

    Fixed bug

注意到每个提交记录有一个唯一的哈希值,例如 c4938fb3fc3e38fc0def864fc2c6b983a6b021c5。 Git 使用这个哈希值来标识每个提交记录。

2. 使用 git show 查看提交记录的详情

一旦找到包含被删除代码的提交记录,我们可以使用 git show 命令来查看提交记录的详细信息,包括被删除的代码。键入 git show 命令,后跟我们找到的最近的提交记录哈希值,例如:

git show c4938fb3fc3e38fc0def864fc2c6b983a6b021c5

Git 会返回详细信息,包括提交记录的作者、日期、描述,以及所有在这个提交记录中修改过的文件和代码变更,例如:

commit c4938fb3fc3e38fc0def864fc2c6b983a6b021c5 (HEAD -> master)
Author: John Smith <john.smith@example.com>
Date:   Mon Sep 13 09:23:19 2021 +0800

    Implemented new feature

diff --git a/app.py b/app.py
index 4c1f4b4..6177d4a 100644
--- a/app.py
+++ b/app.py
@@ -12,6 +12,8 @@ app = Flask(__name__)

 @app.route("/")
 def home():
+    print("This code was accidentally deleted and then recovered!")
+
     return "Hello, World!"

我们可以看到,在这个提交记录中,作者在 app.py 文件中添加了一行代码:print("This code was accidentally deleted and then recovered!")。这就是我们想要找回的被删除的代码!

3. 使用 git checkout 恢复被删除的代码

一旦找到了被删除的代码所在的提交记录和文件,我们就可以使用 git checkout 命令来恢复被删除的代码。例如,在上一个例子中,如果我们想恢复 app.py 文件中被误删的一行代码,可以在命令行中执行以下命令:

git checkout c4938fb3fc3e38fc0def864fc2c6b983a6b021c5 app.py

这会将存储在哈希值为 c4938fb3fc3e38fc0def864fc2c6b983a6b021c5 的提交记录中的 app.py 文件还原到当前工作目录。现在我们可以再次打开 app.py 文件,就会发现被误删的代码已经恢复了!

以上就是使用 Git 命令恢复被删除代码的方法。在工作中,这种情况可能会经常发生,因此这些命令对于维护代码库的开发人员来说应该很熟悉。