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 #增加


5.撤銷修改。

撤銷對工作區的修改:

git checkout [filename]  #讓工作區中的文件回到最近一次commit 或者 add 的狀態。

#若文件還沒添加到暫存區時,執行這條撤銷語句,會變的和版本庫中記錄的一樣。

#若文件已添加到暫存區並做了修改,則會回到暫存區的狀態!


撤銷對暫存區的修改:

git reset HEAD [filename] #將添加到暫存區的修改回退到工作區。


撤銷對版本庫的提交:

git reset --hard [sha1]


6.差異比較。

比較工作區和暫存區的差異。

git diff  #查看尚未加入到暫存區的文件有哪些新的修改。


查看暫存區和版本庫的差異。
git diff  --cached  #默認參數是HEAD  就是和版本庫中最後一次commit做比較。

git diff --staged 【SHA1】  #和版本庫中的某個commit進行比較。



查看工作區和版本庫的差異。

git diff HEAD【SHA1】


   

比較兩個版本提交之間的差異。

git diff 【SHA1】[SHA2]

================================






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章