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

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

参考:

  • https://www.cnblogs.com/chaiyu2002/p/9551621.html
  • https://blog.csdn.net/songyuequan/article/details/83714695

你可能感兴趣的:(【学了就忘】Git操作 — 51.git reflog命令)