几个简单的命令介绍
以下文字描述的内容如果没有学习过Git的暂时先混个印象,之后再按照图片演示手动操作一下,就更加清晰通透了。
1. 查看仓库状态:git status
2. 添加到暂存区:git add
让git 跟踪某个文件,被Git管理
git add .
或git add -A
或 git add filename
都可以将某文件添加到暂存区。 批量操作使用 . 或者 -a(.代表所有的新增和修改 -A 代表所有新增和修改和删除)一般都使用 -A
3. 提交文件到本地仓库:git commit
git commit -m "此次提交的注释"
。如果不加 -m参数,那么是不能直接输入注释的,它会调用一个vim编辑器让你输入这个注释比较麻烦。建议使用-mgit commit -am "此次提交的注释"
。将所有被跟踪文件的 修改 和删除 操作的文件都提交到本地仓库。即使这2个状态没有经过git add添加到暂存区。- 注意git commit -am 命令 我并没有描述 新增状态的文件。因为新增状态的文件是必须执行add添加到暂存区才可以 commit,如果新增一个文件,并add添加到暂存区,后续又执行了此文件的修改或者删除操作,此时可以不add直接commit。但是建议正常的操作流程还是应该使用git add先将改动的文件添加到暂存区,再用git commit 提交到本地版本库。
4. 查看日志:
git log
多行信息展示提交的记录日志,会显示最全面的日志信息, (如作者 此处的作者就是设置的签名信息,还有提交的时间,40位的全部索引值)git log --pretty=oneline
一行信息展示日志(40位的全部索引值,忽略了作者和时间)git log --oneline
一行信息展示日志(更加简化 只显示7位的索引值,忽略作者和时间)git reflog
一行信息展示日志(更加简化 只显示7位的索引值,忽略作者和时间。加入了HEAD指针指向哪一次的提交点也就是历史记录。通常使用这个命令进行版本的前进和回退操作)
查看仓库状态:
git status
添加到暂存区:
git add
提交文件到本地仓库:
git commit
查看日志:
git log
git log --pretty=oneline
git log --oneline
git reflog
我们先进入自己学习Git的仓库,打开命令行窗口,开始学习如何操作命令行
命令操作演示
1. 创建文件 helloGit.txt
2. 执行git status
查看仓库状态
Git会提示在当前仓库下有文件 没有被追踪,说白了就是没有被Git所管理。会用红色高亮显示。
3. 执行 git add
将添加到暂存区
其实这个命令就是让当前文件被Git所管理,文件被Git所追踪。我在这里直接使用 git add filename
。至于 git add .
或者 git add -A
上面也讲到了,作用是一样的。然后再使用git status
查看状态此时会显示绿色的new file
4. git rm --cached <file>
我们在上图中看到Git 提示,可以使用 git rm --cached <file>
用来退出,他的意思其实就是将刚刚添加到暂存区的内容进行删除。我们删除之后在执行git status
查看状态,发现此时文件又高亮显示未红色。
5. 学习下git commit
命令
延续上一步的操作,将文件重新添加到暂存区,方便学习下git commit
命令。如果此时添加到暂存区后直接执行git commit
命令,Git工具会强制你进入到录入注释的页面。(默认使用vim编辑器,必须要输入注释才可以提交)。建议直接使用git commit -m "此次提交的注释"
来录入注释。如下图:
在这个界面和Linux操作文本是一样的方式,录入注释信息之后,保存退出,此次commit 就执行成功了。
保存退出之后,就会显示图中绿色框的内容,就是我编写此次提交操作的注释,然后再使用 git status
查看状态,发现 working tree clean(此时仓库是干净的)。
6. 查看日志前的准备工作,涉及到修改文件
接下来我们查看下提交的日志,因为此时Git中只有一次提交记录,不方便我们后续的讲解。所以我多做几次commit操作,添加一些内容。如图执行 git log
。此时仓库只有一条记录
在helloGit.txt 添加内容,也是vim编辑器,录入->保存
执行查看命令git status
。 他会告诉你发生了修改操作,需要进行add 或者 commit 的操作。我们执行commit 使当前仓库在增加一条日志信息。
当我执行提交的时候发现,Git提示1 file changed, 1 insertion(+), 1 deletion(-)
从这里我们也可以看出来Git管理文件的时候是将原先旧的数据删除,然后将修改的数据添加进去。所以是一次删除操作,一次新增操作。
7. git log
查看日志
- 首先是
git log
我们可以看到执行完git log
指令之后 显示日志信息特别的详细,有用户名还有邮箱,时间和 注释 还有生成的索引值。但是GIt的窗口就这么大点,不会把所有日志都一次性展示出来。所以会进入分页的模式下。会多屏显示。控制方式 空格向下翻页,== b 向上翻页==,q 退出。用于查看日志信息。
git log --pretty=oneline
意思就是美化日志,就用一行显示
git log --oneline
这个命令会将索引值显示为前面的7位数字。用来表示每一次的提交标识。(7位数字一般情况下就可以表示唯一了)
git reflog
reflog的特点:它会显示当前的HEAD指针指向的是Master主线,然后是在HEAD{0}的这一行,就说明当前的历史版本是在HEAD{0},索引值是:bda4aea。这个日志用于处理历史版本的前进后退。
8. git reset
版本前进后退的操作
版本前进后退的操作,本质就是基于Git生成的索引值完成,使当前的指针HEAD 指向不同的 索引值,从而实现版本前进回退。前提条件是文件被Git所管理,进行过commit操作。否则Git也是无能为力的
- 我们先来留意一下现在的文本内容,指向的索引值是bda4aea
- 然后再用
git reflog
指令查看日志,确定好我们要回退的版本索引。例如我们要回退到 初始时候的样子。初始的索引值是3168aa4
git reset --hard [索引值]
hard后面跟自己的索引值
输入上面的命令行内容,按下回车键之后。它会提示你当前的HEAD已经指向了索引值为 3168aa4
再来查看我们的文档内容:正确回退了。
那 Git 是如何来完成前进操作的哪?其实方式是一样的,都是使用git reset
命令,虽然现在是在初始状态,只要录入正确的被Git所管理的索引值,就可以完成前进回退操作。不在演示了。
留意,在进行版本控制时,必须要使用 git reflog
命令获取索引值。因为只有这个查看日志的方式会将所有日志展示出来,不论你现在HEAD指向哪个地方。如果是其他查看日志的方式,他们只会显示当前HEAD指向当前索引以及之后的日志信息。
如图:我们在回退完版本之后再次查看日志发现,日志信息展示不全
只有reflog可以全部显示日志
9. 关于前进后退的其他参数和符号
9.1 符号介绍
此处的 HEAD 表示当前指向的那个索引值位置,
- 使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退n 步,例如可以写成git reset --hard HEAD^^^^^
表示后退5步 - 使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退n 步 例如git reset --hard HEAD~1
表示后退一步,git reset --hard HEAD~3
表示后退三步
9.2 参数介绍
先来了解下Git在自己计算机上运行的流程,然后在学习回退的几个参数。
首先会有一个暂存区,和本地库。加上我们自己的工作区。一共是三个区域。工作区的 内容需要add 到Git的暂存区 ,然后由Git的暂存区 commit 到Git的本地库。这样一个顺序。
--sort 参数
如果是执行回退命令使用这个参数git reset --sort [索引值]
。对于Git它只会帮助你将HEAD的指针,指向你要回退的版本仅此而已。对于暂存区和自己的工作区来说(通俗一点就是本地代码),都不做任何的处理。还是保持 未回退之前的内容。这是这个参数表示的意思--mixed 参数
git reset --mixed [索引值]
如果使用这个参数,对于Git来说他会帮助你将HEAD的指针,指向你要回退的版本,并且将重置暂存区…仅此而已。对于自己的工作区来说(通俗一点就是本地代码),都不做任何的处理。还是保持 未回退之前的内容。说白了就是在 sort参数的基础上多做一些事情。但是还远远不够-- hard 参数
git reset --hard [索引值]
至于 hard参数,表示所有的事情Git都会做。此时自己本地代码旧会随着版本回退发生变化。三个参数一般都是使用--hard
。如果使用前面2个参数,会徒增工作量出来浪费部分时间。
10. 如果文件被删除想找回怎么办?
其实和我们上面讲述的一样,都是使用 git reset
命令进行回退就可以了。你把版本回退到删除文件的那个索引值。
但是被删除的文件必须提交到过Git生成了索引值,才可以。否则Git无能为力 。你想嘛Git都没有记录你提交的任何信息,他怎么帮你找回删除的文件。