分布式版本控制系统 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 add
将 about_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(-)
这里要注意,提交时,记录的是放在暂存区域的快照。而其他未暂存的文件的仍然保持已经修改的状态,这部分的内容,可以在下次提交纳入版本管理。
其实每次提交都是对项目做一次快照,后面也可以回到这个状态,或者进行比较。
总结
- 使用
git status
可以查看文件的状态; - 使用
git add
能够跟踪新文件,也能够暂存已修改文件(即已跟踪文件修改); - 使用不带参数的
git diff
能够查看未暂存文件的修改; - 使用带参数的
git diff --staged
能够查看已暂存文件的修改部分; - 使用
git commit -m <message>
提交更新。
以上就是本篇的主要内容
共同学习,写下你的评论
评论加载中...
作者其他优质文章