关于 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 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>
提交更新。以上就是本篇的主要内容
未完待续
欢迎关注微信公众号《书所集录》