切換語言為:簡體

如何撤銷已提交(已push和已commit)的 Git 程式碼

  • 爱糖宝
  • 2024-10-30
  • 2039
  • 0
  • 0

Git 是一個被廣泛使用的版本控制系統,能夠幫助開發者靈活地管理程式碼。但是,有時我們可能需要撤銷已經提交的程式碼。本篇文章將詳細介紹如何使用 Git 命令來撤回已提交但尚未推送的程式碼,以及在不同情境下的最佳實踐。

在以下一些常見情況下,可能需要撤銷已提交的程式碼:

  1. 不小心提交了包含密碼或 API 金鑰的程式碼。

  2. 提交的程式碼不完整或存在問題,需要進一步修改。

  3. 提交資訊填寫錯誤,需要重新整理。

  4. 將個人配置檔案或私有依賴提交到共享倉庫,影響團隊協作。

  5. 想將多次零散的提交合併爲一個更有意義的提交。

在這些情況下,Git 撤回功能非常有用,可以幫助你修正錯誤、最佳化提交歷史,並保持程式碼庫的整潔和安全。

Git Reset 模式

git reset 命令有三種主要模式用於撤銷提交:--soft--mixed--hard

  • --soft:撤銷提交,但保留暫存區的狀態,適用於需要保留程式碼改動的情況。

  • --mixed(預設):撤銷提交併清除暫存區的狀態,但保留工作目錄中的程式碼改動。

  • --hard:刪除提交併刪除工作目錄中的程式碼改動。

選擇合適的模式非常重要,尤其在使用 --hard 模式時要特別謹慎,因為它可能導致程式碼無法恢復的丟失。

如何撤銷已提交(commit)的程式碼

基本撤銷方法

可以使用 git reset 命令來撤銷提交,根據不同需求,有以下三種模式:

--soft 模式
  • 不刪除工作目錄中的程式碼改動。

  • 只撤銷提交,保留暫存區的狀態。

  • 使用命令:

    git reset --soft HEAD^

--mixed 模式(預設)
  • 不刪除工作目錄中的程式碼改動。

  • 撤銷提交和暫存區的狀態。

  • 使用命令:

    git reset HEAD^

    git reset --mixed HEAD^

--hard 模式
  • 刪除工作目錄中的程式碼改動。

  • 撤銷提交和暫存區狀態。

  • 使用命令:

    git reset --hard HEAD^

撤銷指定的提交版本

可以透過以下方式指定要撤銷的版本:

  1. 使用 HEAD^ 表示上一個提交版本:

    git reset --soft HEAD^    # 撤銷最近一次提交
    git reset --soft HEAD~2   # 撤銷最近兩次提交
  2. 使用提交的 commit ID:

    git reset --soft <commit-id>  # 回退到指定的提交版本

修改提交資訊

如果只需要修改最後一次提交的註釋資訊,可以使用以下命令:

git commit --amend

注意事項

  1. git reset 只能回滾最新的提交,無法單獨回滾某個歷史提交。

  2. 如果程式碼已推送到遠端倉庫,需要在本地執行 reset 後,再強制推送:

    git push origin <branch-name> --force

  3. 建議使用 --soft 模式,以避免丟失程式碼改動。

如何撤回已推送(Push)的程式碼

方法一:使用 git revert(推薦)

git revert 是最安全的方式,因為它不會刪除提交歷史:

# 1. 檢視提交歷史
git log

# 2. 撤銷指定的 commit
git revert <commit-id>

# 3. 推送到遠端倉庫
git push origin <branch-name>

這種方法會透過建立一個新的提交來撤銷之前的更改。

方法二:使用 git reset

這種方式會修改提交歷史,需謹慎使用:

# 1. 使用 reset 回退版本
git reset --soft HEAD^  # 撤銷最近一次 commit,保留程式碼改動
# 或
git reset --hard HEAD^  # 撤銷 commit 並刪除程式碼改動

# 2. 強制推送到遠端
git push -f origin <branch-name>

reset 有三種模式:

  • --soft:只撤銷 commit,保留程式碼修改。

  • --mixed:撤銷 commit 和 add,保留程式碼修改。

  • --hard:完全撤銷修改,刪除程式碼改動。

注意事項

  1. 使用 git revert 更安全,因為它不會刪除提交歷史。

  2. 使用 git reset --force 時要謹慎,因為它會重寫歷史,可能影響其他開發者。

  3. 如果其他人已經拉取了要撤銷的程式碼,建議使用 git revert 而不是 reset

  4. 在執行這些操作之前,建議先備份程式碼或建立一個新分支。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.