1 Git常用命令與文件狀態(tài)流轉(zhuǎn)
# 使用Git對(duì)項(xiàng)目進(jìn)行版本控制,初始化
$ git init
# add命令,將項(xiàng)目文件放入暫存區(qū)
$ git add --all .
# commit命令,將暫存區(qū)文件提交至倉(cāng)庫(kù)區(qū)
$ git commit -m "項(xiàng)目代碼的第一次提交"
----------------------------------------------------------------------------
# 查看commit的提交記錄
$ git log
commit f95f59fd0c55bc8f8f81ff3919f8a97ccc97315c (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date: Mon Mar 23 18:00:47 2020 +0800
項(xiàng)目代碼的第一次提交
----------------------------------------------------------------------------
# 新增Test.java,修改GitTests.java,查看文件狀態(tài)
$ git status
src/main/java/com/gp6/git/Test.java
modified: src/test/java/com/gp6/git/GitTests.java
----------------------------------------------------------------------------
# 將文件放入暫存區(qū)
$ git add .
# 再次查看文件狀態(tài)
$ git status
new file: src/main/java/com/gp6/git/Test.java
modified: src/test/java/com/gp6/git/GitTests.java
# 將文件提價(jià)至倉(cāng)庫(kù)中
$ git commit -m "第二次提交"
[master 9a459a0] 第二次提交
2 files changed, 5 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/com/gp6/git/Test.java
----------------------------------------------------------------------------
# 查看提交記錄
$ git log
commit 9a459a0707b5a6912ad2274bc2928bc20e1119a8 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date: Wed Mar 25 11:55:25 2020 +0800
第二次提交
commit 10ab94c5e545f4eecb09770fdaaff27f4b8105d4
Author: GP6 <GP6@omlife.com.cn>
Date: Wed Mar 25 11:51:28 2020 +0800
項(xiàng)目代碼的第一次提交
2 解析命令
2.1 git init
將項(xiàng)目初始化為本地倉(cāng)庫(kù)
命令執(zhí)行后,在項(xiàng)目目錄下生成隱藏目錄(.git)
.git目錄下存在一個(gè)objects目錄,objects目錄中只有info和pack兩個(gè)空文件夾
-
初始化時(shí)不存在commit,所以不存在object
2.2 git add
工作目錄下添加pom.xml
使用git hash-object [文件名]查看文件hash-key
$ git hash-object pom.xml
e3521eb60ad395e4eccc6bcf2fcda12f05c77f70
執(zhí)行g(shù)it add ./pom.xml,object目錄自動(dòng)新增一個(gè)e3目錄,同時(shí).git目錄下的index文件大小也發(fā)生變更(將文件的信息保存到index文件中)
-
由下圖可看出,40位的hash-key 前兩位作為目錄名,后38位作為文件名,標(biāo)識(shí)pom.xml這個(gè)object對(duì)象
使用hash-key可查看object對(duì)象的內(nèi)容與類型
# 查看object對(duì)象內(nèi)容
git cat-file -p [hash-key]
樣例
$ git cat-file -p e3521eb60ad395e4eccc6bcf2fcda12f05c77f70
# 查看object對(duì)象類型
git cat-file -t [hash-key]
樣例
$ git cat-file -t e3521eb60ad395e4eccc6bcf2fcda12f05c77f70
blob
- 查看index內(nèi)容
$ git ls-files --stage
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0 pom.xml
2.3 git commit
-
新建src目錄,目錄下新增1.txt文件(文件內(nèi)容隨便填寫)
- 將1.txt添加到暫存區(qū),查看object目錄與index文件的變化
# 查看src目錄的hash-object值(可見,git未將目錄視作object)
$ git hash-object ./src
fatal: Cannot open './src': Permission denied
# 查看1.txt的hash-object值
$ git hash-object ./src/1.txt
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
# 提交至?xí)捍鎱^(qū)
$ git add ./src/1.txt
# 查看index文件變化
$ git ls-files --stage
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0 pom.xml
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 src/1.txt
-
object目錄中新增e6目錄(對(duì)應(yīng)1.txt),src目錄未在object目錄中體現(xiàn)
執(zhí)行第一次git commit,生成commit對(duì)象,同時(shí)生成tree對(duì)象(根據(jù)index記錄生成)
查看tree對(duì)象,master是分支名,master^{tree},表示master分支所指向的tree對(duì)象
$ git cat-file -p master^{tree}
100644 blob e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 pom.xml
040000 tree 341e54913a3a43069f2927cc0f703e5a9f730df1 src
# 查看tree對(duì)象的內(nèi)容
$ git cat-file -p 341e54913a3a43069f2927cc0f703e5a9f730df1
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 1.txt
# 查看提交歷史
$ git log
commit f818fc367672071759493276fb4811eb977d1b36 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date: Wed Mar 25 14:43:47 2020 +0800
第一次提交
# 查看提交詳情
$ git cat-file -p f818fc367672071759493276fb4811eb977d1b36
tree e8a633e8dc116131317586e7a85e216c3c3248b8
author GP6 <GP6@omlife.com.cn> 1585118627 +0800
committer GP6 <GP6@omlife.com.cn> 1585118627 +0800
第一次提交
- 對(duì)文件進(jìn)行變更
$ git status
modified: src/1.txt
.gitignore
main/
$ git add .
$ git status
new file: .gitignore
new file: main/2.txt
modified: src/1.txt
$ git commit -m "第二次提交"
$ git ls-files --stage
100644 a2a3040aa86debfd8826d9c2b5c816314c17d9fe 0 .gitignore
100644 ad4b04bd10cace01ef2e80d79d04366884cc846e 0 main/2.txt
100644 e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 0 pom.xml
100644 2f480d77203c7d56ccc820b6718fb4b48f3738a5 0 src/1.txt
$ git cat-file -p master^{tree}
100644 blob a2a3040aa86debfd8826d9c2b5c816314c17d9fe .gitignore
040000 tree 33506635d883c7f7bca457f22300e4041dc80dae main
100644 blob e3521eb60ad395e4eccc6bcf2fcda12f05c77f70 pom.xml
040000 tree 5d7ce3a823552f80c28a4860ce73a803d913c4b0 src
$ git log
commit 7e4ecdac4ee614e40a55d1a58529f087c3728440 (HEAD -> master)
Author: GP6 <GP6@omlife.com.cn>
Date: Wed Mar 25 15:47:33 2020 +0800
第二次提交
commit f818fc367672071759493276fb4811eb977d1b36
Author: GP6 <GP6@omlife.com.cn>
Date: Wed Mar 25 14:43:47 2020 +0800
第一次提交
GP6@GP6 MINGW64 /d/Study/Git/test (master)
$ git cat-file -p 7e4ecdac4ee614e40a55d1a58529f087c3728440
tree 652fa35b075c87becd7e995f9e03b3ca90f93f5f
parent f818fc367672071759493276fb4811eb977d1b36
author GP6 <GP6@omlife.com.cn> 1585122453 +0800
committer GP6 <GP6@omlife.com.cn> 1585122453 +0800
第二次提交