Git回退至旧提交遇问题,附当前操作步骤
Git回退到旧提交的解决方案
嘿,我来帮你搞定Git回退的问题!你已经通过git log找到了要回退的目标提交ID(比如c846a35cd30fa05a9a125d613b220245f1f7d96e),接下来分两种常见场景给你讲解具体操作:
一、本地仓库未推送到远程的情况
这种情况操作自由度更高,根据你是否保留后续修改的需求来选择:
彻底回到旧提交,丢弃所有后续本地修改
用git reset --hard命令,它会把你的HEAD指针、暂存区和工作区完全重置到目标提交,后续的提交会从当前分支消失(未推送到远程的话无法恢复,一定要谨慎操作):git reset --hard c846a35cd30fa05a9a125d613b220245f1f7d96e回到旧提交,但保留工作区修改(可重新提交)
用git reset --soft命令,HEAD指针回到目标提交,暂存区和工作区的修改会保留,相当于把后续提交的修改变成未暂存状态,你可以调整后重新提交:git reset --soft c846a35cd30fa05a9a125d613b220245f1f7d96e生成新提交抵消后续更改(不修改历史)
用git revert命令,它会创建一个新的提交,把目标提交之后的所有更改撤销,不会改动原有历史记录,适合后续可能需要找回旧提交的场景:git revert c846a35cd30fa05a9a125d613b220245f1f7d96e
二、已推送到远程仓库的情况
这种情况要注意不要破坏其他协作者的本地仓库历史:
远程分支未被其他人拉取
可以先在本地执行git reset --hard回退,然后强制推送到远程(会覆盖远程分支历史,一定要确认没人使用再操作):git reset --hard c846a35cd30fa05a9a125d613b220245f1f7d96e git push -f origin <你的分支名称>远程分支已被其他人拉取
强烈推荐使用git revert生成新提交,然后推送到远程,这样不会修改历史,其他协作者拉取后只会看到新的撤销提交,避免冲突:git revert c846a35cd30fa05a9a125d613b220245f1f7d96e git push origin <你的分支名称>
你执行的查找提交ID的命令输出如下:
[USER@VM gitrepo]$ git log commit c846a35cd30fa05a9a125d613b220245f1f7d96e Author: Tobias <tobias@xy.de> Date: Fri Mar 23 16:00:33 2018 +0100 test 1 in ccc commit d567daf9e82b2bb1fa8493757826a224c4f3b96f Author: Tobias <tobias.@xy.de> Date: Fri Mar 23 15:58:48 2018 +0100 test 2 hilfe.txt commit dbef962622cc6bc326bbcccb3e87332af7e9577a Author:...
内容的提问来源于stack exchange,提问作者jubimk4
相关产品推荐
相关产品推荐

