git復原某一次commit提交

2023-04-12 18:01:42

一、使用git rebase命令

如果您想徹底刪除 Git 中的某次提交的內容,可以使用 git rebase 命令並將該提交刪除。

以下是刪除 Git 提交內容的步驟:

  1. 找到要刪除的提交的雜湊值。可以使用 git log 命令檢視提交歷史記錄,然後找到要刪除的提交的雜湊值。

  2. 在終端中使用 git rebase -i 命令並指定要刪除的提交的雜湊值。例如,要刪除雜湊值為 abc123 的提交,您可以執行以下命令:

git rebase -i abc123~1
git rebase -i HEAD~1

  在這裡,abc123~1 表示要刪除的提交的前一個提交。

  1. 然後 Git 會開啟一個互動式編輯器,並顯示一個類似於下面的文字:
pick abc123 commit message
pick def456 another commit message
pick ghi789 yet another commit message
  1. 將要刪除的提交所在的行的單詞 pick 替換為單詞 drop。例如,如果要刪除 abc123,則應將第一行更改為:
drop abc123 commit message
  1. 儲存更改並關閉編輯器。

  2. 然後 Git 會自動重播您的提交,並在重播時跳過要刪除的提交。如果需要,您可能需要解決任何衝突,並提交最終更改。

注意,使用 git rebase 命令來刪除提交可以永久刪除提交併更改 Git 歷史記錄。如果您不確定如何使用 git rebase 命令,建議在使用前備份您的 Git 儲存庫。

 

二、使用git revert命令

使用 git revert 命令可以復原指定提交的更改,並建立一個新的提交來保留已復原的更改的歷史記錄。

以下是使用 git revert 復原提交的步驟:

  1. 找到要復原的提交的雜湊值。可以使用 git log 命令檢視提交歷史記錄,然後找到要復原的提交的雜湊值。

  2. 在終端中使用 git revert 命令並指定要復原的提交的雜湊值。例如,要復原雜湊值為 abc123 的提交,您可以執行以下命令:

git revert abc123
  1. 然後 Git 會開啟一個編輯器,讓您輸入此次復原提交的註釋。如果您希望使用預設註釋,請直接關閉編輯器。

  2. 最後,Git 將建立一個新的提交,用於復原您要復原的提交所做的更改。這個新的提交將保留已復原的更改的歷史記錄。您可以使用 git log 命令檢查您的提交歷史記錄以確認復原操作已成功完成。

需要注意的是,使用 git revert 命令復原提交會建立一個新的提交,這意味著您的 Git 歷史記錄將包含一個新的提交來保留已復原的更改的歷史記錄。這與使用 git reset 命令刪除提交不同,後者會直接刪除提交及其歷史記錄。

 

三、使用git reset命令

使用 git reset 命令可以將當前分支的 HEAD 指標移到任意提交,從而使您能夠刪除 Git 儲存庫中的提交。

以下是使用 git reset 刪除提交的步驟:

  1. 找到要刪除的提交的雜湊值。可以使用 git log 命令檢視提交歷史記錄,然後找到要刪除的提交的雜湊值。

  2. 使用以下命令來刪除該提交:

git reset --hard <commit-hash>

 

其中 <commit-hash> 是您要刪除的提交的雜湊值。

  1. 執行此命令後,Git 將刪除所有在該提交之後進行的更改,並將您的當前分支 HEAD 指標移動到要刪除的提交上。

需要注意的是,使用 git reset 命令刪除提交會更改 Git 儲存庫的歷史記錄,這意味著您的提交歷史記錄將會被修改。因此,您應該謹慎使用此命令,並確保您已經瞭解了刪除提交的後果。

另外,請注意,使用 git reset --hard 命令刪除提交時,將會刪除該提交及其之後的所有更改。如果您只想刪除該提交本身而不影響其他更改,請使用 git reset --soft 命令。這將將 HEAD 指標移到要刪除的提交上,但不會更改 Git 儲存庫中的檔案或資料夾。這樣,您就可以重新提交您想要保留的更改

  4.如果您已經將更改推播到 Git 儲存庫的遠端分支,並且想要刪除提交,可以使用 git push --force 命令將更改強制推播到遠端分支。但是,請注意,強制推播會更改遠端分支的歷史記錄,並且可能會影響其他人正在使用的分支。因此,在進行強制推播之前,應該確保其他人知道並同意這樣做。

使用以下命令將更改強制推播到遠端分支:

git push --force <remote-name> <branch-name>  

其中 <remote-name> 是遠端倉庫的名稱,<branch-name> 是要推播更改的分支名稱。此命令將強制將更改推播到遠端分支,並覆蓋遠端分支的歷史記錄。如果其他人正在使用該分支,則可能需要通知他們進行相應的更改。

請注意,強制推播更改可能會對其他人造成影響,因此應該謹慎使用。如果您想要刪除提交,但不想對其他人造成影響,則可以使用 git revert 命令來撤消該提交所做的更改,而不會修改 Git 儲存庫的歷史記錄。