git-reset强制回滚远程仓库到历史commit

git reset --hard <commit-id> 然后 git push --force 本质上是历史重写(rewrite history),而不会产生新的 commit


1.本地操作

1
2
3
4
5
git clone xxxxx
git log


git reset --hard <commit-id>
  • 将当前分支指针移动到 <commit-id>
  • 且清空暂存区和工作区,使其完全与该提交一致
  • 不会新建 commit

2.推送到远程

1
git push --force
  • 将你本地的当前状态 强制 覆盖远程分支
  • 原来远程分支上的提交会被替换掉
  • 不会产生新的 commit,而是让远程分支“倒退”到你指定的 <commit-id>

3.例子

假设你有如下提交历史:

A → B → C → D  (当前在 D)

你执行:

1
2
git reset --hard B
git push --force

执行后,远程分支将回退为:

A → B
  • CD 将从当前分支中消失(历史丢失)
  • 不会新增任何提交记录

4.警告

  1. 历史提交被删除:这对团队开发是危险的,其他人拉取代码会冲突。
  2. 如果其他人已经基于被删除的 commit 开发了代码,会导致严重问题。
  3. 建议只在 你独占该分支 或临时分支中使用。