分布式版本控制系统 Git | 二

分布式版本控制系统 Git | 二


关于 Git 的一些基本内容,在下面的文章中作了简单的介绍及一些命令的使用。git

分布式版本控制系统 Git微信

今天的篇幅将延续上一篇的内容继续讲解 Git 基础这一块的内容。编辑器

Git 基础(续)


记录更新到仓库

当手上有真实项目的 Git 仓库时,从仓库取出全部文件的拷贝。通常流程都是修改文件,完成目标,提交更新到仓库。分布式

这个过程当中,工做目录下的文件只有两种状态:已跟踪或未跟踪。.net

已跟踪的文件指被归入版本控制的文件,上一次的快照中有它们的记录,工做一段时间后,它们的状态多是未修改,已修改或已放入暂存区。版本控制

除此以外,工做目录中除已跟踪的文件之外的全部其余文件都属于未跟踪文件,它们即不存在于上次的快照,也没有放入暂存区。rest

检查当前文件的状态

使用 git status 命令能够查看文件的状态。当克隆仓库未作任何修改时,使用这个命令将会看到如下的结果:code

$ git status
On branch master
nothing to commit, working directory clean

这里表示工做目录是干净的。也便是已跟踪的文件在上次提交后都不曾修改过。blog

这些信息也表示没有出现任何未跟踪的新文件,不然这里会有所显示。get

On branch master 这个信息表面当前的分支是 master,这是默认分支。至于 Git 分支 会在后面另开篇幅详细讨论。

尝试建立新文件 readme.txt,使用 git status 命令查看状态:

$ echo 'Something you need to know about git' > readme.txt

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        readme.txt

Untracked files 表示 readme.txt 属于未跟踪文件,Git 并不会自动将其归入跟踪范围,因此须要对新文件进行跟踪管理。

跟踪新文件

上一篇文章讲了 git add 命令,该命令的做用便是用来跟踪新文件,如今尝试使用跟踪 readme.txt 文件:

$ git add readme.txt

这时使用 git status 命令,能够查看 readme.txt 文件的状态,此时已经处于暂存状态:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   readme.txt

这部分的内容在分布式版本控制系统 Git 也作了简单的介绍,这里就当作熟悉命令的使用。

Changes to be committed:,这行下面的就表示是已暂存的状态。若是此时提交的话,那这个文件在 git add 时的版本将会留在历史记录里。

暂存已修改文件

当已经追踪的文件被修改时,使用 git status 命令查看状态:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   about_git.txt

在这些信息中,能够看到 about_git.txt 文件发生了改变,可是并无放入暂存区中。这里也提示可使用 git add 命令暂存这次更新。

git add 可以跟踪新文件,也可以将已跟踪的文件放到暂存区。能够将这个命令理解为“添加内容到下一次提交中”。

使用 git addabout_git.txt 文件放到暂存区,而后用 git status 查看状态:

$ git add about_git.txt

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   about_git.txt
        new file:   readme.txt

此时新文件以及修改后的追踪文件,都已经暂存,等下次提交时,将一并更新到仓库中。

若这时修改 about_git.txt 文件的内容,编辑保存后。想对两个文件进行提交时,使用 git status 先查看状态:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   about_git.txt
        new file:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   about_git.txt

这里会发现,about_git.txt 文件同时出如今暂存区和非暂存区。这里出现这样结果的缘由,是由于 Git 只暂存了运行 git add 命令时的版本。这个时候如果进行提交,about_git.txt 的版本也会是执行 git add 命令时的版本,而不是工做区当前的版本。因此当运行了 git add 后,又对文件进行了修改,须要从新使用 git add 把最新的版本暂存起来:

$ git add about_git.txt

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   about_git.txt
        new file:   readme.txt
查看已暂存和未暂存的修改

git status 命令输出的结果是指工做区的状态,至于要知道具体修改了什么地方,可使用 git diff

git diff 不一样于 git status 以列出文件名的形式输出结果,而是经过文件补丁的格式显示具体哪行发生了改变。

假如再次修改 readme.txt 进行暂存,修改 about_git.txt 文件不进行暂存,使用 git status 命令查看效果:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   about_git.txt

要查看未暂存部分究竟更新了哪些内容,直接使用不加参数的 git diff

$ git diff
diff --git a/about_git.txt b/about_git.txt
index 8596ae8..39f1422 100644
--- a/about_git.txt
+++ b/about_git.txt
@@ -4,4 +4,4 @@ Change something

 Add something

-Something different here
+Something changed here

这个命令比较的是工做区中,当前文件和暂存区域快照之间的差别。也就是修改以后还未暂存起来的变化。

如果须要查看已暂存待提交的内容变化,使用 git diff --staged 命令。这个命令比较的是已暂存文件与最后一次提交的文件的差别。

$ git diff --staged
diff --git a/readme.txt b/readme.txt
index 35b128b..a68a8b2 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,3 @@
 Add something here
+
+Change something here
注意, git diff 自己只显示未暂存的改动,而不是自上次提交以来作的全部改动。因此有时候一次暂存全部更新的文件后,使用 git diff 会发现什么都没有,就是这个缘由。

下面再尝试前面说起的一种状况,对 about_git.txt 暂存后再次编辑的状况。

先使用 git status 查看结果:

$ git add about_git.txt
$ echo "# test line" >> about_git.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   about_git.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   about_git.txt

再使用 git diff 查看未暂存的修改:

$ git diff
diff --git a/about_git.txt b/about_git.txt
index 39f1422..5962c89 100644
--- a/about_git.txt
+++ b/about_git.txt
@@ -5,3 +5,4 @@ Change something
 Add something

 Something changed here
+# test line

而后使用 git diff --staged 查看已暂存修改的部分:

$ git diff --staged
diff --git a/about_git.txt b/about_git.txt
index 8596ae8..39f1422 100644
--- a/about_git.txt
+++ b/about_git.txt
@@ -4,4 +4,4 @@ Change something

 Add something

-Something different here
+Something changed here
提交更新

这部份内容,一样在分布式版本控制系统 Git 作了介绍。

可使用 git commit 打开编辑器输入更新信息进行提交更新。

也可使用 git commit -m <message>message 处添加更新信息进行提交更新。

以下示例:

$ git commit -m "Fix issue 007"
[master dd6c67d] Fix issue 007
 2 files changed, 4 insertions(+), 1 deletion(-)

这里要注意,提交时,记录的是放在暂存区域的快照。而其余未暂存的文件的仍然保持已经修改的状态,这部分的内容,能够在下次提交归入版本管理。

其实每次提交都是对项目作一次快照,后面也能够回到这个状态,或者进行比较。

总结


  1. 使用 git status 能够查看文件的状态;
  2. 使用 git add 可以跟踪新文件,也可以暂存已修改文件(即已跟踪文件修改);
  3. 使用不带参数的 git diff 可以查看未暂存文件的修改;
  4. 使用带参数的 git diff --staged 可以查看已暂存文件的修改部分;
  5. 使用 git commit -m <message> 提交更新。

以上就是本篇的主要内容

未完待续

欢迎关注微信公众号《书所集录》
相关文章
相关标签/搜索