乐闻世界logo
搜索文章和话题

如何删除未推送的 git 提交?

5 个月前提问
4 个月前修改
浏览次数37

1个答案

1

在 Git 中,如果你想删除还没有推送到远程仓库的提交,你可以使用几种不同的方法来实现这个目的。以下是两种常见的方法:

方法1:使用 git reset

假设你想删除最近的几次提交,你可以使用 git reset 命令。这个命令会将HEAD指针移动到指定的状态,你可以选择不同的模式来决定是否保留变更内容。

  • 软重置(Soft Reset)

    bash
    git reset --soft HEAD~N

    在这里,N 是你想要回退的提交数,这个命令会回退到指定的提交之前,但是不会改变工作目录的文件。提交后的更改会保留在暂存区,你可以修改后重新提交。

  • 硬重置(Hard Reset)

    bash
    git reset --hard HEAD~N

    这个命令会完全删除最后 N 次的提交,并且会撤销工作目录中的所有更改。使用硬重置时请格外小心,因为它会丢失所有未提交的更改。

例子:如果我意识到我最近的两次提交包含了错误,我没有将这些提交推送到远程仓库,我可以执行 git reset --hard HEAD~2 来撤销这些提交,并且清除所有相关更改。

方法2:使用 git rebase

如果你想更精细地删除或修改一个或多个特定的提交,你可以使用 git rebase 命令。

  • 交互式变基(Interactive Rebase):
    bash
    git rebase -i HEAD~N
    在这里,N 是从当前提交向回看的提交数。这个命令会打开一个交互式界面,允许你选择需要操作的提交。例如,你可以选择用 drop 指令删除某个提交,或者用 edit 指令修改提交。

例子:如果我需要删除倒数第三个提交,我可以执行 git rebase -i HEAD~3,然后在打开的文本编辑器中找到那个提交,将其前面的命令从 pick 改为 drop,然后保存退出。Git 将应用这个变更,并重写历史。

使用这些命令时,请注意:

  • 这些操作会改变历史,如果在团队中使用,请确保同事了解你所做的更改。
  • 只有在提交没有被推送到远程仓库时使用这些命令。如果已推送,你需要使用不同的策略,像 git revert 或者在推送之后再使用 git push --force,但这应当作为最后的手段。
2024年6月29日 12:07 回复

你的答案