Git简明教程--4.文件添加和版本提交到本地仓库

1.跟踪新文件

首先要了解的是,所有新创建或添加到工作目录(working dirctory)的文件,都是未被跟踪的,也就是说此时Git认为他们并不是自己所管理的文件

我们在Git仓库中新建一个文件,然后使用 git status命令,可以要确定哪些文件当前处于什么状态。

Git简明教程--4.文件添加和版本提交到本地仓库_第1张图片

可以看到此时新建文件并没有被Git追踪(Untracked)

git add fileName

我们需要使用以上命令将文件添加到Git的暂存区(staging area),这时候文件就开始被Git追踪,也就是说文件以后的变化会被Git发现并指出,文件也就可以被保存到Git版本库中(以快照的形式)。

Git简明教程--4.文件添加和版本提交到本地仓库_第2张图片

可以看到此时新建的文件已经被追踪(未被提交状态)

也就是说,git add 命令将文件添加进了暂存区后,文件就已经被Git追踪了。

Git简明教程--4.文件添加和版本提交到本地仓库_第3张图片

已经被Git追踪的文件,我们就可以查看它在Git内部的状态

Git简明教程--4.文件添加和版本提交到本地仓库_第4张图片

可以看到我新建了文件newFile2,然后使用git add 命令将其添加进暂存区,此时Git已经对其开始追踪,然后再使用git status查看文件状态,发现它处于修改(modified)状态。

2.修改(更新)文件

使用git status 命令查看文件状态,发现有修改后没有存入暂存区的文件(也就是说工作目录和暂存区存在不一致文件)

Git简明教程--4.文件添加和版本提交到本地仓库_第5张图片

我们可以使用git add fileName 将更新后的文件添加进暂存区

3.提交文件(提交到Git版本仓库)

现在的暂存区域已经准备妥当可以提交了。在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit

$ git commit

这种方式会启动文本编辑器以便输入本次提交的说明。默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。

Git简明教程--4.文件添加和版本提交到本地仓库_第6张图片

可以看到,默认的提交消息包含最后一次运行 git status 的输出,放在注释行里,另外开头还有一空行,供你输入提交说明。你完全可以去掉这些注释行,不过留着也没关系,多少能帮你回想起这次更新的内容有哪些。(如果觉得这还不够,可以用 -v 选项将修改差异的每一行都包含到注释中来。)退出编辑器时,Git 会丢掉注释行,将说明内容和本次更新提交到仓库。

另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:

Git简明教程--4.文件添加和版本提交到本地仓库_第7张图片

记住,提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

4.查看版本更新信息

使用git commit 命令以后,Git就会把暂存区的文件全部提交到Git版本仓库(Repository)

Git简明教程--4.文件添加和版本提交到本地仓库_第8张图片

我们使用:

git log 

可以查看commit以后的版本更新信息

Git简明教程--4.文件添加和版本提交到本地仓库_第9张图片

可以看到commit -m 的信息被记录下来,其中包括版本快照的校验和,发布者信息和提交更新的时间。

最后我想补充一下Git中快照存储模型(看不懂也没关系,不影响Git的使用)

Git简明教程--4.文件添加和版本提交到本地仓库_第10张图片

当使用 git commit 新建一个提交对象前,Git 会先计算每一个子目录(本例中就是项目根目录)的校验和,然后在 Git 仓库中将这些目录保存为树(tree)对象。之后 Git 创建的提交对象,除了包含相关提交信息以外,还包含着指向这个树对象(项目根目录)的指针,如此它就可以在将来需要的时候,重现此次快照的内容了。

我们在 git log中看到的e27……就是指向树对象(tree)的一个版本快照对象(commit)的校验和,而版本中每个文件(目录)也会被记录成一个blob对象然后树对象(tree)的指针指向这些对象,实现文件的快照存储。


  • Git文档
  • https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
  • https://www.cnblogs.com/cb0327/p/5066685.html

你可能感兴趣的:(git教程)