first-contributions 中的提交回滚实战:用 git revert 安全撤销已推送的提交
2026/9/18 9:21:21 网站建设 项目流程

first-contributions 中的提交回滚实战:用 git revert 安全撤销已推送的提交

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

本文基于 first-contributions 项目"Git 工作流场景"系列中的 Reverting a commit 教程(意大利语版本、英语原版)展开,完整讲解如何用git revert创建一条"反向提交"来撤销已经推送到远端的改动,并说明如何通过git log --oneline定位目标提交的 SHA(Secure Hash Algorithm,安全哈希算法)摘要。读完后,你将掌握一条完整的log → revert → push撤销链路,并理解它与本地git reset回退的适用边界。

一、revert 的本质:为 Git 做一次"Ctrl+Z"

"Revert a commit" 指的是创建一条全新的提交,用来抵消之前某条提交所做的全部改动——可以把它理解为对 Git 执行Ctrl + Z

它和"删除提交"有本质区别:revert 不会改写历史,而是在历史末尾追加一条把旧改动"反着做一遍"的提交。这正是它适合远端仓库的原因:团队成员各自拉到的历史完全一致,不需要任何人重写已经共享的提交记录。

教程原文给出的定位很清晰:在 additional-material.md 中,这篇文档被描述为:

This document provides information about how to revert a commit on the remote repository. It will come in handy in case you need to undo a commit that has already been pushed to Github.

也就是说,它的适用场景是提交已经 push 到远端、需要公开、可追溯地撤销的情形。

二、为什么 revert 依赖 SHA:每笔提交的唯一身份证

Git 中每笔推送到远端仓库的提交,都绑定了一个唯一的字母数字标识——SHA。因此,只要你能拿到目标提交的 SHA,就可以 revert 它。但教程同时提醒:撤销操作要"有序进行"(reverse orderly),避免把仓库历史搅乱。

要找出想要撤销的那笔提交的 SHA,最直接的工具是提交日志:

git log --oneline

两条命令的区别值得留意:

命令输出
git log完整格式的日志,SHA 以长格式(完整摘要)显示
git log --oneline每条提交压缩为一行,便于快速浏览

--oneline这个 flag 的作用是告诉 Git:以"一行一条"的精简格式打印日志。执行该命令时,每条提交打印出的前 7 个字符就是这笔提交哈希的缩写形式(abbreviated commit hash),revert 时直接使用这个缩写即可。

原文档在 first-contributions 仓库上运行git log --oneline得到的示例输出如下:

389004d added spacing in title c1b9fc1 Merge branch 'master' into tutorials 77eaafd added tutorial for reverting a commit

从这 3 行输出可以看到:每行最前面 7 个字符(如389004d)是提交 SHA 的缩写,后面跟着提交信息。这正好演示了git log --oneline能同时列出仓库的提交清单及其 SHA 前 7 位。

关于日志命令的更多用法(如按文件过滤、限制条数等),仓库中还有专门的 check-commit-log.md 文档可以参考,其中介绍了git log [options] [path]git log -n 5等变体。

三、完整操作链路:撤销 "added spacing in title"

沿用原文档的示例:假设你想撤销信息为added spacing in title的那笔提交(SHA 缩写为389004d)。完整步骤如下。

第 1 步:定位并记下目标提交的 SHA

运行git log --oneline,在输出中找到目标提交,复制它的 7 位缩写 SHA。本例中是389004d

第 2 步:执行 revert

git revert 389004d

执行后会发生:

  • Git 打开你配置的文本编辑器,要求你确认/编辑这条反向提交的提交信息;
  • 默认的提交信息以单词Revert开头(例如Revert "added spacing in title");
  • 你可以直接保留默认信息,也可以按自己的习惯改写。

第 3 步:保存提交信息,关闭编辑器

保存并关闭编辑器后,反向提交即创建完成,Git 回到命令行。此时可以用git status或再次git log --oneline确认新提交已生成。

第 4 步:推送到远端

git push origin <branch-name>

<branch-name>替换为你当前所在分支名,revert 提交就被推送到远端(如 GitHub),撤销生效。

最终结果

执行完以上步骤,added spacing in title引入的改动就被抵消了。用原文档的说法:以该仓库为例,执行后仓库内容会回到c1b9fc1那笔提交(Merge branch 'master' into tutorials)时期的状态——历史里仍保留着389004d和新的 revert 提交,但工作区内容已恢复到改动前。

四、revert 与 reset 的适用边界

在 first-contributions 的文档体系中,"撤销提交"被拆成了两个互不重叠的场景,这正是理解 revert 价值的关键:

  • 本地提交回退:见 undoing-a-commit.md。该文档介绍用git reset/git reset --hard回退尚未推送的本地提交,并明确警告:

    Never performgit reset --hardif you've already pushed your commits to a shared repository as it will cause problems to everyone on that repository.

  • 已推送提交回滚:即本文主题的git revert,追加反向提交、不改写历史,因此对共享仓库是安全的。

简言之:提交还在本地 → 考虑 reset;提交已经 push 到共享仓库 → 用 revert。两条路径在仓库文档中被分开编排,可避免新手误用reset --hard改写他人依赖的历史。

五、revert 遇到冲突时怎么办

撤销历史提交本质上也是一次合并操作:如果目标提交之后还有其他提交修改了相同文件,git revert可能产生冲突。仓库中 resolving-merge-conflicts.md 给出了通用的冲突处理流程,同样适用于 revert 冲突:

  1. git status查看处于Unmerged paths下的冲突文件;
  2. 打开文件,按<<<<<<< HEAD/=======/>>>>>>> branch-name标记手动取舍;
  3. 删除冲突标记后git add <filename>
  4. git commit完成这次 revert。

如果拿不准,也可以放弃本次操作,避免留下半成品状态。

六、在 first-contributions 中的实践意义

first-contributions 是一个面向初学者的开源贡献教学项目(项目定位见 README.md):贡献者通过 fork → clone → 改 Contributors.md → push → 提交 Pull Request 的完整流程,完成自己的第一次开源贡献。在这种多人频繁贡献的场景里,教程类文档(如本文的意大利语版教程文件)本身就可能被后续提交追加、改动,一旦出现错误改动,用git revert追加反向提交就是最稳妥的公开纠错方式——不需要强迫任何协作者重写历史。

七、延伸阅读

仓库中同一系列(additional-material.md 索引)下还有几篇与"提交管理"直接相关的文档,可与本文配合使用:

  • Reverting a commit(英语原版) —— 本文教程的原始版本,步骤与示例 SHA 完全一致;
  • Undo-ing a local commit —— 本地提交的git reset回退;
  • Check commit log ——git log的选项与变体;
  • Resolving Merge Conflicts —— 冲突标记的处理流程;
  • 该主题的 中文翻译版 也可对照阅读。

一句话总结操作要点:git log --oneline找到 7 位 SHA →git revert <SHA>并确认提交信息 →git push origin <branch-name>推送,即可在不改写共享历史的前提下,把已推送的提交"安全撤销"。

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询