1、首先用 git log 命令查看历史记录
2、假设要回退到上一版本,版本号应是Fri Jul 12 11:07:01 2019时间的19462f6f46cf4cbc211d366359afac0c17a7c190
git reset --soft 19462f6f46cf4cbc211d366359afac0c17a7c190
// 注意 --hard 参数会抛弃当前工作区的修改
// 使用 --soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交
3、现在回退了,但是还得提交回退,如果用 git push origin step5/test 会提示本地的版本落后于远端的版本
yunan.hu@DLC000D724GD2DD MINGW64 /c/huyunan/test (step5/test)
$ git push origin step5/test
To https://github.com/acn-yunan-hu/test.git
! [rejected] step5/test -> step5/test (non-fast-forward)
error: failed to push some refs to 'https://github.com/acn-yunan-hu/test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数--force
yunan.hu@DLC000D724GD2DD MINGW64 /c/huyunan/test (step5/test)
$ git push origin step5/test --force
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/acn-yunan-hu/test.git
+ d81861f...19462f6 step5/test -> step5/test (forced update)
这样就回退成功了,但是有人会发现,另一个同样的工程pull拉取最新代码的时候,不能拉取最新代码。这是因为有问题的工程的版本和未回退前的版本是一样的,现在回退了也就是版本降低了,pull是不可能从高版本降到低版本的。如果是这样,可以用 git branch -D step5/test 来删除本地分支,或是删除文件夹,重新下载。
当然要解决这个问题,还可以用 git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本,这样可以保留要回退的版本,如果有其它人 pull 工程就不会取不到最新代码了。
现在想回退到 44444 版本
1、如果想回退 44444 版本,就需要 revert 555555555 版本(这里可能不好理解)
git revert -n fa63357f5bba1f7b033c8005d85b245a00e4a115
2、回退之后 git status 查看冲突,解决冲突
3、用 git log 查看信息,会发现生成了一个新的版本
4、用 git push 推上远程
到此,反做成功。