用Git拯救一天並從提交歷史中刪除

在使用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 替換為您喜歡的文件夾路徑和名稱。

# 創建存儲庫文件夾和 repo1 子文件夾
mkdir -p ~/Desktop/Repository/repo1
# 將工作目錄更改為 repo1
cd ~/Desktop/Repository/repo1

3. 執行以下命令來初始化您的存儲庫並創建兩個名為 test1.txttest2.txt 的文本文件。

# 初始化本地存儲庫(創建一個 .git 隱藏文件夾)
git init
# 創建兩個文本文件
touch test_file1.txt test_file2.txt
Initializes the local repository

4. 現在,執行以下命令來檢查 Git 提交的狀態。

git status

執行命令後,您會注意到提交是未跟踪的,還沒有提交,如下所示。

Checking the status of Git commits on the Git terminal

5. 執行以下 git add 命令來將您在步驟三中創建的兩個文本文件(test_file1.txttest_file2.txt)添加到您的本地存儲庫中。

此命令不提供輸出,但會將文件添加到本地存儲庫中而不將其推送到遠程存儲庫。

git add .

6. 接下來,執行以下 git commit 命令,以便 Git 記錄您在本地存儲庫中所做的進度和更改。

git commit -m "Adding two new files test_file1.txt and text_file2.txt"
Committing Changes to Repository

7. 提交後,運行以下命令從 Git 提交中刪除特定文件(test_file2.txt)。

git rm --cached test_file2.txt
Removing a Specific File from the Git Commit

8. 最後,重新運行下面的 git status 命令來驗證儲存庫的狀態。

git status

如下所示,該文件已從暫存區(Git 提交)中刪除,並在未跟踪文件中顯示該文件(test_file2.txt)。

Verifying the Removed Git Commit (test_file2.txt)

刪除最近提交的所有文件

您剛剛學會了從 Git 提交中刪除特定文件。但通常情況下,您需要刪除多個文件,Git 可以通過 git reset 命令來完成此任務。git reset 命令是一個複雜但同時也非常靈活的用於撤銷儲存庫中的更改的工具。

要了解 git reset 的工作原理,您將提交幾個文件,然後重置更改以刪除存儲在 Git 提交中的最近提交的文件:

1. 在 ~/桌面/儲存庫/repo1 文件夾中創建兩個名為 test_file3.txt 和 test_file4.txt 的新文本文件。

touch test_file3.txt test_file4.txt

2. 接下來,運行下面的 git add 命令,該命令不會提供輸出,但會將新文本文件添加到您的本地儲存庫(~/桌面/儲存庫/repo1)。

git add .

3. 運行下面的 git commit 命令來提交文件,以便 Git 跟踪您在儲存庫中所做的進度和更改。

git commit -m "Adding two more files"
Committing Changes to the Repository

4. 現在,執行以下命令來驗證本地儲存庫的狀態。

git status

如下所示,輸出顯示沒有要提交的內容,表示儲存庫中的一切都正常。

Checking the Status of Git Commits

5. 接下來,執行以下 git reset 命令來恢復在第三步中最近所做的提交。這個命令不會提供輸出,但會刪除文件 test_file3.txttest_file4.txt

git reset --soft HEAD~1

你也可以使用 git reset –soft HEAD^ 來刪除到目前為止提交的所有文件。

6. 接下來,重新執行以下 git status 命令來驗證儲存庫的狀態。

git status

下面的輸出顯示需要提交的文件 test_file3.txt 和 test_file4.txt。這個輸出表示這些文件需要從 Git 提交中刪除。

Verifying the Recent Commits were Removed

從 Git 歷史中刪除特定的提交

如果你希望從一個乾淨的起點開始,刪除所有已提交的文件就像魔法一樣。但是如果你只需要刪除特定的提交呢?只要你知道提交的 ID,git revert 命令就能派上用場。

在“刪除所有最近提交的文件”一節的最後一步中,你注意到提交並沒有被提交,而是被更改了。現在,你將提交這些更改,以查看 git revert 命令的效果。

執行以下 git commit 命令,將最近的更改提交到你的本地儲存庫中。

git commit -m "Hello, I am committing those two files again"

執行命令後,你會注意到兩個文本文件再次被提交,提交ID是 0315b85,如下所示。

Committing the Changes in the Local Repository

現在,執行下面的 git revert 命令來撤銷你在上一步驟中進行的提交。請確保將 0315b85 替換為你的提交ID。

git revert 0315b85

下面,你可以看到你最近提交的兩個文件已被刪除。

Reverting the Changes in the Local Repository

從 Git 提交歷史中刪除目錄

到目前為止,你已經知道如何刪除已提交的文件,但是如何刪除目錄呢?從 Git 提交中刪除目錄與刪除文件類似。

1. 執行以下命令,不提供輸出但執行以下操作:

  • 在你的本地儲存庫中(~/Desktop/Repository/repo1)創建一個名為 myfolder 的文件夾。
  • ~/Desktop/Repository/repo1/myfolder 文件夾中創建一個名為 l.txt 的文件。
mkdir myfolder && touch myfolder/l.txt

2. 接下來,執行以下 git 命令將新文件夾(~/Desktop/Repository/repo1/myfolder)添加到你的本地儲存庫中。

git add .
git commit -m "Adding folder"
Adding the new folder (folder) to the Local Repository

3. 執行以下 git rm 命令來刪除你在第二步中提交的文件夾(myfolder)。

git rm -r myfolder/
Removing the New Folder (folder) in Git Commit

4. 最後,執行 git status 命令來驗證儲存庫的狀態,並查看文件夾是否已被刪除。

git status

下面,你可以看到整個文件夾(myfolder)已成功刪除,以及其中的 l.txt 文件。

Verifying the Folder (myfolder) Has Been Removed Successfully

結論

在這個教程中,你已經學會了如何處理 Git 提交,比如刪除特定的提交、文件或多個文件。你也接觸到了刪除本地存儲庫中整個文件夾並提交更改的方法。

到目前為止,你可以自信地提交存儲庫的更改,並刪除你認為不必要的提交,而不會搞亂事情。

根據你在本教程中所學到的知識,你認為哪種方法對於團隊處理提交會更加出色呢?

Source:
https://adamtheautomator.com/git-and-remove-from-commit/