> 技术文档 > 删除已经提交的 commit_git 删除commit

删除已经提交的 commit_git 删除commit

如果你需要删除已经提交的 commit,有几种方法可以选择,取决于你是否已经将这些更改推送到远程仓库。以下是几种常见的方式:

1. 删除最近的提交(未推送到远程仓库)

如果提交还没有推送到远程仓库,你可以使用 git reset 来删除提交。

1.1 删除最近的一个提交

如果你想删除最近的一个提交,并将更改保留在工作目录中(即保留文件修改),你可以使用以下命令:

git reset --soft HEAD~1

HEAD~1 指定回到上一个提交。
–soft 参数表示保留文件的更改。

1.2 删除最近的一个提交,并丢弃文件修改

如果你想删除最近的提交,并且希望同时丢弃文件修改(即彻底删除这些更改),你可以使用:

git reset --hard HEAD~1

–hard 参数会重置索引和工作目录,这会丢弃本地的所有更改。

2. 删除多个提交(未推送到远程仓库)

如果你需要删除最近的多个提交,可以将 HEAD~1 改为 HEAD~N,其中 N 是你想回退的提交数。例如,删除最近的 3 个提交:

git reset --soft HEAD~3

或者丢弃文件更改:

git reset --hard HEAD~3

3. 删除已推送的提交(已推送到远程仓库)

如果你已经将提交推送到远程仓库并且希望删除它们,这会涉及到强制推送。注意: 强制推送会修改远程仓库的历史,可能会对其他开发者造成影响,建议在团队内与其他成员协调后再进行操作。

3.1 删除最近的提交并强制推送

假设你想删除最近的提交并且已经推送到远程仓库,你可以使用以下步骤:

使用 git reset 回到你想要的提交:

git reset --hard HEAD~1

强制推送到远程仓库:

git push origin  --force

是你要推送的分支名称(例如:SMS-Sprint0)。

3.2 删除多个提交并强制推送

如果你需要删除多个提交:

使用 git reset 回到某个提交(比如删除最近的 3 个提交):

git reset --hard HEAD~3

强制推送到远程仓库:

git push origin  --force

4. 通过 git rebase 删除提交(更灵活)

git rebase 允许你修改、删除或重新排序提交。如果你需要更细致的控制,可以使用交互式 rebase:

git rebase -i HEAD~N

这将打开一个交互式界面,显示最近的 N 个提交。在界面中,你可以删除指定的提交(删除对应行),然后保存并退出。

  • 编辑提交:删除或修改你不需要的提交。
  • 保存并关闭编辑器。
  • 根据提示处理冲突(如果有)。
  • 然后,如果你已经推送到远程仓库,使用 --force 强制推送:
git push origin  --force

小结

  • git reset 用于删除提交,适用于未推送的情况。
  • git push --force 适用于推送到远程仓库后的删除操作,注意可能会影响其他开发者。
  • git rebase -i 适用于灵活的历史编辑,可以删除、修改或重新排序提交。
  • 强烈建议在使用 --force 推送前与团队成员沟通,确保不会影响他们的工作。