学习资源:Git 教程-廖雪峰的官方网站

文件提交到仓库

使用Git 进行版本控制,自然地涉及到使用Git 来管理文件的修改。最直接的就是,我修改了一个文件,Git 如何记录我修改了以及我做了什么修改。这就需要把文件提交到仓库,把一个文件提交到仓库需要执行两个命令git add git commit

git add

git add命令是将仓库目录下的文件做提交准备的,形象一点就是该命令会将文件添加到一个篮子里,之后才能提交。使用这个命令还会对文件进行跟踪,之后文件的修改Git 都会知道,所以对于需要版本控制的文件要使用这个命令,否则即使你修改了Git 也不会知道,更不会有记录。

该命令的用法为:git add filename

要注意的是,待提交的文件要放在仓库目录下,否则Git 无法找到文件并管理。

示例:

我在learngit仓库目录下新建了如下图所示内容的readme.txt的文本文件

Git 学习记录 02_文本编辑器

然后我需要把它提交到Git ,让Git 能够记录我对它的修改,我应该在learngit仓库目录下打开git bash(在learngit 目录下鼠标右键,Windows 11点击显示更多选项可以看到 open git bash here,如下图)

Git 学习记录 02_版本控制系统_02

然后就会出现git bash的界面,如下图

Git 学习记录 02_版本控制系统_03

在git bash 中输入如下命令:

git add readme.txt

就会把readme.txt文件加入待提交文件的篮子里。如下图:

Git 学习记录 02_版本控制系统_04

执行后不会有信息提示,添加成功。

该命令可以多次使用以把多个文件都加入到待提交文件篮子里,之后可以一起提交。

每次要提交文件前,都需要先添加到待提交文件篮子里。

git commit

通过git add已经将所有要提交的文件放入待提交文件篮子里了。

然后就需要使用git commit命令来提交文件到仓库,Git就会记录我们文件的修改信息,此后每次修改后都要提交文件来让Git 记录,对初学的我而言,这个命令就是告诉Git 帮我记录一下这个文件被修改的信息。

这个命令的用法如下:

git commit -m"message"

message代表本次提交的说明,执行该命令后,所有添加到待提交文件篮子里的文件都会被提交,Git都会记录下来。如下图:

Git 学习记录 02_文本编辑器_05

这张图中git add命令执行后出现的警告是由于我对readme.txt文件做了修改,新加了一行,使用了换行符。这个警告告诉我下次Git 会自动把换行符换成回车换行符。

git commit命令执行后,出现了提示信息,显示了本次提交的说明"This is an example",被修改文件的数量(1 file changed)以及修改方式(1 insertion(+))。

git status

有些时候,一次性修改的文件很多,可能会发生忘记自己修改了哪些文件或者忘记添加到待提交篮子里等情况。Git 提供了git status命令来帮助我们查看工作区状态

该命令用法如下:

git status

下图是一个示例:

Git 学习记录 02_版本控制系统_06

这里提示有未跟踪文件存在,这是因为我在仓库目录创建了test.txt文件但没有使用git add命令来将它添加到篮子里并跟踪它的状态。

只需要使用git add命令将test.txt添加到篮子里就可以跟踪它的状态,对它进行版本控制了。

git status还能显示文件状态的其他相关信息,如下图:

Git 学习记录 02_文本编辑器_07

我对readme.txt文件做了修改,运行git status命令后显示了该文件被修改了,但是没有加入待提交篮子。

还要使用git add将文件加入待提交篮子才能提交到仓库并更新文件的版本信息,否则不会记录本次修改的信息。所以每次需要记录版本信息时,都需要使用add和commit两个命令。

git diff

如果需要查看具体的修改内容,可以使用git diff命令。

该命令用法如下:

git diff filename

如下图:

Git 学习记录 02_文本编辑器_08

显示了文件具体的修改内容,包括删除了某行,新加了某些行等。

进一步

git add命令的本质是什么?它实际上做了一件什么事?

git commit命令又做了什么事?git是如何实现文件状态的跟踪的?

又是如何记录下每一次修改的内容的?