git如何撤销commit:分两种模式操作

git如何撤销commit分为软撤销与硬撤销两类,软撤销执行gitreset--softHEAD~1,会撤回本次提交记录,代码改动保留在暂存区,适合你只改提交备注、补充文件再重新提交的场景;硬撤销执行gitreset--hardHEAD~1,提交记录与本地改动全部清除,适合提交后确认代码完全错误、不需要保留改动的场景,两种操作都只作用于本地仓库,已经push到远程分支的commit不能直接用reset覆盖,否则会造成远程仓库分支冲突,多人协作分支优先使用revert生成新提交来回滚。

git如何撤销commit的两种方式对比

命令改动留存位置适用场景协作风险
gitreset--softHEAD~1暂存区修改commit注释,追加文件重提风险较低,未推送远程可直接使用
gitreset--hardHEAD~1改动直接删除提交代码完全无用,不需要留存修改风险偏高,本地未推送才适合执行
gitrevertHEAD生成反向新commit已推送到远程、多人共用分支风险较低,不会改写历史记录

HEAD~1代表上一次提交,如果你需要撤销更早的commit,可以替换成目标提交哈希值,哈希值能通过gitlog命令查看,复制commit前面一串字符替换HEAD~1即可。执行gitlog后,输出信息里每一条commit都附带唯一哈希标识,它是定位历史提交的凭证,输入前几位字符,Git一般也能识别对应记录。

软撤销操作之后,你的代码改动还处于add之后的暂存状态,你可以直接修改commit备注,使用gitcommit--amend命令覆盖上一条提交信息,也可以新增或者移除文件,重新执行gitcommit提交,整个过程不会丢失你写好的代码内容。

硬撤销不会保留改动。

硬撤销执行之后,本地未保存、未提交的代码修改会被清除,编辑器里未保存的内容也无法通过Git找回,如果你本地有重要改动,执行前建议先复制代码备份到其他文件,避免内容丢失。这个操作改写Git本地提交历史,已经推送到远程公共分支时不要使用。

已经推送到远程仓库的commit,不能直接用reset强行回退远程分支,团队其他成员已经拉取这份代码的情况下,强行推送reset后的分支,会导致其他人本地分支和远程分支历史不一致,后续合并会出现大量冲突。这时你选用gitrevertHEAD,该命令创建一条反向提交,抵消之前提交带来的代码变更,原有提交记录依旧保留在提交日志里,符合多数团队的分支管理习惯。

撤销多个连续commit时,HEAD~n里的n填写对应数字,撤销最近3次commit就写HEAD~3,同样区分soft和hard参数。这种批量reset依旧只推荐在本地还没有推送远程的独立分支使用,个人开发私有分支约束更少,公共协作分支一律优先revert方案。

执行撤销操作后,你可以用gitstatus查看当前仓库状态,校验文件和暂存区是否符合预期。软撤销后gitstatus会显示待提交变更,硬撤销后gitstatus会提示工作区干净,没有待提交内容,revert之后会看到一条新的待提交记录。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于git如何撤销commit的文章欢迎访问:百科