我们要对文件的版本进行控制,首先需要明白当前文件处于什么样的状态,对于不同状态下的文件,我们可以进行不同的操作。而在Git中,文件主要是有四种状态:
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
Git的初步操作了解了文件的状态之后,我们不妨模拟一个关于论文的例子来初步了解下版本库以及文件的简单操作:
创建一个工作区,并进行初始化
1# 创建一个工作区2mkdir my_dir
3# 进入工作区
4cd my_dir
5# 通过init命令将工作区转化成Git可以管理的仓库
6git init
7# 在该仓库中创建一个paper.txt,用于编写我们的论文
8touch paper.txt
我们在paper.txt之中编辑如下内容:
1# 我们在`paper.txt`之中编辑如下内容:2Oh, my god, I will write my graduate paper.
3Come on, Taoye.
通过add命令将paper.txt文件添加到暂存区
1# 通过add命令将paper.txt文件添加到暂存区2$ git add paper.txt
通过commit命令将暂存区中的内容提交到仓库
1# 通过commit命令将暂存区中的内容提交到仓库,指定提交paper.txt文件2$ git commit -m "start writing my paper" paper.txt
3
4# 对工作区中的文件统一提交至暂存区
5$ git commit -m "XXXXXXXXXXX"
使用commit命令之后,就能将我们暂存区中的内容提交至仓库中,其中的-m参数表示的是提交说明,用于解释说明本次提价的内容。提交完成之后,我们可以在Git中通过git status来查看文件的状态:
1# 查看指定文件的状态2git status paper.txt
3# 查看所有文件的状态
4git status
以上操作过程如下图所示:
在上节中,我们已经介绍了文件的四种状态,并且以关于论文的例子来初步了解了版本库以及文件库的简单操作。
假设现在论文指导老师对Taoye提出了要求:“Taoye同学,时间来不及了,你今天必须给我完成论文的摘要部分!!!否则,后果自负!!!”
“Excuse me?今天?我游戏打得正嗨呢。面对老师如此强硬的要求,没办法了,只能暂停上王者的上分阶段了,开始刚论文。”对此,Taoye进行了一个骚气的三下五除二操作,广泛的涉猎各种优秀的学者文献并进行构思,迅速开写paper.txt中的摘要部分,完成之后的内容如下所示:
1Oh, my god, I will write my graduate paper.2Come on, Taoye!
3
4I have finished the summary today!
之后,我们再通过git status命令来查看一下该论文文件的状态:
1$ git status paper.txt2On branch master
3Changes not staged for commit:
4 (use "git add <file>..." to update what will be committed)
5 (use "git checkout -- <file>..." to discard changes in working directory)
6
7 modified: paper.txt
8
9no changes added to commit (use "git add" and/or "git commit -a")