練習 - 使用 Git 來修正錯誤

已完成

現在,讓我們來進行一些修正錯誤的實作練習!

練習復原已刪除的檔案

  1. 首先,請嘗試刪除 index.html

    rm index.html
    

    這看起來似乎不是個好主意,但請記住:Git 會協助您!

  2. 使用 ls 命令來確認 index.html 已刪除:

    ls
    
  3. 您應該會看見下列輸出。 請注意,現在沒有 index.html 檔案!

    CSS
    
  4. 讓我們復原 index.html。 使用 git checkout 復原 index.html:

    git checkout -- index.html
    
  5. 再次使用 ls 來檢查目前目錄的內容。 index.html 是否已經還原?

    可以! 現在,輸出應該有一個 index.html 檔案和一個 CSS 目錄:

    CSS  index.html
    

練習復原已刪除的檔案:git rm

當想要復原已刪除的檔案時,如果您使用 git rm 刪除檔案,而不是使用 rm,則會比較複雜一點。

  1. 若要查看發生什麼情況,請嘗試執行此命令:

    git rm index.html
    
  2. 再次執行 ls 尋找 index.html。 您應該不會看到 index.html

  3. 嘗試以您上次執行的相同方式復原 index.html

    git checkout -- index.html
    
  4. 這一次,Git 抱怨說它對 index.html 一無所知。 這是因為 Git 不僅刪除了檔案,還將刪除操作記錄在索引中:

    error: pathspec 'index.html' did not match any file(s) known to git.
    
  5. 使用 git reset 命令取消暫存 index.html 的刪除操作:

    git reset HEAD index.html
    
  6. 檢查此輸出,其會確認這點:

    Unstaged changes after reset:
    D       index.html
    
  7. 現在,您可以使用先前使用的命令,從索引中復原您的檔案:

    git checkout -- index.html
    

    git reset 取消暫存變更,但是檔案仍被刪除,因此您必須使用 checkout 才能將它復原。

  8. 執行 ls 再次檢查是否正常運作。

還原認可

現在,讓我們進行更複雜的作業。 假設您不小心以另一個檔案覆寫檔案,或對檔案進行變更,結果發現這是一個嚴重的錯誤。 您想要還原為先前的檔案版本,但您已認可變更。 在此情況下,簡單的 git checkout 無法解決問題。

這個問題的解決方法之一,就是還原先前的認可。

  1. 使用 code 開啟 index.html

    code index.html
    
  2. index .html 的內容取代為下列程式碼:

    <h1>That was a mistake!</h1>
    
  3. 儲存後關閉檔案。

  4. 使用這些命令來認可變更,並顯示最新的認可:

    git commit -m "Purposely overwrite the contents of index.html" index.html
    git log -n1
    

    這裡的 -n1 旗標告知 Git,我們只想要最新的認可項目。

  5. 使用下列命令來嘗試還原 index.html

    git checkout -- index.html
    
  6. 在編輯器中開啟 index.html

    code index.html
    

    您看到哪個版本的 index.html? 舊版或新版?

    在這種情況下,最佳做法是透過進行另一個認可來取消第一個認可,以還原變更。 這是 git revert 的作業。

  7. 關閉檔案,並使用 git revert 復原已認可的變更:

    git revert --no-edit HEAD
    

    --no-edit 旗標告知 Git,我們不想要為此動作新增認可訊息。

  8. 檢查 輸出。 看起來應該如下列範例所示:

    [main 6a27310] Revert "Purposely overwrite the contents of index.html"
    1 file changed, 13 insertions(+), 1 deletion(-)
    
  9. 追蹤 git log 命令,以顯示最新的認可:

    git log -n1
    
  10. 再次檢查輸出。 看起來應該如下列範例所示:

    Author: User Name <user-name@contoso.com>
    Date:   Tue Nov 19 23:42:26 2019 +0000
    
    Revert "Purposely overwrite the contents of index.html"
    
    This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
    
  11. 最後,開啟 index.html 檔案,確定內容是正確的版本。

還原並不是解決此情況的唯一方法,您還可以直接編輯 index.html 並認可已修正的檔案。 如果您所認可的變更很廣泛,則該選項會比較困難。 在任何情況下,git revert 都是指示您意圖的好方法。