在 Git 中刪除未推送的提交

Azhar Bashir Khan 2022年5月31日
在 Git 中刪除未推送的提交

本教程將教授如何在 Git 中刪除未推送的提交。

Git 用於協作開發環境中,以跟蹤對專案目錄中的檔案所做的更改。Git 使用提交來跟蹤本地和遠端 Git 倉庫的更改。

人們可能希望不時從本地 Git 倉庫中刪除未推送的提交。

使用 git reset 命令刪除未推送的提交。我們將通過一個例子來說明這一點。

使用 git reset 命令刪除 Git 中未推送的提交

每當我們想要提交對專案目錄的更改時,我們可以使用 git addgit commit 命令提交更改。

使用 git commit 命令時,會在本地 Git 倉庫中建立提交。然後我們可以使用 git push 命令將本地 Git 倉庫中的提交推送到遠端 Git 倉庫。

有時,我們可能意識到我們不想將提交推送到遠端倉庫,而只是提交到本地倉庫。在這種情況下,我們可以使用 git reset 命令取消提交或刪除本地 Git 倉庫中的最後提交。

git reset 是用於撤消對 Git 倉庫狀態的本地更改的命令。

假設我們對工作目錄進行了更改。我們可以使用 git status 命令檢視更改的狀態。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
        modified:   mynotes.txt

我們可以看到 mynotes.txt 檔案已被修改並符合提交條件。

要提交修改,我們需要首先使用 git add 命令將更改新增到本地 Git 倉庫的暫存索引。我們必須按如下方式執行 git add 命令。

$ git add .
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   mynotes.txt

因此,在使用 git status 命令時,我們可以看到這些變化現在已經被暫存了。

我們可以將更改提交到本地 Git 倉庫。我們必須使用 git commit 命令為階段性更改建立提交。

我們執行 git commit 命令如下。

$ git commit -m "updated mynotes"
[main e1b08a5] updated mynotes
 1 file changed, 1 insertion(+)

現在,我們再次執行 git status 命令來檢視狀態。

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

我們現在可以看到本地倉庫中的本地分支比遠端 origin/mainGit 倉庫分支領先一個提交。

我們可以使用 git push 命令將提交推送到遠端 Git 倉庫。但我們沒有這樣做,而是使用 git reset 命令刪除未推送的提交,如下所示。

$ git reset --soft HEAD~1

帶有 --soft 選項的 git reset 命令從本地 Git 倉庫中刪除未推送的提交,但保留本地更改。HEAD~1 指定 git reset 命令僅刪除最後一次提交。

我們現在將執行 git status 來檢查倉庫的狀態,如下所示。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   mynotes.txt

因此,我們可以看到未推送的提交不再存在。不過,修改仍在進行中。

使用 --hard 選項而不是 --soft 命令選項和 git reset 命令將刪除 HEAD~1 指定的最近提交併完成本地更改。

我們可以使用 --hard 選項執行 git reset 命令。

$ git reset --hard HEAD~1

這也會刪除未跟蹤的檔案或目錄以及跟蹤的修改。因此,請謹慎使用它,否則我們可能會丟失所有已完成的工作。

因此,我們學會了在本地 Git 倉庫中刪除未推送的提交。

欲瞭解更多資訊,請訪問:

  1. git-reset
  2. git reset

相關文章 - Git Reset