文件版本控制方式
将工作目录的代码先提交到暂存区,然后再由暂存区提交到本地仓库。
git status:查看工作区、暂存区状态
测试:
⒈在一个已经初始化的目录下(例如test目录下)创建文件test01.txt
⒉在里面写点初始内容
例如:
⒊通过Git Bash Here打开Git的命令行工具
执行命令git status,查看效果
文件标识红色表示文件还没有被添加到Git中进行管理
接下来将文件添加到暂存区
git add [file name]:将工作区的信息(变化)添加到暂存区
再次观察效果,文件变成绿色表示
git commit -m "msg" [file name]:将暂存区的内容提交到本地库
将文件提交到本地库之后,查看状态,没有任何文件展现,说明工作区,暂存区,本地库中的文件信息处于同步(相同)状态。
将本地库中的文件进行修改,添加bbb
查看状态,文件又变红了,说明工作区有新内容,待添加到暂存区
重复首次操作,继续add,然后继续commit
最后查看状态,确保工作区,暂存区,本地库再次同步。
git log:查看本地库更新历史记录
观察到我们一共为本地库,有提交过两次记录的记载
我们可以观察到两次提交,分别对应两个40位的哈希值,这就是我们提交后记录的版本号
这种形式查看历史日志是最原始的查看方式
接下来我们也可以通过其他两种方式来查看历史
git log --oneline:查看本地库更新历史记录(简化版)
这样做可以很简单的展现历史信息
这种形式展现的哈希值为简化形式,通过也简化了提交的日期时间以及作者。
git reflog:查看本地库更新历史记录(展现HEAD指针)
这种形式可以展现HEAD指针编号位置,我们以后可以通过该位置定位到我们想要的版本历史。
准备工作,在原有aaa和bbb的基础上
新增历史记录ccc、ddd、eee、fff、ggg
可以使用git commit -am"msg"进行添加和提交一次性操作
准备工作后,开始前进和后退的操作
git reset --hard [局部索引值]:基于索引值的操作
通过以上操作,先以观察哈希值的方式查看历史
通过git reset --hard eee的哈希 回到历史
最后观察vi test01.text 文件是回到了eee的历史版本
同时可以通过以上的方式,回到最新历史版本ggg
观察又回到了ggg的版本
在次观察历史
观察到前进和回退的操作也会被忠实的记录下来
git reset --hard HEAD^ :表示后退操作
一个^表示后退一步,N个^表示后退N步
观察以上操作,我们通过后退的方式,后退到了fff
在进行以下操作前,可以先回到最新版本ggg
前提:删除前,文件存在时的状态提交到了本地库
通过以上方式查看状态,表示工作区、暂存区和本地库处于同步状态。
接下来,将test01.txt文件删除
查看test文件夹状态
通过以上观察,表示工作区中少了文件,和本地库不同步了,此时根据提示,我们可以将这次的删除操作添加到暂存区,并提交的本地库。
注意:删除文件后的git操作,和添加文件后的git操作方式是一致的,也是先add,再commit
我们现在相当于彻底将这个文件删除了,最新提交到本地库的历史也是处于将这个文件删除的状态了。
现在我们要将该文件找回!
由于我们以前提交过的每一个历史版本都被忠实的记录下来的,所以我们现在回到历史就可以将文件找回了。(文件是被删除了,但是历史永远不会被删除)
查看历史版本
通过以上历史版本我们观察到,最后一个版本af1eb78是删除了文件,但是我们可以看到最新的加入ggg的版本为c8f70b0,此时还是有test01.txt这个文件的,我们可以回到c8f70b0这个版本。
通过我们以上学习过的 git reset --hard [版本号] 就可以实现了
通过以上操作,观察test文件夹中又有test01.txt这个文件了
以上的操作是删除文件后,已经将删除状态提交到本地库了。
如果文件删除后,删除文件状态只是在工作区,或者刚刚到暂存区,还没有提交到本地库,如何恢复文件呢?
使用 git reset --hard HEAD来进行恢复
git diff 文件名 : 将工作区中的文件和暂存区进行比较
测试前,首先确保工作区,暂存区,本地库处于同步状态
观察当前最新版本(例如以下最新版本为ggg)
工作区新增hhh
接下来比较工作区中的该文件和暂存区的差别
通过观察,看出工作区比暂存区多了hhh
还可以与本地库的历史版本进行比较
git diff 本地库中历史版本 文件名