練習 - 使用 Git 來修正錯誤
現在,讓我們來進行一些修正錯誤的實作練習!
練習復原已刪除的檔案
首先,請嘗試刪除 index.html:
rm index.html
這看起來似乎不是個好主意,但請記住:Git 會協助您!
使用
ls
命令來確認 index.html 已刪除:ls
您應該會看見下列輸出。 請注意,現在沒有 index.html 檔案!
CSS
讓我們復原 index.html。 使用
git checkout
復原 index.html:git checkout -- index.html
再次使用
ls
來檢查目前目錄的內容。 index.html 是否已經還原?可以! 現在,輸出應該有一個 index.html 檔案和一個 CSS 目錄:
CSS index.html
練習復原已刪除的檔案:git rm
當想要復原已刪除的檔案時,如果您使用 git rm
刪除檔案,而不是使用 rm
,則會比較複雜一點。
若要查看發生什麼情況,請嘗試執行此命令:
git rm index.html
再次執行
ls
尋找 index.html。 您應該不會看到 index.html。嘗試以您上次執行的相同方式復原 index.html:
git checkout -- index.html
這一次,Git 抱怨說它對 index.html 一無所知。 這是因為 Git 不僅刪除了檔案,還將刪除操作記錄在索引中:
error: pathspec 'index.html' did not match any file(s) known to git.
使用
git reset
命令取消暫存 index.html 的刪除操作:git reset HEAD index.html
檢查此輸出,其會確認這點:
Unstaged changes after reset: D index.html
現在,您可以使用先前使用的命令,從索引中復原您的檔案:
git checkout -- index.html
git reset
取消暫存變更,但是檔案仍被刪除,因此您必須使用checkout
才能將它復原。執行
ls
再次檢查是否正常運作。
還原認可
現在,讓我們進行更複雜的作業。 假設您不小心以另一個檔案覆寫檔案,或對檔案進行變更,結果發現這是一個嚴重的錯誤。 您想要還原為先前的檔案版本,但您已認可變更。 在此情況下,簡單的 git checkout
無法解決問題。
這個問題的解決方法之一,就是還原先前的認可。
使用
code
開啟 index.html:code index.html
將 index .html 的內容取代為下列程式碼:
<h1>That was a mistake!</h1>
儲存後關閉檔案。
使用這些命令來認可變更,並顯示最新的認可:
git commit -m "Purposely overwrite the contents of index.html" index.html git log -n1
這裡的
-n1
旗標告知 Git,我們只想要最新的認可項目。使用下列命令來嘗試還原 index.html:
git checkout -- index.html
在編輯器中開啟 index.html:
code index.html
您看到哪個版本的 index.html? 舊版或新版?
在這種情況下,最佳做法是透過進行另一個認可來取消第一個認可,以還原變更。 這是
git revert
的作業。關閉檔案,並使用
git revert
復原已認可的變更:git revert --no-edit HEAD
--no-edit
旗標告知 Git,我們不想要為此動作新增認可訊息。檢查 輸出。 看起來應該如下列範例所示:
[main 6a27310] Revert "Purposely overwrite the contents of index.html" 1 file changed, 13 insertions(+), 1 deletion(-)
追蹤
git log
命令,以顯示最新的認可:git log -n1
再次檢查輸出。 看起來應該如下列範例所示:
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.
最後,開啟 index.html 檔案,確定內容是正確的版本。
還原並不是解決此情況的唯一方法,您還可以直接編輯 index.html 並認可已修正的檔案。 如果您所認可的變更很廣泛,則該選項會比較困難。 在任何情況下,git revert
都是指示您意圖的好方法。