[GIT] 辨析/区别: git reset HEAD 与 git reset --hard HEAD | 版本回撤
1 场景1: 撤销到远程仓库或本地仓库的最新最近一次的正式版本
1.1 文由
时常有这样一种场景,不小心改动了部分文件,或修改了部分文件却发现无用,此时可能还没有git push,也可能push了;又可能commit了,或者还没有commit。
此时,我们想撤销(git reset)到远程仓库或本地仓库的最新最近一次的正式版本中来。那么,怎么做?
1.2 解决方案/辨析
[情况1(个人常用)] git reset --hard <HEAD/CommitId/Tag>
git reset --hard HEAD
# 回退/撤销。回退到最近一次的COMMIT版本上(即 【当前版本/撤销到倒数第1个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~1 或 git reset --hard HEAD^
# 回退/撤销。回退到上一次的COMMIT版本上(即 【上一版本/撤销到倒数第2个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~2 或 git reset --hard HEAD^^
# 回退/撤销。回退到上上次的COMMIT版本上(即 【上上版本/撤销到倒数第3个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
...
git reset --hard HEAD~99 或 git reset --hard HEAD^...^(99个'^')
# 回退/撤销。回退到上上次的COMMIT版本上(即 【撤销到倒数第100个COMMIT版本】);将工作区、暂存区和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),可到服务器上获取最新的版本。
2 场景2: 回撤本地提交代码 git reset --hard <commitId>
| git reset --soft<commitId>
两种方式:不清除本地提交、清除本地提交
2.1 场景:回退到上次提交,并清除本地提交的代码 | 本地仓库的本地代码回退到指定的远程仓库版本
- step0 查看提交日志记录
git log
- step1 回退本地仓库的本地分支到指定版本
git reset --hard <HEAD/commitId/branch/tag>
- [可选步骤] step2 强制推送到远程仓库的分支
git push -f
(或 git push origin <HEAD/commitId/branch/tag> --force)
2.2 场景:回退到上次提交,不清除本地提交的代码
例如:在
main
分支写了半天,然后git commit
提交了 ,才发现 在main
分支开发的。
- step0 查看提交日志记录
git log
- step1 回退到上次提交,不清除本地提交的代码
git reset --soft <HEAD/commitId/branch/tag>
这样,刚刚提交的就又回到本地的
local changes
列表中。
- [可选步骤] step2 强制推送到远程仓库的分支
git push -f
(或 git push origin <HEAD/commitId/branch/tag> --force)
3 场景3:回撤本地仓库、远程仓库版本到指定旧版本
# 暂存本地仓库的变化
git stash save
# 回撤本地仓库到旧版本
git reset --hard {oldCommitId}
# 强制提交并修改远程仓库到旧版本
git push origin HEAD --force
4 补充2:git stash
在git reset
回退操作前,如果你修改的有效内容较多时(避免白干活...),可尝试使用此命令解决。在git reset
后,再git stash pop
即可还原先前的修改内容。
X 参考文献
- (推荐) git reset HEAD 与 git reset --hard HEAD的区别 - 简书
- (推荐) [Git]解决GIT冲突问题:git pull failed - 千千寰宇/博客园
- [GIT]指定分支下创建分支 - 千千寰宇/博客园
- 远程仓库版本回退 - 简书
- Git撤销本地commit - CSDN
- SVN:取消对代码的修改 - 推荐/CSDN
# svn revert
# svn revert [-R] filePath/DirPath
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!