Git 如何取消本地的 Git 提交

Git 如何取消本地的 Git 提交

在本文中,我们将介绍如何取消本地的 Git 提交。

阅读更多:Git 教程

什么是 Git 提交?

Git 中,提交是指将文件或者代码变动记录到版本历史中的操作。每次提交都会生成一个唯一的提交 ID,用于标识该次提交。提交是 Git 中非常重要的一个概念,它使得开发者能够追踪代码的变动并协同工作。然而,在开发过程中,我们可能会犯错或者需要撤销之前的提交。

取消最近的本地提交

使用 git reset 命令

通过使用 git reset 命令,我们可以取消最近的本地提交并将代码回退到上一个提交状态。有三个选项可供我们选择:”mixed”、”soft” 和 “hard”。

  • 使用 git reset --mixed HEAD~1 命令可以取消最近的提交并将代码回退到上一个提交状态。在这之后,已取消的提交将不再出现在 Git 提交历史中,文件的变动将会保留在工作区,但未被添加到暂存区。
  • 使用 git reset --soft HEAD~1 命令可以取消最近的提交并将代码回退到上一个提交状态。在这之后,已取消的提交将不再出现在 Git 提交历史中,文件的变动将会保留在暂存区,但未被提交。
  • 使用 git reset --hard HEAD~1 命令可以彻底取消最近的提交并将代码回退到上一个提交状态。在这之后,已取消的提交将不再出现在 Git 提交历史中,文件的变动也将被丢弃,回到了上一个提交的版本状态。

示例

假设我们有以下的提交历史:

commit abcdefg (HEAD -> master)
Author: John Doe <johndoe@example.com>
Date:   Mon Jan 1 12:00:00 2022 +0800

    Add feature A

commit 1234567
Author: John Doe <johndoe@example.com>
Date:   Sun Jan 1 12:00:00 2022 +0800

    Initial commit

如果我们要取消最近的提交 “Add feature A” 并将代码回退到上一个提交状态,可以执行以下命令:

git reset --hard HEAD~1

执行后,提交历史会变为:

commit 1234567 (HEAD -> master)
Author: John Doe <johndoe@example.com>
Date:   Sun Jan 1 12:00:00 2022 +0800

    Initial commit

注意,”Add feature A” 提交将不再出现在 Git 提交历史中,且文件的变动也会被丢弃。

取消之前的本地提交

使用 git rebase 命令

通过使用 git rebase 命令,我们可以取消之前的本地提交。该命令允许我们对提交历史进行修改和重组。

  • 使用 git rebase -i HEAD~n 命令来打开交互式 rebase 编辑器,其中 n 代表要取消提交的数量。在编辑器中,将需要取消的提交行前的 pick 替换为 deleted,保存并退出编辑器,即可取消指定的提交。
  • 使用 git rebase --onto commit_id^ commit_id 命令可以将某个提交及其之后的提交移动到另一个提交之后。通过将 commit_id^ 替换为需要移动的起始提交的父提交 ID,commit_id 替换为目的地提交的 ID,即可完成提交的取消。

示例

假设我们有以下的提交历史:

commit abcdefg (HEAD -> master)
Author: John Doe <johndoe@example.com>
Date:   Mon Jan 1 12:00:00 2022 +0800

    Add feature B

commit 1234567
Author: John Doe <johndoe@example.com>
Date:   Sun Jan 1 12:00:00 2022 +0800

    Add feature A

commit abc1234
Author: John Doe <johndoe@example.com>
Date:   Sat Jan 1 12:00:00 2022 +0800

    Initial commit

如果我们要取消之前的两个提交 “Add feature B” 和 “Add feature A”,可以执行以下命令:

git rebase -i HEAD~2

这会打开交互式 rebase 编辑器,其中包含两个提交的行:

pick 1234567 Add feature A
pick abcdefg Add feature B

我们将需要取消的提交行前的 pick 替换为 deleted

delete 1234567 Add feature A
delete abcdefg Add feature B

保存并退出编辑器后,取消的提交将不再出现在 Git 提交历史中。

撤销提交并保留变动

使用 git revert 命令

如果我们希望撤销某个提交的变动,并将撤销的变动保留在 Git 提交历史中,可以使用 git revert 命令。

  • 使用 git revert commit_id 命令可以撤销指定提交的变动并生成一个新的提交来记录这次撤销。

示例

假设我们的提交历史如下:

commit abcdefg (HEAD -> master)
Author: John Doe <johndoe@example.com>
Date:   Mon Jan 1 12:00:00 2022 +0800

    Add feature B

commit 1234567
Author: John Doe <johndoe@example.com>
Date:   Sun Jan 1 12:00:00 2022 +0800

    Add feature A

commit abc1234
Author: John Doe <johndoe@example.com>
Date:   Sat Jan 1 12:00:00 2022 +0800

    Initial commit

如果我们想撤销 “Add feature B” 这个提交,并将撤销的变动保留在 Git 提交历史中,可以执行以下命令:

git revert abcdefg

执行后,将生成一个新的提交,用于记录撤销的变动。

总结

在本文中,我们介绍了三种取消本地 Git 提交的方法:

  • 使用 git reset 命令可以取消最近的本地提交,其中 “mixed”、”soft” 和 “hard” 选项分别决定了取消的程度和保留变动的位置。
  • 使用 git rebase 命令可以取消之前的本地提交,并对提交历史进行修改和重组。
  • 使用 git revert 命令可以撤销提交的变动,并将撤销的变动保留在 Git 提交历史中。

根据实际需求选择适合的方法来取消本地的 Git 提交,可以帮助我们更好地管理代码版本历史。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程