记录一下关于 git 不同提交版本间切换的操作以及如何恢复至切换之前的版本。
切换到之前提交的版本 —— git reset --hard
笔者在使用 git 时,首先接触到了一个"黑魔法"命令 git reset --hard,通过该命令可以回退到 git 之前存在的提交。
首先通过 git log 查看各个提交历史,可以看到各个提交版本的提交信息,包括其计算得到的 SHA-1 值。
git log //查看存在的提交信息,包括其计算的 SHA-1 值,作者和简单描述
在获得目标版本的信息后,可以通过 git reset --hard 命令回退到某次 git 的提交之中。
git reset --hard //回退到 SHA-1 值开始为 123456 的提交版本,上述命令只需要对应提交的 SHA-1 值的前几位作为参数即可
注意:此命令会直接执行,而不会提示用户进行本地修改的提交等操作,所以在命令执行之前请保证所有的修改均已被妥善处置。
查看分支切换记录 —— git reflog
当使用 git reset --hard 命令从提交版本 A 回退到某个提交版本 B 后,若进行一定的任务后又需要返回提交的 A 版本时,此时通过 git log 查看提交记录可知,此时仅存在提交版本 B 之前的提交记录,而 B 之后的提交记录都无法显示出来。 此时使用 git reset --hard 命令会缺少分支 A 的 SHA-1 值作为参数。此时可以通过 git reflog 命令查看提交切换的记录。
git reflog //查看版本的切换记录,从而找到切换之前的版本的 SHA-1 值
通过 git reflog 命令可以看到不同提交版本之间的切换记录,其中存在有切换版本的7位 SHA-1 开始值的信息,用户可以通过这个值使用 git reset --hard 命令指定版本 A 从而回退到切换回版本 B 之前的版本 A.
查看提交标签 —— git tag
在查看某个大型项目的 git 记录时,可以发现其中的提交记录是十分多的,想要仅通过提交时的简短描述确定每次提交的信息是困难的。另一方面,某些重要的更新如版本与新版本之间应该用额外的信息进行标注。如笔者在查看 mpeg 的软件 TMC13 时,即看到有众多的提交记录,而不同的版本提交则使用 git tag 做了标注。如笔者想要获取版本 0.0 的代码,此时直接通过 git log 查看提交记录是十分麻烦的( 提交记录很多 ),但是笔者可以通过 git tag 查看已有的标签,并通过标签定位到笔者需要的提交版本,并通过 git show 显示对应 tag 的信息,进而回退到对应的版本。
git tag //直接使用 git tag 命令则显示已有标签
用户可通过 git show 查看对应标签的信息,包括其对应的提交版本等信息。
git show tag1 //显示 tag1 标签对应的信息
用户添加标签的方式有若干种,既可以单纯仅添加标签,也可以为标签添加注释信息,或者对已经提交的版本追加标签。
git tag tag1 //为当前版本加入标签 tag1
git tag -a tag2 -m 'tag message' //在加入标签的同时为标签加入注释
git tag -a tag3 //为提交的 SHA-1 值开始位为 1234567 的提交追加标签 tag3
在命令中加入 -d 参数表示删除对应标签。
git tag -d tagn //删除标签 tagn 对应的标签
默认情况下,标签并不会被推送到远端服务器,只有用户显式的进行推送时,标签才会被 push 到远端服务器进而被所有使用该远端仓库的人看到。
git push origin tag12 //将标签 tag12 推送到 origin 对应的远端仓库
git push origin --tags //一次将所有的标签推送到 origin 对应的远端仓库
Git 工具 - 重置揭密 ,git - git 操作的细节,解释了 HEAD、Index 和 working directory 的意义,并讨论了 git reset --hard 命令的风险
Git 基础 - 打标签,git - 介绍 git tag 的操作方式
git reset --hard 操作后的数据恢复,掘金 - 关于 git reset --hard 命令操作后数据恢复的方法