在 Git 中删除一个已经推送到远端仓库的提交需要谨慎操作,因为这会修改远端仓库的历史。如果其他人已经拉取了最新的更改,他们的本地历史可能会和你修改后的远端历史冲突。在执行这些操作之前,最好与团队沟通确保每个相关成员都准备好处理可能出现的情况。
方法一:使用 git push --force 后撤销最后的提交
这是一个简单的方法,它会直接删除最后一次提交:
- 
首先,将本地分支回退到你想要的状态。如果你只想删除最后一个提交,使用:
git reset --hard HEAD~1这会将 HEAD(当前分支顶端指针)移动到前一个提交,并撤销最近的更改。
 - 
然后,使用强制推送到远端仓库:
git push origin <branch-name> --force这个命令会覆盖远程分支上的历史,以匹配你的本地分支历史。
 
方法二:使用 git revert 创建一个新提交来撤销更改
如果不想通过重写历史来删除提交(这是一个比较安全的方法),可以使用 git revert:
- 
首先,找到你要撤销的提交的哈希值:
git log - 
使用
revert命令创建一个新的"反向"提交来撤销指定的提交:git revert <commit-hash>这将启动一个新的提交过程,这个新的提交将实质上“撤销”之前指定提交的所有更改。
 - 
完成后,将这个更改推送到远端:
git push origin <branch-name>这种方法的好处是它不会重写仓库的历史。其他协作者可以通过正常的
git pull来更新他们的本地仓库。 
注意事项
- 
沟通:在重写任何远程历史之前,最好通知你的团队成员。解释你的变更和他们需要执行的命令(如 
git pull --rebase),以同步最新的历史。 - 
避免使用在公共或共享分支上:尽量避免在如 
master或main这样的主分支上直接使用git push --force,因为这会影响所有人的工作。 - 使用权利:确认你有足够的权限来强推或修改远端仓库的历史。一些组织可能会通过受保护的分支来阻止这种操作。
 
选择使用哪种方法取决于你的工作流程、团队政策以及你希望采取的风险程度。在多人同时工作的项目中,通常推荐使用 git revert 来保持历史的完整性和连续性。