git 重置(回退提交版本)and用reflog挽救错误重置

来源:互联网 发布:淘宝号不能登陆怎么办 编辑:程序博客网 时间:2024/05/16 01:18

git 重置(回退提交版本)

查看.git文件中master文件内容
$ cat .git/refs/heads/master0e662b107b1c08f515393151649689db317fa539
$ vi .git/refs/heads/master  1 0e662b107b1c08f515393151649689db317fa539

查看历史提交的管理关系

$ git log --graph --oneline* 0e662b1 git 第七章begin* 376db27 css* fada18c 20171116-01学习查看headhia1* e157c35 22* 53e9a0d 测试缩写* 4461311 提交* 5562173 初始
分支游标

当前分支指向的是

  • 0e662b1 git 第七章begin
    执行下面代码:
$ git reset --hard HEAD^HEAD is now at 376db27 css
$ cat .git/refs/heads/master376db27efde034a620699c3f01ac12133c7c2a81

master 文件中commitid变成上一次提交的 id,而且观察项目修改的文件被还原。重置命令不止重置到前一次。还可以重置到任意一次历史提交。
注意: 重置命令很危险。会彻底丢弃历史修改。不能通过查看历时id,再次使用重置命令恢复新修改的内容。(可以通过其他办法恢复)

回退参数详解

git rest –soft 只是改变版本头指向,不改变暂存区和工作区。

git rest –mixed 更改指向,改变暂存区,不改变工作区。

git rest –hard 更改指向,该变暂存区,改变工作区。

用reflog挽救错误重置

如果没有记录下重置前master分支指向提交的id,想重置就要通过.git/logs目录下日志文件查看分支变更信息。默认非裸版本库都提供分支日志功能。

$ git config core.logallrefupdatestrue

查看master分支日志文件:

$ tail -5 .git/logs/refs/heads/master c97b18beff34fe27a2efc62c11cf777b0caae0e5 9b04b5e4db3d7c1b047828af89f7f28f9257434e wangchengwei <wang1100@vip.qq.com> 1511697648 +0800   commit (merge): 顺序表结构9b04b5e4db3d7c1b047828af89f7f28f9257434e 373358580958c9dd9d1b09877cd4d8b9de47424f wangchengwei <wang1100@vip.qq.com> 1511708562 +0800   commit: 链表373358580958c9dd9d1b09877cd4d8b9de47424f 0bfd67bac8a3640bcc70041d7540644a1240cf3d wangchengwei <wang1100@vip.qq.com> 1511741360 +0800   commit: 重置test10bfd67bac8a3640bcc70041d7540644a1240cf3d ec4dc0fd08a71f57177b298c8347a97ff646f1a7 wangchengwei <wang1100@vip.qq.com> 1511741406 +0800   commit: 重置test2ec4dc0fd08a71f57177b298c8347a97ff646f1a7 0bfd67bac8a3640bcc70041d7540644a1240cf3d wangchengwei <wang1100@vip.qq.com> 1511741440 +0800   reset: moving to HEAD^

可以看出来master分支指向变迁 git rest –hard 命令后指向的提交id变为0bfd67bac8a3640bcc70041d7540644a1240cf3d

git reflog命令,对这个文件操作。使用show子命令可以显示此文件内容。(正序排列)

$ git reflog show master | head -50bfd67b master@{0}: reset: moving to HEAD^ec4dc0f master@{1}: commit: 重置test20bfd67b master@{2}: commit: 重置test13733585 master@{3}: commit: 链表9b04b5e master@{4}: commit (merge): 顺序表结构

重置master为改变之前的值

$ git reset --hard ec4dc0fHEAD is now at ec4dc0f 重置test2

查看log

git log --onelineec4dc0f 重置test20bfd67b 重置test13733585 链表9b04b5e 顺序表结构