美文网首页
【学了就忘】Git操作 — 51.git reflog命令

【学了就忘】Git操作 — 51.git reflog命令

作者: 繁华似锦Fighting | 来源:发表于2021-06-02 00:04 被阅读0次

    git reflog 命令是用来恢复本地错误操作很重要的一个命令,所以在这里对它进行一下整理。

    1、git reflog命令说明

    reflog翻译:Reference logs(参考日志)

    git reflog命令:可以叫做显示可引用的历史版本记录。

    可引用历史提交版本,什么意思?

    • 使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作,则可能会出现,HEAD指针之后仍存在历史提交版本的情况,而这些提交版本信息通过git log命令是看不到的。

      即:git log命令是显示当前的HEAD和它的祖先,递归是沿着当前指针的父亲,父亲的父亲,……,这样的原则。

    • 我们可以通过使用git reflog命令,就可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog,即:引用日志。

    git log命令与git reflog命令作用范围示意图:

    提示:reflog并不是Git仓库的一部分,它单独存储,它纯属是本地的。 (git reflog命令显示的内容,应该是存储在.git/logs/HEAD文件中,或者是.git/logs/refs目录中的文件。)

    也就是说git reflog命令中保留了从clone仓库开始,用户所有在本地库中的操作。

    2、git reflog命令显示内容

    # 1.查看版本库中历史提交记录
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master)
    $ git log --oneline
    68d777d (HEAD -> master) 我是第3次提交,重新修改的message
    8b3a071 第2次提交,新增内容:git commit --amend v2
    d3e2d8c 第1次提交,新增readme.txt文件
    
    # 2.查看可引用的历史提交记录
    69a9841 HEAD@{0}: commit (amend): 我是第3次提交,重新修改的message
    bd4fd48 HEAD@{1}: commit: 第3次提交,新增内容:git commit --amend v3
    8b3a071 HEAD@{2}: commit: 第2次提交,新增内容:git commit --amend v2
    d3e2d8c HEAD@{3}: commit (initial): 第1次提交,新增readme.txt文件
    
    

    从上可以看到,执行git reflog 命令,比执行git log命令多显示了一条内容。

    (是使用git commit --amend命令追加提交时,覆盖了一条提交记录)

    说明:

    1. 最前面是历史提交commit-id的前7位,根据这7位可以将版本库恢复到对应节点状态。

    2. HEAD@{n}:表示HEAD更改历史记录,最新的更改在上面。

    3. HEAD@{2}:表示HEAD指针在两次移动之前的情况。

    4. master@{one.week.ago}:表示master分支在本地仓库一周之前的情况。

    5. 通过HEAD@{n}语法可以回退到指定的提交。

      例如:git reset --hard HEAD@{3}

    6. HEAD@{n}HEAD~n功能类似,但是HEAD~n回退的是git log命令显示的历史提交记录,而HEAD@{n}回退的是git reflog命令显示的历史提交记录。

    7. 最后一个冒号后面的字串为,该提交的说明信息摘要。

    3、具体的用法

    git reflog命令具体用法如下:

    1. git reflog [show] [log-options] [<ref>]:就是显示同可引用的历史版本,同git reflog。就在后边可以加日志的选项。
    2. git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all | <refs>…]:删除掉更老的reflog条目。
    3. git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] ref@{specifier}…:从reflog中删除一个条目。
    4. git reflog exists <ref>:检查一个ref是否有一个reflog条目。

    4、引起ref变化的操作有

    所有引起HEAD指针变动的操作,都会被记录在git reflog命令中。

    我们可知,引起HEAD指针变化的操作有:

    • git checkout branchName:切换分支 。
    • git commit:提交。
    • git reset commit:重置。
    • git checkout commit:签出某一个提交。
    • git merge:合并操作。
    • git rebase:基变。
    • git pull:相当于 fetch + merge 。
    • git pull : Fast-forward:没有冲突,快速前进。
    • git pull --rebase:相当于fetch + rebase。
    • git clone:初始化ref 。

    参考:

    相关文章

      网友评论

          本文标题:【学了就忘】Git操作 — 51.git reflog命令

          本文链接:https://www.haomeiwen.com/subject/lxdtrltx.html