1. 程式人生 > >git相關整理

git相關整理

一、git基本原理與概念:

一個git倉庫,可以被分為3個區域,分別是工作區,暫存區,版本庫。

當一個檔案,在git版本庫中,會有三種狀態:

modified(已修改)  git工作區中新增了檔案,或者原有檔案被修改,沒被提交到暫存區時,就是modified狀態。

staged(已暫存)  當檔案被被新增到暫存區後,就為staged狀態。

committed(已提交)  檔案從暫存區提交到版本庫時的狀態。


在工作區的檔案會有兩種狀態:

untracked  未被版本庫追蹤。(比如說,在版本庫的工作區目錄裡新增了一個檔案,這個檔案從來沒有被增加到暫存區以及提交,那這個檔案在工作區就是untracked狀態)

tracked 版本庫追蹤狀態,(已經提交過版本庫,被版本庫追蹤的檔案)


二、常用操作。

git init   #初始化一個git倉庫。

git config --gloabl user.name "shz"  #配置程式碼提交人姓名

git config --global user.emall "shz.qq.com" #程式碼提交人郵箱

git config --global color.ui true  #顯示顏色差異。(不同的狀態會有顏色差異)

配置引數以及配置檔案位置:

--global 當前使用者全域性配置檔案 ~/.gitconfig

--system:  修改所有使用者的配置檔案:/etc/gitconfig

   修改當前版本倉庫的配置檔案  .git/config


git add  [xxx] #將檔案新增到暫存區。

git commit ["text"]  #將暫存區的檔案提交到版本庫。

git log #檢視提交歷史

git status # 檢視當前git倉庫中檔案的狀態。

git diff #可以檢視一個檔案在工作區和暫存區的差異。

git show  [SHA1] #檢視一個具體的提交。

git clone #克隆一個遠端倉庫。


分支操作:

git branch  [xxx] 建立一個新的分支。

git checkout [xxx]  切換到指定分支。

git tag [v1.0]  新增一個標籤。


其他操作:

git show  [SHA1] #可以看指定的某次提交對檔案作出的修改(其實就是檢視blob檔案的內容。)

git cat-file -p [filename]  #檢視git物件檔案內容。

git cat-file -t [filename] #檢視git物件檔案型別。

 

三、git版本庫目錄介紹

branches  專案分支資訊。

hooks      hooks指令碼,特定事件觸發。

info    裡面有一個exclude 檔案,這個檔案用來指定忽略工作區的指定檔案或者目錄。

log     記錄了歷史commit記錄或者刪除記錄。

objects  這裡面真正的儲存了修改的內容,以及commit,tree,blob,tag這四個物件。

refs  引用指標,用於指向本地(或遠端)分支或tag的指標。

config 當前git專案的配置資訊

HEAD  用於指向分支的最末端(最後一次提交)。

index 暫存區檔案。

COMMIT_EDITNSG 最後一次提交的註釋資訊。

description git 專案描述資訊。


四、git物件介紹:

git內部有四種資料物件型別,分別是blob,tree,commit,tag。

blob:用來儲存檔案的資料。

通過git show commit提交的雜湊值  就可以看到blob物件內部的內容了。

例如:git show 0ba6f2a65f03788ac52e31aa7b2eb95731dc7437 就可以看到這次commit都做了哪些修改。


tree: 像一個目錄樹結構,用來管理其他tree和blob

tree維護的就是一個git倉庫中的目錄樹結構,裡面具體指向了哪個tree或者哪個blob 可以通過 git cat-file來檢視。


commit:指向一個tree,用來標記某個目錄檔案某個時間點特定的狀態。(每次提交程式碼到本地的版本庫git commit後就會產生一個commit物件。)

commit物件主要有以下幾個部分構成:

1.一個tree物件

2.父物件

3.作者

4.日期

5.提交者

為什麼要有父物件?

父物件指向了上一次提交的操作,當每次修改然後提交,commit物件本身並不會儲存修改的內容,檔案修改的內容都是通過和父物件的比較而來的。



tag: 用來指向一個commit。

其實git的分支,標籤都是對commit物件做了一個指標,這個指標的存放路徑在.git/refs下。

據說git內部有兩種tag,一種就是commit指標,另外一種tag是個完整的tag物件。

tag物件組成:

物件名,標籤名,物件型別,標籤建立這者名字。

tag標記會指向一個commit的SHA1.

tag標籤與分支的最大區別是?

tag標籤與分支雖然都指向一個commit,但是tag標籤是一個常量指標,是不能改變的。

而分支確是一個變數指標。

git cat-file -p 可以檢視標籤內容。


五、常用操作詳解。

1.將檔案新增進暫存區。

git add [檔名]  #將一個檔案新增進暫存區。

git add . #一次性添加當前工作區中所有的檔案到暫存區。

#這一步操作可以將git倉庫未追蹤的檔案加入到git倉庫的追蹤範圍,如果檔案已被git倉庫追蹤,那麼就會將本次修改新增到暫存區中。


2.將暫存區的檔案提交到原生代碼庫。

git commit -m "commit info" #單步提交,只執行將暫存區檔案提交到版本庫的操作。

git commit -a #一次性提交,將add到暫存區的操作也一併做了。(這種提交方式生產環境不推薦。)

git commit --amend  #修改最後一次提交。


3.檔案刪除。

#同時將某檔案從工作目錄和暫存區刪除:

git rm  -f [filename]

# 如果通過rm命令直接進行刪除,然後再commit提交,雖然git不會再追蹤這個檔案,但是,裡面還會儲存有已刪除檔案的快照。


#從暫存區中刪除,在工作目錄中保留.

git rm --cached  [xxx]


#從版本庫中刪除,版本回退到錯誤提交之前。

#將錯誤提交到版本庫的資料回退到暫存區。

git reset -soft [SHA1]


#將錯誤的提交從暫存區回退到工作區。

git reset -mixed [SHA1]


#將工作區,暫存區,版本庫恢復到指定版本。

git reset --hard SHA1


4.重新命名。

git mv  [old_file] [new_file]

實際操作:

mv [oldfile] [newfile] 首先檔案重新命名。

git rm old_file  #刪除

git add new_file #增加


----------------------------------未完待續