你在使用Git时遇到过任何错误或提交问题吗?也许一个错误的秘密或敏感数据已经被保存了。幸运的是,你可以使用Git处理你的文件,从提交中移除并修复历史记录。
如果你已经进行了多次提交或克隆了一个已经存在提交历史记录的仓库,通常你会想回顾一下都有哪些提交。在这个教程中,你将学习如何从Git历史记录中移除一个条目。
继续阅读,用Git挽回局面吧!
先决条件
本教程包含逐步说明。如果你想跟着做,请确保你已经准备好了以下内容:
- A local machine to test the Git commands – This tutorial uses Windows 10, but later versions will also work.
- Git Bash – 本教程使用的是Git Bash 2.36。
从Git提交中移除文件
当你在团队中使用Git工作时,你每天会进行数百次提交。因此,有很高的机率你可能需要撤销特定的提交,比如由于一个错误的文件或多个文件。这种需求通常是由于代码或配置的更改而引起的,并且会成为一个问题。
为了解决这个问题,你需要运行Git命令从Git提交中移除文件或多个文件。你将使用一个流行的工具来从Git提交中移除单个文件,即Git Bash工具。
1. 在您的Windows计算机上打开Git Bash工具。
2. 然后,运行下面的命令创建一个存储库文件夹并切换到该文件夹。这些命令在终端上不会提供输出。但请确保将 ~/Desktop/Repository/repo1 替换为您喜欢的文件夹路径和名称。
3. 运行以下命令初始化您的存储库并创建两个名为test1.txt和test2.txt的文本文件。

4. 现在,执行下面的命令检查Git提交的状态。
执行命令后,您会注意到提交是未跟踪的,尚未提交,如下所示。

5. 运行下面的git add命令,将在第三步中创建的两个文本文件(test_file1.txt和test_file2.txt)添加到您的本地存储库。
此命令不提供输出,但将文件添加到本地存储库而不将其推送到远程存储库。
6. 接下来,运行下面的git commit命令,以便Git跟踪您在本地存储库中进行的进展和更改。

7. 提交后,运行以下命令从 Git 提交中删除特定文件(test_file2.txt)。

8. 最后,重新运行下面的 git status 命令,验证仓库的状态。
正如下面所示,该文件已从暂存区(Git 提交)中移除,并显示该文件(test_file2.txt)在未跟踪文件下。

移除所有最近提交的文件
您刚刚学会了从 Git 提交中删除特定文件。但通常,您可能需要删除多个文件,而 Git 可以通过git reset命令完成此任务。git reset 命令是一个复杂但同时多才多艺的工具,用于撤消仓库中的更改。
为了了解 git reset 如何工作,您将提交两个文件,然后重置更改以删除存储在 Git 提交中的最近提交的文件:
1. 在~/Desktop/Repository/repo1文件夹中创建两个名为test_file3.txt和test_file4.txt的新文本文件。
2. 接下来,运行以下 git add 命令,该命令不提供输出,但将新文本文件添加到您的本地仓库(~/Desktop/Repository/repo1)。
3. 运行以下 git commit 命令,以提交文件,使 Git 跟踪仓库中的进展和您所做的更改。

4. 现在,请运行以下命令来验证本地仓库的状态。
如下所示,输出显示没有要提交的消息,表示仓库中的一切都就绪。

5. 接下来,运行以下git reset命令,以撤销在第三步中最近进行的提交。这个命令不会提供输出,但会移除文件test_file3.txt和test_file4.txt。
您还可以使用git reset –soft HEAD^命令,以移除直到现在已提交的所有文件。
6. 接下来,重新运行以下git status命令,以验证仓库的状态。
下面,输出显示文件test_file3.txt和test_file4.txt需要被提交。这个输出表示这些文件需要从Git提交中移除。

从Git历史中移除特定提交
如果您想从干净的状态开始,删除所有已提交的文件是个好办法。但是如果您只需要删除特定的提交呢?git revert命令将是解决方案,只要您知道提交的ID。
在“移除最近提交的所有文件”部分的最后一步中,您注意到提交并未提交,而是发生了更改。现在,为了查看git revert
命令的效果,您将提交这些更改。
运行以下git commit
命令,以提交本地仓库的最新更改。
执行命令后,您会注意到两个文本文件已经再次提交,并且提交 ID 是 0315b85, 如下所示。

现在,运行以下 git revert
命令以撤销您在上一步中进行的提交。确保用您提交的 ID 替换 0315b85
。
下面,您可以看到您最近提交的两个文件已被删除。

从Git提交历史中删除目录
到目前为止,您已经知道如何删除已提交的文件,但是删除目录呢?从Git提交中删除目录类似于删除文件。
1. 运行下面的命令,它们不提供输出但执行以下操作:
- 在本地存储库内创建一个名为
myfolder
的文件夹(~/Desktop/Repository/repo1)。
- 在 ~/Desktop/Repository/repo1/myfolder 文件夹内创建一个名为 l.txt 的文件。
2. 接下来,运行以下git命令将新文件夹(~/Desktop/Repository/repo1/myfolder)添加到您的本地存储库中。

3. 运行以下git rm命令以删除您在第二步中提交的文件夹(myfolder)。

4. 最后,运行git status命令验证存储库的状态,并查看文件夹是否已被删除。
下面,您可以看到整个文件夹(myfolder)以及其中的l.txt文件已成功删除。

结论
在本教程中,您已经学会了如何处理Git提交,例如删除特定的提交、文件或多个文件。您还涉及了在本地存储库中删除整个文件夹并提交更改。
到目前为止,您可以自信地提交对存储库的更改并删除您认为不必要的提交,而不会弄乱事情。
根据您在本教程中学到的知识,您认为哪种方法对团队处理提交可能非常出色呢?
Source:
https://adamtheautomator.com/git-and-remove-from-commit/