http://blog.csdn.net/magicharvey/article/details/12431867?utm_source=tuicool
本文暫時不會涉及到團隊如何使用Git的內容,而是從我的的角度探討如何用好Git。 git
綠色的5位字符表示提交的ID,文中用<commit>表示,分別指向父節點。分支用橘色顯示,分別指向特定的提交。當前分支由附在其上的標識。 這張圖片裏顯示最後5次提交,是最新提交。分支指向這次提交,另外一個分支指向祖父提交節點。 緩存
git cat-file -t <commit>,查看Git對象的類型,主要的git對象包括tree,commit,parent,和blob等。 服務器
git cat-file -p <commit>,查看Git對象的內容 ui
git log主要用來顯示分支中提交更改的記錄。當執行git commit以存儲一個快照的時候,文件詳單、提交消息和提交者的信息、這次提交所基於的快照都會被保存。 url
git log --oneline,能夠顯示更加短小的提交ID. .net
git log --graph,顯示什麼時候出現了分支和合並等信息. 命令行
git log --pretty=raw,顯示提交對象的parent屬性. 指針
git config -e orm
git config -e --global 對象
git config -e --system
Git的三個配置文件分別是版本庫級別的配置文件(/.git/config)、全局配置文件(用戶主目錄下)和系統級配置文件(/etc目錄下)。這個命令的做用是打開相應的配置文件,而且進行編輯。其中版本庫級別的配置文件的優先級最高,全局配置文件次之,系統級別配置文件最低。Git配置文件採用的是INI文件格式。
git config <section>.<key>,讀取和更改INI配置文件的內容。
git config <section>.<key> <value>,修改INI配置文件中某個配置的鍵值
在全局空間中添加新的用戶
git config --global user.name "harvey liu"
git config --global user.email harvey_liu@163.com
設置git命令的別名
git config --global alias.ci commit
git config --global alias.co checkout
刪除git全局配置文件中的用戶名
git config --unset --global user.name
git config --unset --global user.email
git grep能夠用來搜索工做區中的文件內容
要查找git倉庫裏某個特定版本里的內容, 咱們能夠像下面同樣在命令行末尾加上標籤名(tag reference),git grep '文字內容' v1.0
git diff,顯示工做區和暫存區的差別
git diff HEAD,顯示工做區和HEAD之間的差別
git diff --cached,顯示暫存區和HEAD之間的差別
git diff id1 id2,顯示兩次提交之間的差別
git status,查看你的代碼在緩存與當前工做目錄的狀態
git status -s,將結果以簡短的形式輸出
git add,在提交你修改的文件以前,你須要把它們添加到暫存區。若是該文件是新建立的,你能夠執行將該文件添加到暫存區
git add . ,Git會遞歸地將你執行命令時所在的目錄中的全部文件添加上去,因此若是你將當前的工做目錄做爲參數,它就會追蹤那兒的全部文件
git add -u,使用-u參數調用了git add命令,會將本地有改動(包括刪除和修改)的已經追蹤的文件標記到暫存區中。
git add -A,使用-A參數會將添加全部改動的已跟蹤文件和未跟蹤文件。
git add -i,交互式的方式進行添加。
git commit --amend,修補式提交。
git commit --a,對本地全部變動的文件執行提交操做,包括對本地修改的文件和刪除的文件,可是不包括未被版本庫跟蹤的文件。可是這個命令最好不要使用,這樣會丟掉Git暫存區帶給用戶的最大好處:對提交內容進行控制的能力
git commit --allow-empty,容許執行空白提交
把當前分支指向另外一個位置,而且有選擇的變更工做目錄和索引
git reset --hard <commit>,其中commit是可選項,可使用引用或者提交ID,若是省略則至關於使用了HEAD的指向做爲提交ID,完成的操做包括替換引用的指向,替換暫存區,替換工做區
git reset --soft <commit>,其中commit是可選項,可使用引用或者提交ID,若是省略則至關於使用了HEAD的指向做爲提交ID。完成的操做主要是更改引用的指向,不改變暫存區和工做區
git reset,等同於git reset HEAD,用HEAD指向的目錄樹重置暫存區
git reset -- filename,將文件filename的改動撤出暫存區,暫存區其餘文件不變
git reset HEAD --filename 等同於git reset -- filename
git branch,顯示當前所在的分支
git branch <branchname>,建立新的分支branchname
git branch <branchname> <start-point>,基於提交<start-point>建立新分支,新分支的分支名爲<branchname>
git branch -d <branchname> ,刪除名稱爲branchname的分支,刪除時會檢查全部的刪除分支是否已經合併到其餘分支,不然拒絕刪除
git branch -D <branchname>,強制刪除分支<branchname>
git branch -m <oldbranch> <newbranch>,重命名分支
git checkout branchname,會改變HEAD頭指針,主要用於切換分支
git checkout -b branchname,用於建立一個新的分支,而且切換到建立的新的分支上
git checkout --filename,用暫存區中的filename文件來覆蓋工做區中的filename文件
git checkout <commit> --filename,用指定提交中的文件覆蓋暫存區和工做區中對應的文件
git checkout -- .或者git checkout .,用暫存區的全部文件直接覆蓋本地文件,取消全部的本地的修改,是一條危險的操做
刪除本地多餘的目錄和文件
git clean -nd,顯示要刪除的內容,可是是預刪除
git clean -fd,強制刪除多餘的文件和目錄
rm命令刪除的文件只是在本地進行了刪除,還沒有添加到暫存區,也就是說,直接在工做區刪除,對暫存區和版本庫沒有任何影響。
git rm命令會將刪除動做加入暫存區,這是執行提交動做,就從真正意義上執行了文件刪除。
git mv,移動文件,git中以git rm和git add兩條命令取而代之。
git archive,對任意提交對應的目錄樹創建歸檔。
git archive -o latest.zip HEAD,基於最新提交創建歸檔文件latest.zip
git archive -o partial.tar HEAD src doc,只將目錄src和doc創建到歸檔文件partial.tar中
git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz,基於里程碑v1.0創建歸檔,而且爲歸檔中的文件添加目錄前綴1.0
git clone <repository> <directory>,將repository指向的版本庫建立一個克隆到directory目錄中。目錄directory至關於克隆版本庫的工做區,文件都會檢出,版本庫位於工做區下得.git目錄中。
git clone --bare <repository> <directory.git>
git clone --mirror <repository> <directory.git>
上面的兩種克隆版本都不包含工做區,直接就是版本庫的內容,這樣的版本庫稱爲裸版本庫。
git push <remote> [branch],就會將你的 [branch] 分支推送成爲 [alias] 遠端上的 [branch] 分支,要推送的遠程版本號的URL地址由remote.<remote>.pushurl給出,若是沒有配置,則使用remote.<remote>.url配置的URL地址。
git pull,從遠端的服務器上下載數據,從而實現同步更新。要獲取的遠程版本庫的URL地址由remote.<remote>.url提供。