在 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