其實一般情況下,隻需要掌握git的幾個常用指令即可,但是在使用的過程中難免會遇到各種複雜的需求,這時候經常需要搜尋,非常麻煩,故總結了一下自己平常會用到的git操作。
上圖所示,使用git的流程一般如此,通常使用圖中的六個指令即可。
配置
取得項目的 Git 倉庫
記錄每次更新到倉庫
遠端倉庫的使用
分支的使用
标簽的使用
日志
撤銷
選擇某些commits操作
解決沖突
Submodule
Subtree
其他
下面的指令将修改/home/[username]/.gitconfig檔案,也就是說下面的配置隻對每一個ssh的使用者可見,是以每個人都需要做。
修改送出者的資訊
修改git的message編輯器為vim
在git指令中開啟顔色顯示
區分檔案名大小寫
相容不同平台的換行符
For Windows:
For Mac:
同時在ADD之前使用以下指令不再收到關于換行符的提示:
如果使用HTTP clone遇到送出大小限制,請使用以下指令提高限值
此外,也可以使用以下指令做相應修改
下面的指令将修改/etc/gitconfig檔案,這是全局配置,是以admin來做一次就可以了。
配置一些git的常用指令alias
也可以進入工作根目錄,運作git config -e,這樣就隻會修改工作區的.git/config檔案,但是暫時還用不着.
git config檔案的override順序是3>1>2.
顯示配置清單
配置密鑰
有兩種取得 Git 項目倉庫的方法。第一種是在現存的目錄下,通過導入所有檔案來建立新的 Git 倉庫。第二種是從已有的 Git 倉庫克隆出一個新的鏡像倉庫來。
在工作目錄中初始化新倉庫
要對現有的某個項目開始用 Git 管理,隻需到此項目所在的目錄,執行:
從現有倉庫克隆
這會在目前目錄下建立一個名為“test”的目錄,其中包含一個 .git 的目錄,用于儲存下載下傳下來的所有版本記錄,然後從中取出最新版本的檔案拷貝。
檢查目前檔案狀态
跟蹤新檔案、暫存已修改檔案
使用指令git add [dirName] [fileName1] [fileName2](支援正則)開始跟蹤一個新檔案/檔案夾(包括子檔案夾)。實際上隻是add file into staged area,并沒有送出檔案。
此外:
忽略未納入版本管理的某些檔案/檔案夾
一般我們總會有些檔案無需納入 Git的管理,也不希望它們總出現在未跟蹤檔案清單。通常都是些自動生成的檔案,比如日志檔案,或者編譯過程中建立的臨時檔案等。我們可以建立一個名為 .gitignore的檔案,列出要忽略的檔案模式。
檔案.gitignore 的格式規範如下:
所有空行或者以注釋符号 # 開頭的行都會被 Git 忽略。
可以使用标準的 glob 模式比對。 * 比對模式最後跟反斜杠(/)說明要忽略的是目錄。 * 要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎号(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正規表達式。星号(*)比對零個或多個任意字元;[abc] 比對任何一個列在方括号中的字元(這個例子要麼比對一個 a,要麼比對一個 b,要麼比對一個 c);問号(?)隻比對一個任意字元;如果在方括号中使用短劃線分隔兩個字元,表示所有在這兩個字元範圍内的都可以比對(比如 [0-9] 表示比對所有 0 到 9 的數字)。
此外,忽略未納入版本管理的檔案或檔案夾的方式還有:
可以為自己配置一個全局的ignore檔案,位于任何版本庫之外:$ git config –global core.excludesfile ~/.gitignoreglobal
.git/info/exclude檔案裡設定你自己本地需要排除的檔案,不會影響到其他人,也不會送出到版本庫中去
忽略已經在版本庫裡的檔案/檔案夾
告訴git忽略對已經納入版本管理的檔案a的修改,git會一直忽略此檔案直到重新告訴git可以再次跟蹤此檔案:
告訴git恢複跟蹤a
檢視目前被忽略的、已經納入版本庫管理的檔案
檢視已暫存和未暫存的更新、送出之間的差異
git status 的顯示比較簡單,僅僅是列出了修改過的檔案,如果要檢視具體修改了什麼地方,可以用 git diff 指令。
git diff #檢視尚未暫存的檔案更新了哪些部分
git diff –cached [file] #看已經暫存起來的檔案和上次送出時的快照之間的差異
git diff [branch1] [branch2] #顯示兩次送出之間的差異
送出更新
每次準備送出前,先用git status看下,是不是都已暫存起來了,然後再運作送出指令git commit送出更新
git commit [file1] [file2] 送出會提示輸入本次送出說明
git commit -m [messag] 直接附帶送出說明
git commit –amend#修改最後一次送出
git commit -v 送出時顯示所有diff資訊
git commit –amend -m [message] 使用一次新的commit,替代上一次送出,如果代碼沒有任何新變化,則用來改寫上一次commit的送出資訊
git commit –amend [file1] [file2] … 重做上一次commit,并包括指定檔案的新變化
跳過使用暫存區域
git commit -a 跳過git add步驟直接commit
移除檔案 要從 Git 中移除某個檔案(包括暫存區域和工作目錄),就必須要從已跟蹤檔案清單中移除(确切地說,是從暫存區域移除),然後送出。 可以用 git rm 指令完成此項工作,并連帶從工作目錄中删除指定的檔案,這樣以後就不會出現在未跟蹤檔案清單中了。
最後送出的時候,該檔案就不再納入版本管理了。 如果删除之前修改過并且已經放到暫存區域的話,則必須要用強制删除選項 -f(即 force的首字母),以防誤删除檔案後丢失修改的内容。
另外一種情況是,我們想把檔案從 Git 倉庫中删除(亦即從暫存區域移除),但仍然希望保留在目前工作目錄中。換句話說,僅是從跟蹤清單中删除。比如一些編譯檔案,不小心納入倉庫後,要移除跟蹤但不删除檔案,以便稍後在 .gitignore 檔案中補上,用 –cached 選項即可:
後面可以列出檔案或者目錄的名字,也可以使用 glob 模式。比方說:
注意到星号 * 之前的反斜杠 \,因為 Git 有它自己的檔案模式擴充比對方式,是以我們不用 shell 來幫忙展開。實際上不加反斜杠也可以運作,隻不過按照shell擴充的話,僅僅删除指定目錄下的檔案而不會遞歸比對。上面的例子本來就指定了目錄,是以效果等同,但下面的例子就會用遞歸方式比對,是以必須加反斜杠。比如:
會遞歸删除目前目錄及其子目錄中所有 ~ 結尾的檔案。
移動檔案
要在 Git 中對檔案改名,可以運作如下指令
其實,運作 git mv 就相當于運作了下面三條指令:
復原檔案
遠端倉庫是指托管在網絡上的項目倉庫,可能會有好多個,其中有些你隻能讀,另外有些可以寫。
檢視目前的遠端庫
要檢視目前配置有哪些遠端倉庫,可以用 git remote 指令,它會列出每個遠端庫的簡短名字。在克隆完某個項目後,至少可以看到一個名為 origin 的遠端庫,也可以加上 -v 選項git remote -v,顯示對應的克隆位址。
添加遠端倉庫
要添加一個新的遠端倉庫,可以指定一個簡單的名字,以便将來引用,運作 git remote add [shortname] [url]
從遠端同步資訊
推送資料到遠端倉庫
項目進行到一個階段,要同别人分享目前的成果,可以将本地倉庫中的資料推送到遠端倉庫。實作這個任務的指令很簡單:
如果要把本地的 master 分支推送到 origin 伺服器上(再次說明下,克隆操作會自動使用預設的 master 和 origin 名字),可以運作下面的指令:
隻有在所克隆的伺服器上有寫權限,或者同一時刻沒有其他人在推資料,這條指令才會如期完成任務。如果在你推資料前,已經有其他人推送了若幹更新,那你的推送操作就會被駁回。你必須先把他們的更新merge到本地才能繼續。
此外,當你本地的版本落後于遠端倉庫,但是你想要用舊版本覆寫遠端版本的話,使用
推送所有分支到遠端倉庫:
檢視遠端倉庫資訊
我們可以通過指令 git remote show [remote-name]檢視某個遠端倉庫的詳細資訊,比如要看所克隆的 origin 倉庫,可以運作:
遠端倉庫的删除和重命名
在新版 Git 中可以用 git remote rename 指令修改某個遠端倉庫在本地的簡短名稱。使用git remote rm 指令删除遠端倉庫。
檢出遠端倉庫的某一分支
分支是在開發中經常使用的一個功能。
當你完成一個版本的開發,需要做釋出的時候,會需要給此次版本打一個表标簽:
有時候需要檢視版本的日志記錄,以确定、跟蹤代碼的變化等
在送出了錯誤的修改或者想撤銷檔案的變動時,需要以下指令:
git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作。例如,假設我們有個穩定版本的分支,叫v2.0,另外還有個開發版本的分支v3.0,我們不能直接把兩個分支合并,這樣會導緻穩定版本混亂,但是又想增加一個v3.0中的功能到v2.0中,這裡就可以使用cherry-pick了。
在rebase或者merge時,有時候會産生conflicts,如果無法auto merge,那麼一般有兩種處理方式:
手動修改沖突的檔案:修改完成後,使用git add,git commit或者git rebase –continue等後續操作即可。
使用任一方的檔案最為最新檔案
當你的工程的部分檔案是另一個git庫時,可以使用submodule(現在subtree已經替代了submodule)。
添加
為目前工程添加submodule,指令如下:
删除
submodule的删除稍微麻煩點:首先,要在“.gitmodules”檔案中删除相應配置資訊。然後,執行“git rm –cached ”指令将子子產品所在的檔案從git中删除。
下載下傳的工程帶有submodule
當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的内容并不會自動下載下傳下來的,此時,隻需執行如下指令:
第一次添加子目錄,建立與git項目的關聯
從遠端倉庫更新子目錄
從子目錄push到遠端倉庫(确認你有寫權限)
原文出處:後端技術雜談
<a href="http://www.rowkey.me/blog/2016/01/10/git-cheatsheet/" target="_blank">原文連結</a>
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。