要丢弃已经推送到远程的 Git 提交,可以使用以下两种主要方法:git revert 和 git reset。这两种方法适用于不同的场景,具体如下:
使用 git revert
-
识别要撤销的提交: 使用以下命令查看提交历史,找到你想要撤销的提交的哈希值:
git log --oneline -
执行撤销: 使用
git revert命令创建一个新的提交,该提交将撤销指定的提交:git revert <commit-hash>这将保留历史记录,并在远程仓库中创建一个新的提交来反转之前的更改。如果在撤销过程中出现冲突,Git 会提示你解决这些冲突。
-
推送更改: 完成撤销后,将新的提交推送到远程仓库:
git push origin <branch-name>
使用 git reset(强制推送)
如果你希望完全删除某个已推送的提交(注意,这会影响其他协作者),可以使用 git reset 命令:
-
本地回退: 使用
git reset命令将当前分支重置到指定的提交:git reset --hard <commit-hash>这里
<commit-hash>是你希望回退到的提交的哈希值。 -
强制推送更改: 将本地更改强制推送到远程仓库,覆盖远程分支:
git push origin <branch-name> --force这会导致远程仓库中的历史记录被重写,因此在执行此操作前,请确保与团队成员沟通并确认没有人依赖于被删除的提交。
注意事项
- 选择合适的方法:使用
git revert是更安全的方法,因为它不会重写历史记录,适合团队协作环境。而git reset和强制推送则会改变历史,可能导致其他开发者的问题。 - 解决冲突:在使用
git revert时,如果遇到冲突,需手动解决后再继续。 - 备份重要数据:在进行任何破坏性操作(如
git reset --hard)之前,请确保备份重要数据。