继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

大梦三千秋
关注TA
已关注
手记 173
粉丝 7
获赞 168

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


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

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

Git 基础(续)


记录更新到仓库

当手上有真实项目的 Git 仓库时,从仓库取出所有文件的拷贝。一般流程都是修改文件,完成目标,提交更新到仓库。

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

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

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

检查当前文件的状态

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

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

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

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

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> 提交更新。

以上就是本篇的主要内容


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP