git-reset强制回滚远程仓库到历史commit
git reset --hard <commit-id> 然后 git push --force 本质上是历史重写(rewrite history),而不会产生新的 commit。
1.本地操作
1 | git clone xxxxx |
- 将当前分支指针移动到
<commit-id> - 且清空暂存区和工作区,使其完全与该提交一致
- 不会新建 commit
2.推送到远程
1 | git push --force |
- 将你本地的当前状态 强制 覆盖远程分支
- 原来远程分支上的提交会被替换掉
- 不会产生新的 commit,而是让远程分支“倒退”到你指定的
<commit-id>
3.例子
假设你有如下提交历史:
A → B → C → D (当前在 D)
你执行:
1 | git reset --hard B |
执行后,远程分支将回退为:
A → B
C和D将从当前分支中消失(历史丢失)- 不会新增任何提交记录
4.警告
- 历史提交被删除:这对团队开发是危险的,其他人拉取代码会冲突。
- 如果其他人已经基于被删除的 commit 开发了代码,会导致严重问题。
- 建议只在 你独占该分支 或临时分支中使用。