在 Git 中推送远程仓库之前撤消提交

Azhar Bashir Khan 2022年4月22日
在 Git 中推送远程仓库之前撤消提交

本教程介绍如何在 Git 中重置尚未推送到远程仓库的提交,Git 是一个版本控制系统,我们使用它来跟踪对项目目录中文件所做的更改。

在 Git 中,提交用于跟踪对文件所做的更改。有时,我们可能会在本地提交文件的更改,然后可能会觉得这些更改不再相关。

我们现在要重置此提交,而不是将此提交推送到远程仓库。我们可以使用 git reset 命令完成重置尚未推送到远程的提交的任务。

在 Git 中推送到远程仓库之前撤消提交

我们在协作开发环境中使用 Git 来跟踪对文件所做的更改。Git 使用提交来完成跟踪文件更改的任务。

当我们对文件所做的更改感到满意时,我们会将更改提交到项目的 Git 仓库。在基本的 Git 工作流程中,一旦我们测试并完成了更改,我们就会将更改添加到暂存区域。为此,我们使用 git add 命令。

将更改添加到暂存区域后,我们现在继续将更改提交到我们的 Git 仓库。我们使用命令 git commit 来提交更改。

每个提交用于记录仓库状态的快照以及名称、时间戳和消息。当我们使用 git commit 命令提交更改时,这些更改将提交到本地 Git 仓库。

此本地仓库与远程 Git 仓库相关联。然后我们继续将本地 Git 仓库的提交推送到远程仓库。我们使用 git push 命令来实现这一点。

有时,在将提交推送到远程仓库之前,我们可能会觉得本地仓库中的当前提交不再需要,我们希望将其丢弃。

因此,要丢弃本地仓库中的提交,我们可以使用 git reset 命令。假设我们的 Git 仓库中有如下提交历史记录。

$ git log --oneline
453dcfc (HEAD -> master) minor change
bea3aac (origin/master, origin/HEAD) some change
b14f387 Other change
...

在提交历史中,提交 453dcfc 在本地 Git 仓库中,但尚未在远程仓库中。之前的提交也在远程仓库中。

因此,要丢弃本地仓库中存在但尚未推送到远程仓库的提交,我们可以执行 git reset 命令,如下所示。

$ git reset --soft HEAD~1

上面的 git reset 命令将当前 HEAD 重置一次。带有 --soft 选项的 git reset 命令不会触及暂存区和工作树。

它将我们所有更改的文件保存为要提交的更改,正如 git status 所说的那样,如下所示。

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

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

我们现在可以重新检查提交历史并观察提交 453dcfc 不再存在。

$ git log --oneline
bea3aac (origin/master, origin/HEAD) some change
b14f387 Other change
...

我们已经展示了如何在 Git 中重置尚未推送到远程仓库的提交。

有关更多信息,请访问这些链接。

  1. git-reset
  2. Git 重置

相关文章 - Git Reset