1 文由
时常有这样一种场景,不小心改动了部分文件,或修改了部分文件却发现无用,此时可能还没有git push,也可能push了;又可能commit了,或者还没有commit。
此时,我们想撤销(git reset)到远程仓库或本地仓库的最新最近一次的正式版本中来。那么,怎么做?
2 解决方案/辨析

[情况1](个人常用)
git reset --hard HEAD
# 回退/撤销。将工作区、暂存区和HEAD保持一致
[情况2]
git reset HEAD
# 回退/撤销。将暂存区和HEAD的提交保持一致
[情况3]
git checkout <filename/branch/tag>
# 替换/覆盖本地改动。
# 将使用HEAD指针所指的最新内容替换工作目录中的文件;已添加到暂存区(含:新建文件)的改动不会受影响[git add -A xx 以后]。
[情况4]
git fetch origin
git reset --hard origin/<remoteBranchName>
# 丢弃在本地的所有改动与提交(commit),可到服务器上获取最新的版本。
3 补充:回退远程仓库的远程分支
git log (查看提交日志记录)
- step1 回退本地仓库的本地分支到指定版本
git reset --hard <HEAD/commitId/branch/tag>
- step2 强制推送到远程仓库的分支
git push -f
(或 git push origin <HEAD/commitId/branch/tag> --force)
3 参考文献
- (推荐) git reset HEAD 与 git reset --hard HEAD的区别 - 简书
- (推荐) [Git]解决GIT冲突问题:git pull failed - 千千寰宇/博客园
- [GIT]指定分支下创建分支 - 千千寰宇/博客园
- 远程仓库版本回退 - 简书
- SVN:取消对代码的修改 - 推荐/CSDN
# svn revert
# svn revert [-R] filePath/DirPath