如何在GitHub上回滚自特定日期起的过往提交?
在GitHub上回滚特定日期后的所有提交
第一步:获取目标日期对应的提交哈希
首先需要找到6月1日当天最后一个提交的哈希值,执行以下命令:
git log --before="2024-06-02" --pretty=format:"%h %s"
说明:
--before="2024-06-02"用于筛选6月1日及之前的提交(6月2日0点前即6月1日结束),输出结果里的短哈希(比如abc123)就是你需要的目标提交标识。
情况1:提交仅在本地,未推送到GitHub
如果要回滚的提交还没推送到远程仓库,直接执行硬重置:
git reset --hard abc123
说明:
--hard会将工作区、暂存区完全重置到目标提交状态,该日期后的所有提交会被丢弃,执行前请确认无需保留这些提交的内容。
情况2:提交已推送到GitHub远程仓库
方式A:强制重置远程分支(适合单人仓库或已沟通后的协作仓库)
- 先本地重置到目标提交:
git reset --hard abc123
- 强制推送到远程分支(以
main分支为例):
git push origin main --force
注意:若仓库开启了分支保护,需先在GitHub仓库设置中取消保护才能执行强制推送;如果是多人协作仓库,强制推送前必须告知所有成员,避免他们的本地仓库出现冲突。
方式B:创建撤销提交(更安全,适合多人协作)
不破坏原有提交历史,通过新增一个反向提交来撤销所有更改:
- 批量撤销目标日期后的所有提交(暂不自动提交):
git revert --no-commit abc123..HEAD
说明:
abc123..HEAD表示从目标提交的下一个提交到当前最新提交的范围,--no-commit会把所有撤销的更改放入暂存区。
- 检查更改无误后,提交撤销操作:
git commit -m "Revert all commits after 2024-06-01"
- 推送到远程仓库:
git push origin main
重要注意事项
- 执行任何操作前,务必备份当前仓库:
git branch backup-before-revert,以防操作失误可快速恢复。 - 日期格式支持多种写法,比如
"June 1 2024"、"2024-06-01 23:59:59",确保准确即可。
内容的提问来源于stack exchange,提问作者Shadrach Adamu
相关产品推荐
相关产品推荐

