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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【学了就忘】Git操作 — 51.git reflog命令相关的知识,希望对你有一定的参考价值。

参考技术A

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

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

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

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

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

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

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

说明:

git reflog 命令具体用法如下:

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

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

【学了就忘】Git操作 — 56.忽略文件补充

参考技术A

有些时候,你想添加一个文件到Git,但发现添加不了,原因可能是这个文件被 .gitignore 忽略了:

如果你确实想添加该文件,可以用 -f 参数强制添加到Git本地版本库:

关于 -f 参数,描述如下:

-f, --force : Allow adding otherwise ignored files. 允许添加被忽略的文件。

或者你发现,可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,可以用 git check-ignore 命令检查:

Git会告诉我们, .gitignore 的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

还有些时候,当我们编写了规则排除了部分文件时:

但是我们发现 .* 这个规则把 .gitignore 也排除了,并且 App.class 需要被添加到版本库,但是被 *.class 规则排除了。

虽然可以用 git add -f 强制添加进去,但有强迫症的童鞋还是希望不要破坏 .gitignore 规则,这个时候,可以添加两条例外规则:

把指定文件排除在 .gitignore 规则外的写法就是 ! +文件名,所以,只需把例外文件添加进去即可。

小结

Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

之前的忽略方案,都是适用于未跟踪文件的忽略,而对于已跟踪(track)文件的改动并不适用,好在针对这种情况,Git也提供了我们方法去忽略。

换句话说,就是添加忽略之后,修改已经提交到版本库中的文件是无法忽略的。

自己思考的方式: (稀烂哈哈)

正确的做法:

我们在配置全局忽略 .gitconfig 文件的时候,可能会看到如下配置:

那么 autocrlf = true 和 safecrlf = false 是什么意思?

LF是Linux系统下的换行符,而CRLF是windows系统下的换行符。由于我们的文件创建于Linux系统下(Git Bash中创建),而保存中windows系统中,所以文件中的行结束符,要使用windows下的CRLF格式换行,而在Git中的默认配置是自动转换。

因为在Git的忽略文件中,是一行一行的忽略规则,而 autocrlf 和 safecrlf 就是对转变换行格式的具体配置。

以上可手动配置在 .gitconfig 文件中,

使用命令行配置如下:

这样即可保证仓库中永远都是LF, 而且在Windows工作空间都是CRLF,在Mac/Linux工作空间都是LF。

以上可手动配置在 .gitconfig 文件中,

使用命令行配置如下:

以上是关于【学了就忘】Git操作 — 51.git reflog命令的主要内容,如果未能解决你的问题,请参考以下文章

【学了就忘】Git操作 — 62.rebase命令执行原理

【学了就忘】Git操作 — 14.Git基本操作(一)

【学了就忘】Git操作 — 55.忽略文件的三种方式

【学了就忘】Git后悔药 — 33.版本回退操作(二)

【学了就忘】Git后悔药 — 34.版本回退操作(三)

【学了就忘】Git分支 — 44.分支切换的几种情况