场景一:未提交
未提交包含以下两种情况:
1》已经在工作区修改了文件,但还未执行 git add 提交到暂存区;
2》已经执行了 git add 提交到暂存作,但还未执行 git commit 提交本地仓库;
回退执行命令:
git reset --hard
2、已提交未推送
这种情况是指已经执行了 git add 提交到暂存区操作,又执行了 git commit 提交本地仓库,但还未 git push 推送到远程仓库。
2.1 上个版本回退:
git reset --hard HEAD^
2.2 多个版本回退:(N:代表数字,要回退的次数)
git reset --hard HEAD~N
2.3 指定版本回退:
执行如下命令,其中commit_id为占位符需要替换,可通过 git log 命令找到指定的commit_id
git reset --hard commit_id
2.4 直接回退到远程最新版本:
git reset --hard origin/master
3、已推送
这种情况是指已经执行了 git add 提交到暂存区操作,又执行了 git commit 提交本地仓库,还执行 git push 推送到远程仓库。
参考上面的 2.1~2.4 的方法,先强制回退到本地仓库到上 N 个版本,再进行强制推送到远程仓库。
回退到上个版本示例:
git reset --hard HEAD^
git push -f
************************************************************************************************************
merge合并代码回退场景一:git本地merge后,未push到远程仓库,需要回退时:
1、git reflog
2、git reset --hard 1cde2c4
如图:回退到merge前的版本号即可
merge合并代码回退场景二:git本地merge后,已push到远程仓库,需要回退时:
# 1.通过找到想要退回到的哪个commit_id
$ git log
# 2.本地代码变成某个提交记录时刻的代码
$ git reset --hard commit_id
# 3.推送到服务器,一定要加 --force 参数 "master":对应的分支即可
$ git push origin HEAD:master --force