天天看點

git 項目開發使用

GIT儲存的是不是檔案差異或者變化量,而隻是一系列檔案快照

在Git 中送出時,會儲存一個送出(commit)對象,該對象包含一個指向暫存内容快照的指針,包含本次送出的作者等相關附屬資訊,包含零個或多個指向該送出對象的父對象指針:首次送出是沒有直接祖先的,普通送出有一個祖先,由兩個或多個分支合并産生的送出則有多個祖先。

暫存操作會對每一個檔案計算校驗和(即第一章中提到的SHA-1 哈希字串),然後把目前版本的檔案快照儲存到Git 倉庫中(Git 使用blob 類型的對象存儲這些快照),并将校驗和加入暫存區域

當使用git commit 建立一個送出對象前,Git 會先計算每一個子目錄(本例中就是項目根目錄)的校驗和,然後在Git 倉庫中将這些目錄儲存為樹(tree)對象。之後Git 建立的送出對象,除了包含相關送出資訊以外,還包含着指向這個樹對象(項目根目錄)的指針,如此它就可以在将來需要的時候,重制此次快照的内容了。

現在,Git 倉庫中有三種對象:表示檔案快照内容的blob 對象一個檔案一個對象;一個記錄着目錄樹内容及其中各個檔案對應blob 對象索引的tree 對象;以及一個包含指向tree 對象(根目錄)的索引和其他送出資訊中繼資料的commit 對象。

它儲存着一個名為HEAD的特别指針,git通過該指針知道你目前在哪個分支上工作

初始化一個本地目錄為git倉庫

git init

配置git的一些常用參數,如:user.name, user.email等等

git config

從遠端克隆一個倉庫

git clone

檢視目前倉庫狀态

git status

配置遠端位址或者其他一些設定

git remote

想本地倉庫添加檔案

git add 

git倉庫忽略某些檔案不納入git倉庫的管理,不上傳到倉庫。編輯.gitignore添加檔案類型

*.[oa]   忽略以.o或.a結尾的檔案

*~   忽略所有以~結尾的檔案。

.gitignore的格式規範如下:

所有空行或者以注視符号#開頭的行都會被git忽略。

可以使用标準的glob模式比對。

        glob模式是指shell所使用的簡化了的正則,*比對0或多個任意字元;[abc]比對任何一個列在方括号中的字元;?隻比對一個任意字元;[0-9] 比對所有0到9的數字,[a-z]a到z的所有小寫字母

比對模式最後跟\說明要忽略的是目錄。

要忽略指定模式以外的檔案或目錄,可以在模式前加上!取反。

從遠端倉庫更新倉庫内容

git pull

從把修改送出到本地倉庫

git commit

git commit --amend   ---- 修改最後一次送出的資訊,在送出完後發現漏掉了檔案沒有加,送出資訊寫錯了,要想撤銷剛才送出的操作,用該參數重新送出。

從本地倉庫的更改送出到遠端倉庫

git push

從其他分支比如說dev分支合并到目前所在的分支,如:git merge origin/dev (加入目前分支在master)把dev分支的内容合并到master分支下。

git merge

檢視送出資訊, 其中的參數-p 展開顯示每次送出的内容差異,-2僅顯示最近的兩次更新

git log

目前做的哪些更新沒add到倉庫,哪些更新已經add準備送出的

git diff

此指令比較的是工作目錄中目前檔案和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化内容。

如果要看已經添加起來的檔案和上次送出時的快照之間的差異,用git diff --cached或者git diff --staged。

git rm 

從倉庫中删除檔案,并且不不再納入版本管理。

移動檔案

git mv

git并不跟蹤檔案移動操作,對檔案的改名。用其他工具進行批處理改名的話,要在送出前删除老的我呢簡明,再添加新的檔案名。

取消已經暫存的檔案,取消工作目錄中已修改的檔案。可使用git status 檢視當中的提示

git reset HEAD <file>

檢視目前的遠端倉庫

git remote -v

添加遠端倉庫

git remote add remote-name URL

從遠端倉庫抓取資料

git fetch [remote-name]

推送本地資料到遠端倉庫

git push remote-name branch-name

檢視遠端倉庫資訊

git remote show [remote-name]

遠端倉庫的删除和重命名

git remote rename remote-name remote-name-2

git remote rm remote-name

顯示已有的标簽

git tag

建立标簽

輕量級的:就像是一個不會變化的分支,實際上它就是個指向特定送出對象的引用,儲存着對應送出對象的校驗和資訊的檔案。

含附注标簽:存儲在倉庫中的一個獨立對象,它有自身的校驗和資訊,包含着标簽的名字,電子郵件和日志,及标簽說明,标簽本身也允許使用GNU Privacy Guard(GPG)來簽署或驗證。

建立一個含附注的标簽

git tag -a v1.1 -m "my version 1.1"      -a 指定标簽名,-m指定了對應的标簽說明。

檢視标簽的版本新,并聯通顯示打标簽時的送出對象。

git show v1.1

 簽署标簽 使用-s選項,前提是要有自己的私鑰

git tag -s v1.2 -m "my signed version 1.2 tag"

輕量級标簽 啥選項都不用。

git tag v1.3

分享标簽 -- 預設情況,git push不會把标簽推到remote上,隻有通過顯式指令才能分享标簽到remote 

git push origin [tagname]

GIT BRANCH

建立一個分支,并建立檔案,送出到倉庫,合并新分支到master

git checkout -b hotfix

touch filename

git add filename

git commit -a -m "commit a filename"

git checkout master

git merge hotfix   把hotfix分支合并到master分支

該種合并方式稱為(Fast forward 快進)

遇到沖突時的分支合并

在不同的分支中都修改了同一個檔案的同一部分,就隻能有人來解決。可以使用

git status

來檢視

任何包含未解決沖突的檔案都會以未合并(unmerged)的狀态列出。Git 會在有沖突的檔案裡加入标準的沖突解決标記,可以通過它們來手工定位并解決這些沖突。

分支的管理

git branch

分支前的* 字元:它表示目前所在的分支

檢視各個分支最後一個送出對象的資訊

git branch -v

從該清單中篩選出你已經(或尚未)與目前分支合并的分支,可以用--merged 和--no-merged 選項

git branch --no-merged

檢視尚未合并的工作

本地分支和遠端倉庫分支的協同

首先從遠端克隆一個分支到本地,然後在本地有更改的時候需要向遠端送出的時候需要先在本地執行

git fetch origin      

先同步遠端資料到本地再送出到遠端

分支的衍合

一個分支中的修改整合到另一個分支中有兩種辦法:merge和rebase

本文轉自ting2junshui51CTO部落格,原文連結: http://blog.51cto.com/ting2junshui/1982292,如需轉載請自行聯系原作者