1、建立倉庫
使用目前目錄作為Git倉庫,我們隻需使它初始化。
git init
該指令執行完後會在目前目錄生成一個 .git 目錄。
使用我們指定目錄作為Git倉庫。
git init newrepo
初始化後,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的資料和資源都存放在這個目錄中。
如果目前目錄下有幾個檔案想要納入版本控制,需要先用 git add 指令告訴 Git 開始對這些檔案進行跟蹤,然後送出:
git add *.c
git add README
git commit -m '初始化項目版本'
以上指令将目錄下以 .c 結尾及 README 檔案送出到倉庫中。
2、檢出倉庫
我們使用 git clone 從現有 Git 倉庫中拷貝項目(類似 svn checkout)。
克隆倉庫的指令格式為:
git clone <repo>
如果我們需要克隆到指定的目錄,可以使用以下指令格式:
git clone <repo> <directory>
參數說明:
repo:Git 倉庫。
directory:本地目錄。
比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的指令:
git clone git://github.com/schacon/grit.git
執行該指令後,會在目前目錄下建立一個名為grit的目錄,其中包含一個 .git 的目錄,用于儲存下載下傳下來的所有版本記錄。
如果要自己定義要建立的項目目錄名稱,可以在上面的指令末尾指定新的名字:
git clone git://github.com/schacon/grit.git mygrit
執行如下指令以建立一個本地倉庫的克隆版本:
git clone /path/to/repository
如果是遠端伺服器上的倉庫,你的指令會是這個樣子:
git clone username@host:/path/to/repository
3、工作流
你的本地倉庫由 git 維護的三棵"樹"組成。第一個是你的 工作目錄,它持有實際檔案;第二個是 暫存區(Index),它像個緩存區域,臨時儲存你的改動;最後是 HEAD,它指向你最後一次送出的結果。
你可以提出更改(把它們添加到暫存區),使用如下指令:
git add <filename>
git add .
這是 git 基本工作流程的第一步;使用如下指令以實際送出改動:
git commit -m "代碼送出資訊"
現在,你的改動已經送出到了 HEAD,但是還沒到你的遠端倉庫。

4、推送改動
你的改動現在已經在本地倉庫的 HEAD 中了。執行如下指令以将這些改動送出到遠端倉庫:
git push origin master
可以把 master 換成你想要推送的任何分支。
如果你還沒有克隆現有倉庫,并欲将你的倉庫連接配接到某個遠端伺服器,你可以使用如下指令添加:
git remote add origin <server>
如此你就能夠将你的改動推送到所添加的伺服器上去了。
5、分支
分支是用來将特性開發絕緣開來的。在你建立倉庫的時候,master 是"預設的"分支。在其他分支上進行開發,完成後再将它們合并到主分支上。
列出分支基本指令:
git branch
沒有參數時,git branch 會列出你在本地的分支。
$ git branch
* master
此例的意思就是,我們有一個叫做 master 的分支,并且該分支是目前分支。
當你執行 git init 的時候,預設情況下 Git 就會為你建立 master 分支。
分支在本地完成,速度快。要建立一個新的分支,我們使用branch指令。
git branch test
branch指令不會将我們帶入分支,隻是建立一個新分支。是以我們使用checkout指令來更改分支。
git checkout test
建立一個叫做"test"的分支,并切換過去:
git checkout -b test
對其他分支的更改不會反映在主分支上。如果想将更改送出到主分支,則需切換回master分支,然後使用合并。
切換回主分支:
git checkout master
git merge test
如果您想删除分支,我們使用-d辨別。把建立的分支删掉:
git branch -d test
除非你将分支推送到遠端倉庫,不然該分支就是 不為他人所見的:
git push origin <branch>
6、更新與合并
要更新你的本地倉庫至最新改動,執行:
git pull
以在你的工作目錄中 擷取(fetch) 并 合并(merge) 遠端的改動。
要合并其他分支到你的目前分支(例如 master),執行:
git merge <branch>
在這兩種情況下,git 都會嘗試去自動合并改動。遺憾的是,這可能并非每次都成功,并可能出現沖突(conflicts)。 這時候就需要你修改這些檔案來手動合并這些沖突(conflicts)。改完之後,你需要執行如下指令以将它們标記為合并成功:
git add <filename>
在合并改動之前,你可以使用如下指令預覽差異:
git diff <source_branch> <target_branch>
7、标簽
為軟體釋出建立标簽是推薦的。這個概念早已存在,在 SVN 中也有。你可以執行如下指令建立一個叫做 1.0.0 的标簽:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标記的送出 ID 的前 10 位字元。可以使用下列指令擷取送出 ID:
git log
你也可以使用少一點的送出 ID 前幾位,隻要它的指向具有唯一性。
8、替換本地改動
假如你操作失誤(當然,這最好永遠不要發生),你可以使用如下指令替換掉本地改動:
git checkout -- <filename>
此指令會使用 HEAD 中的最新内容替換掉你的工作目錄中的檔案。已添加到暫存區的改動以及新檔案都不會受到影響。
假如你想丢棄你在本地的所有改動與送出,可以到伺服器上擷取最新的版本曆史,并将你本地主分支指向它:
git fetch origin
git reset --hard origin/master
9、Git 遠端倉庫(Github)
要添加一個新的遠端倉庫,可以指定一個簡單的名字,以便将來引用,指令格式如下:
git remote add [shortname] [url]
檢視目前的遠端庫。要檢視目前配置有哪些遠端倉庫,可以用指令:
git remote
執行個體
$ git remote
origin
$ git remote -v
origin [email protected]:tianqixin/runoob-git-test.git (fetch)
origin [email protected]:tianqixin/runoob-git-test.git (push)
執行時加上 -v 參數,你還可以看到每個别名的實際連結位址。
Git 有兩個指令用來提取遠端倉庫的更新。
1、從遠端倉庫下載下傳新分支與資料:
git fetch
該指令執行完後需要執行 git merge 遠端分支到你所在的分支。
2、從遠端倉庫提取資料并嘗試合并到目前分支:
git merge
該指令就是在執行 git fetch 之後緊接着執行 git merge 遠端分支到你所在的任意分支。
假設你配置好了一個遠端倉庫,并且你想要提取更新的資料,你可以首先執行 git fetch [alias] 告訴 Git 去擷取它有你沒有的資料,然後你可以執行 git merge [alias]/[branch] 以将伺服器上的任何更新(假設有人這時候推送到伺服器了)合并到你的目前分支。
推送你的新分支與資料到某個遠端倉庫指令:
git push [alias] [branch]
git push origin master
删除遠端倉庫你可以使用指令:
git remote rm [别名]
執行個體
$ git remote -v
origin [email protected]:tianqixin/runoob-git-test.git (fetch)
origin [email protected]:tianqixin/runoob-git-test.git (push)
# 添加倉庫 origin2
$ git remote add origin2 [email protected]:tianqixin/runoob-git-test.git
$ git remote -v
origin [email protected]:tianqixin/runoob-git-test.git (fetch)
origin [email protected]:tianqixin/runoob-git-test.git (push)
origin2 [email protected]:tianqixin/runoob-git-test.git (fetch)
origin2 [email protected]:tianqixin/runoob-git-test.git (push)
# 删除倉庫 origin2
$ git remote rm origin2
$ git remote -v
origin [email protected]:tianqixin/runoob-git-test.git (fetch)
origin [email protected]:tianqixin/runoob-git-test.git (push)
10、實用小貼士
内建的圖形化 git:
gitk
彩色的 git 輸出:
git config color.ui true
git config format.pretty oneline
git add -i