天天看點

git常用指令大全(附詳細解釋)

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,但是還沒到你的遠端倉庫。

git常用指令大全(附詳細解釋)

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>      
git常用指令大全(附詳細解釋)

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