# Git 的基本工作流程

  1. 创建 Git 工作目录和版本库
  2. 添加修改删除文件
  3. git add 命令将文件修改添加到暂存区
  4. git commit 命令将暂存区所有内容提交到当前分支(创建版本库时 git 自动创建一个 master 分支)

# 版本库

版本库又名仓库,英文名 repository,可简单理解为一个文件目录,目录里所有的文件都受 Git 管理。Git 会记录该目录下文件的修改删除,这些记录在将来需要恢复某个记录文件时起到至关重要的作用。

# 文件添加

文件添加指的是将文件添加到暂存区,这里我们回顾一下前面的例子,在前边的例子中,我们使用了 git add 1.c 命令将我们的文件 1.c 添加到了暂存区,然后我们使用了 git status 命令来查看项目状态,这里 git 给我们输出的信息在分支 master 中没有任何提交记录,但是 1.c 文已经添加到了暂存区。 命令:git add filename

# 暂存区

英文名 stage 或 index,一般在.git 目录下的 index 文件中,所以暂存区有时也被称为索引(index)。

# 工作区

就是你在电脑里能看到的目录。

# 一个简单的示例

我们通过一个简单的示例来理解上面几个概念。 首先,我们打开 Git Bash,在桌面上创建一个目录文件叫 git_demo,然后进入 git_demo 目录。这个时候 git_demo 就是我们的工作目录。此时我们的 Git 自动帮我们创建了第一个分支 master 以及一个指向 master 的指针 HEAD。

接着,我们输入 git init 命令,在 git_demo 目录下创建版本库,此时你会发现在 git_demo 目录下多了一个隐藏文件夹 .git , 该文件夹就是我们的版本库。

然后,我们使用 touch 1.c 命令在工作区里创建一个.c 文件,并用 git add 1.c 将文件添加到暂存区。我们使用命令 git status 查看文件状态,git log 查看 git 日志,看到文件尚未被提交,在 git 日志中 master 分支没有任何提交记录,得知我们添加的 1.c 文件仍在暂存区。

最后,我们使用 git commit 命令将暂存区内容提交到分支 master 中。这里 git commit -m “create 1.c” 中”” 中内容为此次提交的说明。我们用 git status 和 git log 看一下提交之后文件处于什么状态。通过 git status 我们看到当我们一旦提交后没有做任何修改,那么工作区就是干净的。在 git log 中我们的 master 分支上出现了第一次提交记录,该提交记录的说明是 create 1.c。

到这里,我们的版本库暂存区和工作区的内容就讲完了,但是我们不妨继续做实验加深对 git 的理解。接下来我们对 1.c 进行修改,比如我们写个 hello world 程序,然后我们用 git add 1.c 把它添加到暂存区,然后我们继续对 1.c 程序进行修改,比如写一行注释,最后我们 git commit 一下把东西提交。

此时我们使用 git status 查看状态发现我们对 1.c 的第二次修改并没有被提交,而且使用 git diff HEAD -- 1.c 命令查看文件不同时 git 明确的给我们指出来这多了一行 //hello world,这是为什么呢?这里我们需要清楚一个概念,在 git 的管理中,git 对于版本的控制实质上是对修改进行追踪。什么意思呢?你对文件的增删改对 git 来说都只是修改,git 并不会追踪文件的本身。

我们回到刚刚的实验,最初我们在 1.c 中写了一个 hello world 程序,然后我们把 1.c 添加到了暂存区,这里实际上并不是把 1.c 文件添加到了暂存区,而是将 1.c 文件的修改提交到了暂存区,然后我们后面对 1.c 写了一行注释,这个改动并没有被添加,所以 commit 后版本库和工作区是不一致的。