現在,假定你已經完全掌握了暫存區的概念。下面,我們要討論的就是,為什麼git比其他版本控制系統設計得優秀,因為git跟蹤並管理的是修改,而非檔案。
你會問,什麼是修改?比如你新增了一行,這就是乙個修改,刪除了一行,也是乙個修改,更改了某些字元,也是乙個修改,刪了一些又加了一些,也是乙個修改,甚至建立乙個新檔案,也算乙個修改。
為什麼說git管理的是修改,而不是檔案呢?我們還是做實驗。第一步,對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.
然後,新增:
$ git add readme.txt
$ git status
# on branch master
# changes to be committed:
# (use "git reset head ..." 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(+)
提交後,再看看狀態:
$ git status
# on branch master
# changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." 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管理的是修改,當你用git add
命令後,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改並沒有放入暫存區,所以,git commit
只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。
提交後,用git diff head -- readme.txt
命令可以檢視工作區和版本庫裡面最新版本的區別:
$ 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.
可見,第二次修改確實沒有被提交。
那怎麼提交第二次修改呢?你可以繼續git add
再git commit
,也可以別著急提交第一次修改,先git add
第二次修改,再git commit
,就相當於把兩次修改合併後一塊提交了:
第一次修改 ->git add
-> 第二次修改 ->git add
->git commit
好,現在,把第二次修改提交了,然後開始小結。
現在,你又理解了git是如何跟蹤修改的,每次修改,如果不add
到暫存區,那就不會加入到commit
中。
時光機穿梭
版本回退 工作區和暫存區 你可以簡單理解為,需要提交的檔案修改通通放到暫存區,然後,一次性提交暫存區的所有修改。管理修改 第一次修改 git add 第二次修改 git add git commit每次修改,如果不add到暫存區,那就不會加入到commit中 撤銷修改 場景1 當你改亂了工作區某個檔...
Git時光機穿梭
一.1.檢視倉庫當前狀態 git status 2.檢視具體修改的內容 git diff readme.txt 提交前再看下是否包含某檔案 git status 3.提交檔案分兩步add 和commit git add readme.txt git status git commit m add d...
Git 時光穿梭
1.git status 命令可以讓我們掌握倉庫當前狀態 2.git diff 檔名 顧名思義 檢視difference,可以得到檔案更改的詳細資訊 3.head指向的版本是當前版本,git 允許我們在版本之間穿梭,使用命令 git reset hard commit id 穿梭前可以檢視提交歷史,...