通过【git的学习】本地仓库的理解和使用(一)学习了暂存区和共工作区的一些指令。
但是暂存区与工作区的交互其实没什么用,贮存区才是git的大佬。
我们先进行一个最简单的提交。
我们先创建一个git仓库
git init
再创建一个index.txt文件,内容为:
I created index.txt!
我们将文件add到暂存区:
git add index.txt
接下来进行一个最简单的提交:
git commit -m "first commit"
它最终输出了:
[master (root-commit) 52667c0] first commit #表示提交的分支master以及提交版本号的前7位以及提交时-m后的信息
#分支与版本号会在接下来进行说明
1 file changed, 1 insertion(+) #表示一个文件改变了,其中加了一行文本
create mode 100644 index.txt #表示创建了的文件的(100644)类型和权限。
如果你不加 -m 的话,就会跳出一个编辑器来输入本次提交的说明。可以使用全局配置命令
git config --global core.editor
来更改默认编辑器(最好每次都加提交说明,以便改善你以及其他小伙伴的可读性)
我们也可以跳过add,来直接提交
git commit -a -m " "
假如说想要忽略对某些文件的纪录跟踪,比如说前端一些依赖的包,比如说打包出来的文件,比如说一些日志文件或者编辑器配置等,就要在工作目录下创建
.ignore
文件,告诉git,这些文件不用纪录。
以下是官方文档里的案例
# 所有.a拓展名结尾的文件都不跟踪
*.a
# 优先级别最高,还是得跟踪lib.a文件就算上面的语句忽略了对.a文件的跟踪
!lib.a
# 只忽略当前目录中的TODO文件
/TODO
# 忽略所有在build文件夹下的文件
build/
# 忽略指定文件夹目录这一层中的指定文件
doc/*.txt
# 忽略指定文件夹下各层级的.pdf文件
doc/**/*.pdf
行,了解了最基本的提交后我们开始进行重要的版本回退的学习了
版本回退
首先可以使用
git log #查看详细的提交纪录
commit 52667c043a702970d8c25960cb21e58948902e9b (HEAD -> master)
Author: wahtwang <603225315@qq.com>
Date: Mon Apr 29 17:49:25 2019 +0800
first commit
显示得很详细,谁提交了,什么时候提交了,提交的信息时什么。提交的版本号是什么。
我们再在文本内加入 I inserted a new line!再将内容保存并提交
git commit -a -m "second commit"
git log
显示
commit a457526f3a4fc0ed512361c7b3d8fc8c423da620 (HEAD -> master)
Author: wahtwang <603225315@qq.com>
Date: Wed May 1 16:37:23 2019 +0800
second commit
commit 52667c043a702970d8c25960cb21e58948902e9b
Author: wahtwang <603225315@qq.com>
Date: Mon Apr 29 17:49:25 2019 +0800
first commit
如果内容太多我们也可以使用git log --pretty=oneline
来缩减内容
--pretty
可以给予一些内容显示格式供你挑选,另外还有 short,full 和 fuller 可以用。
a457526f3a4fc0ed512361c7b3d8fc8c423da620 (HEAD -> master) second commit
52667c043a702970d8c25960cb21e58948902e9b first commit
就只显示版本号和提交说明了
如果想看每次提交具体做了些什么,可以加上-p
选项
如果想要限制显示的提交的内容数,如就看近两次提交的结果,可以加上-2
如果想要查看总结性的提交内容,可以用--stat
git log -p -2
那么使用什么命令可以回退版本呢。
git reset
上一章我们使用git reset
清空了暂存区的改动,其实是使用了git reset --mixed HEAD
命令,其中,HEAD
是指当前版本,其中--mixed
是指将贮存区版本回退到 HEAD
(也就是当前版本),并同步暂存区的内容(清空暂存区相对于贮存区的修改)。
我们还可以重置暂存区中单独的某个文件(加个路径,或文件名),使用git reset index.txt
,实际上是git reset --mixed HEAD index.txt
,--mixed
和HEAD
是默认的,所以可以省略。加了index.txt
后会跳过第一步,也就是跳过将贮存区版本回退的一步,只将暂存区版本进行回退。
如果想要回退指定文件,像上面一样,在reset后可以加个路径或文件名,只有mixed才可以这么做。
与 HEAD
相对的有 HEAD^
表示上一个版本 HEAD^^
表示上上个版本以此类推。HEAD~1
表示上一个版本;HEAD~2
表示上2个版本,以此类推。
--mixed
相对的也有其他几个选项--soft
软回退,和--hard
硬回退。
--soft
是只将贮存区版本回退到 HEAD
,不修改暂存区和工作区。
--hard
是将三个区域都同步到HEAD
。
所以如果我们想要回退的话使用git reset --hard HEAD^
将所有区域的内容回退到上一个版本。
如果你后悔了,git reset --hard a4575
回退到指定版本,那这个a4575
哪里来的呢,它是回退前版本的版本号。
你可以从未关掉的命令行找到它,也可以通过git reflog
来寻找,它纪录了你每一次命令的相应信息。
好,这一章最后再来总结一下用到的命令
git commit #提交改动到贮存区,-a跳过add,-m写下提交修改的备注。
git log #显示每次提交的信息,--pretty=oneline来缩减信息内容,在提交较多时信息更可读。
git reset #本章重点,回退版本
# --hard 回退贮藏区版本并重置工作区和暂存区
# --mixed(默认)回退贮藏区版本并重置暂存区
#--soft只回退贮藏区版本