鍍金池/ 教程/ Java/ 管理修改
操作標(biāo)簽
多人協(xié)作
解決沖突
Git 的誕生
工作區(qū)和暫存區(qū)
搭建 Git 服務(wù)器
Bug 分支
配置別名
從遠(yuǎn)程庫克隆
分支
添加遠(yuǎn)程庫
分支管理策略
撤銷修改
安裝 Git
管理修改
生成 SSH key
GitHub
倉庫狀態(tài)
忽略特殊文件
刪除文件
Feature 分支
創(chuàng)建與合并分支
創(chuàng)建版本庫
創(chuàng)建標(biāo)簽
版本回退
集中式 vs 分布式

管理修改

現(xiàn)在,假定你已經(jīng)完全掌握了暫存區(qū)的概念。下面,我們要討論的就是,為什么 Git 比其他版本控制系統(tǒng)設(shè)計(jì)得優(yōu)秀,因?yàn)?Git 跟蹤并管理的是修改,而非文件。

你會問,什么是修改?比如你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至創(chuàng)建一個新文件,也算一個修改。

為什么說 Git 管理的是修改,而不是文件呢?我們還是做實(shí)驗(yàn)。第一步,對 readme.txt 做一個修改,比如加一行內(nèi)容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.

然后,添加:

$ git add readme.txt
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

然后,再修改 readme.txt:

$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

提交:

$ git commit -m "git tracks changes"
[master d4f25b6] git tracks changes
 1 file changed, 1 insertion(+)

提交后,再看看狀態(tài):

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

咦,怎么第二次的修改沒有被提交?

別激動,我們回顧一下操作過程:

第一次修改 -> git add -> 第二次修改 -> git commit

你看,我們前面講了,Git 管理的是修改,當(dāng)你用git add命令后,在工作區(qū)的第一次修改被放入暫存區(qū),準(zhǔn)備提交,但是,在工作區(qū)的第二次修改并沒有放入暫存區(qū),所以,git commit只負(fù)責(zé)把暫存區(qū)的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.

可見,第二次修改確實(shí)沒有被提交。

http://wiki.jikexueyuan.com/project/git-tutorial/images/git-add-changes.gif" alt="" />

那怎么提交第二次修改呢?你可以繼續(xù)git addgit commit,也可以別著急提交第一次修改,先git add第二次修改,再git commit,就相當(dāng)于把兩次修改合并后一塊提交了:

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

好,現(xiàn)在,把第二次修改提交了,然后開始小結(jié)。

小結(jié)

現(xiàn)在,你又理解了 Git 是如何跟蹤修改的,每次修改,如果不 add 到暫存區(qū),那就不會加入到 commit 中。

上一篇:Bug 分支下一篇:從遠(yuǎn)程庫克隆