啊我剛才 push 錯了! 如何在 Git 中撤銷提交

在使用 Git 管理項目的過程中難免會腦霧, push 完了之後才發現有錯誤,或是不小心推送了不應該存在的分支。

今天我要來和你分享幾種常見的做法,包括如何使用 git revert 撤銷提交,git reset 重設分支,以及刪除新推送的分支。

1. 使用 git revert 撤銷提交

這是最常見的情況。當你 (或你的雷隊友) push 上去了一坨狗屎後,你會希望撤銷這次提交,但是又可以留下他的犯罪紀錄 (為了不想影響到其他人的工作造成 conflict)。這時候 git revert 就是你的好朋友。它會創建一個新的提交,將你指定的提交的更改撤銷。

  • 找到提交的哈希值:首先使用 git log 命令查找你需要撤銷的提交的哈希值。如果你的雷隊友沒有寫好 commit message 沒有的話...那你加油。找到之後複製起來就可以點擊 q 退出 git log

git log

以我的範例來說,我要撤銷的是最後一次提交,就直接把最上面那串綠綠的 id ctrl+c 複製起來就好了。

  • 撤銷提交:輸入 git revert 那串ID 命令。如果需要一次撤銷多個提交,可以一次列出所有哈希值,然後一起提交。
1git revert xxxxx xxxxx xxxxx
  • 提交更改:當你輸入完 git revert 命令後,Git 會自動打開你的編輯器請你寫提交信息。如果你想使用默認的提交信息,直接保存退出即可。

提交訊息

  • 推送更改:最後,使用 git push 命令將更改推送到遠程倉庫。
1git push

推走

2. 使用 git reset 重設分支

如果需要徹底去除錯誤的提交,你可以使用 git reset 命令。這會將分支重設到你指定的狀態,但比較不建議,請小心使用,因為這會改變歷史記錄,很可能會使其他人產生 git 衝突,演變成肢體衝突。通常使用在你做了一些真的很蠢的事情,比如說不小心把 token 公開。

  • 軟重設(保留工作目錄中的更改)

    1git reset --soft HEAD~1
    

    此命令將回退最後一次提交,但不會更改你的工作目錄。

  • 硬重設(放棄所有更改)

    1git reset --hard HEAD~1
    

    此命令會回退最後一次提交並放棄所有更改,使用時需極其小心。

  • 強制推送:重設後,使用以下命令強制推送到遠程倉庫:

    1git push origin [branch-name] --force
    

3. 刪除新推送的分支

如果不小心推送了一個不應該存在的分支,你可以使用下面的命令來刪除它:

1git push origin --delete [branch-name]

結論

選擇合適的方法根據你的具體情況來決定。如果你在團隊中工作,通常使用 git revert 來避免改變共享的歷史記錄是更安全的選擇。希望這篇文章能幫助你更好地掌握 Git 的使用,有效地管理你的項目版本。

如果你有任何問題都可以在 IG 留言,也歡迎在 InstagramGoogle 新聞追蹤毛哥EM資訊密技