Git的数据恢复和标记(标签)

361 阅读5分钟

这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

前言

今天我们继续复习Git知识点,这一章复习的是Git的数据恢复和标记知识点,我们一起来看看吧!

数据恢复

在你使用Git的时候,你可能会意外丢失一次提交:

①通常这是因为你强制删除了正在工作的分支,但是最后你却需要这个分支;②抑或是你硬重置了一个分支,放弃了你想要的提交.

如果这些事情已经发生,该如何找回你的提交呢?

实例

推荐方法最好是直接看恢复,上面实例时当你使用硬重置回当初未删除版本进行恢复,出现的一系列问题解决

  1. 假设你已经提交了五次,而现在,我们将master分支硬重置到了第三次提交来找回当时删除的分支.但是这时候你会发现一个事情:

现在顶部的两个提交已经丢失了-没有分支指向这些提交(因为你将指针移到了第三个,那么前面两个就找不到了)

  1. 你现在已经得到并且恢复当时第三次还存在的的提交了(恢复方法在下面,恢复文件到这步,下面3、4是回到最新版本)

现在准备回到当初最新的版本时,你发现你进行打印竟然没有前面两次提交信息(你需要他的哈希值进行版本穿梭或者重置),你需要最新一次提交的哈希值,但是你估计想不起来了,对吗?

  1. 最方便,也是最常用的方法,是使用一个名叫log reflog的工具(前面高层命令提过),当你在工作时,Git会默默记录每一次你改变的HEAD时它的值,每一次你提交或者改变分支,引用日志都会被刷新
  2. 如果git reflog显示的内容你觉得不足够多,可以执行git log -g,这个命令会以标准日志的格式输出引用日志

恢复 推荐的

  1. 通过git reflog找到你需要的文件还未删除的版本哈希值,那个就是你丢失的提交,你可以通过创建一个新的分支指向这个提交来恢复它.

    例如:你可以创建一个名为recover-branch的分支执行这个提交

    git branch recover-branch 当前需要恢复(之前丢失的)的提交哈希值
    
  2. 现在有一个名为recover-branch的分支是你的master分支曾经指向的地方(即当时你删除该需要的文件的前的那个版本),这样你在这次提交的版本后,也能通过切换这个分支得到曾丢失的文件

  3. 这个分支功能能帮你做很多东西,善用分支,Git最强功能

打tag

Git可以给历史中的某一次提交打上标签,表示重要.比较有代表性的是人们会用这个功能来标记发布节点(v1.0等等)

1、列出标签

命令:git tag 或者 git tag -l 'v1.*'

前者列出所有,后者列出以v1.开头的所有

2、创建标签

git使用两种主要类型的标签:轻量标签 与 附注标签

①轻量标签

轻量标签很像一个不会改变的的分支(他只是一个特定提交的引用),直接在提交前使用命令即可给当前分支打上标签

git tag v1.0
#或者下面的
git tag v1.0 提交对象哈希
②附注标签

附注标签是存储在Git数据库中的一个完整对象.他们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间;通常建议创建复制标签,这样你可以拥有以上所有信息,但如果只是想用一个临时标签,或者由于某些原因不想表村那些信息,轻量标签也是可用的

git tag -a v1.0
git tag -a v1.0 提交对象哈希
git tag -a v1.0 提交对象哈希 -m "我的注释信息"

3、查看特定标签

git show 可以显示任意类型的对象(git对象 树对象 提交对象 tag对象)

命令: git show tagname

4、删除标签

  1. 删除标签 要删除你在本地仓库上的标签,可以使用命令 git tag -d <tagname>如下:

    git tag -d v1.0
    
  2. 应该注意上述命令并不会从任何远程仓库中移出这个标签,你必须使用git push <tamote>:refs/tags/<tagname>来更新你的远程仓库,如下

    git push origin :refs/tags/v1.0
    # origin是你配置的远程仓库地址别名,你可以直接用远程仓库地址
    

5、捡出标签

  1. 如果说你想查看某个标签所指向的文件版本,可以使用git checkout命令

    git checkout tagname
    
  2. 虽然说这会使得你的仓库处于"分离 头指针(deacthed HEAD)"状态.在"分离头指针"状态下,如果你做了某些更改然后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非访问确切的提交哈希,因此你如果需要进行更改--比如说你需要修复旧版本的错误--这通常需要创建一个新的分支(捡出后创建,就会默认将当前捡出的版本作为新分支的第一版本-前面分支提到过)

    这样就可以修改到旧版本的代码(如同vue的尤雨溪在vue3.x会更新vue1.0版本生态)

    git checkout -b version(新的分支)
    

总结:慢慢理解,一步步来,加油!