常用Git指令手冊
此文隻是對Git有一定基礎的人當記憶使用,比較簡略,初級學員強烈推薦廖雪峰老師的Git系列教程,通俗易懂1.安裝Git
Linux
提示:可反複多次使用,添加多個檔案;
然後會彈出一個Vim編輯器輸入本次送出的内容;
或者
或者加上參數檢視就比較清晰了
說明:在Git中,用HEAD表示目前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,以此類推,如果需要回退幾十個版本,寫幾十個^容易數不過來,是以可以寫,例如回退30個版本為:HEAD~30。
如果你回退完版本又後悔了,想回來,一般情況下是回不來的,但是如果你可以找到你之前的commit id的話,也是可以的,使用如下即可:
提示:commit id不需要寫全,Git會自動查找;
補充說明:Git中,commit id是一個使用SHA1計算出來的一個非常大的數字,用十六進制表示,你送出時看到的一大串類似3628164...882e1e0的就是commit id(版本号);
在Git中,版本回退速度非常快,因為Git在内部有個指向目前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向回退的版本,然後順便重新整理工作區檔案;
結果會将你之前的操作的commit id和具體的操作類型及相關的資訊列印出來,這個指令還有一個作用就是,當你過了幾天,你想回退之前的某次送出,但是你不知道commit id了,通過這個你可查找出commit id,就可以輕松回退了,用一句話總結:穿越未來,回到過去,so easy!
說明:檢視工作區和版本庫裡面最新版本檔案的差別,也可以不加HEAD參數;
說明:适用于工作區修改沒有add的檔案
說明:适用于暫存區已經add的檔案,注意執行完此指令,他會将暫存區的修改放回到工作區中,如果要想工作區的修改也丢棄,就執行第12條指令即可;
然後送出即可;
如果不小心删錯了,如果還沒有送出的話使用下面指令即可恢複删除,注意的是它隻能恢複最近版本送出的修改,你工作區的修改是不能被恢複的!
一般本地Git倉庫和遠端Git倉庫之間的傳輸是通過SSH加密的,是以我們可以将其生成的公鑰添加到Git服務端的設定中即可,這樣Git就可以知道是你送出的了;
删除本地庫與遠端庫的關聯:
作用:有時候我們需要關聯其他遠端庫,需要先删除舊的關聯,再添加新的關聯,因為如果你已經關聯過了就不能在關聯了,不過想關聯多個遠端庫也是可以的,前提是你的本地庫沒有關聯任何遠端庫,操作如下:
先關聯Github遠端庫:
接着關聯碼雲遠端庫:
現在,我們用<code>git remote -v</code>檢視遠端庫的關聯資訊,如果看到兩組關聯資訊就說明關聯成功了;
ok,現在我們的本地庫可以和多個遠端庫協作了
如果要推送到GitHub,使用指令:
如果要推送到碼雲,使用指令:
注意:第一次送出需要加一個參數-u,以後不需要
建立一個分支branch1
切換到branch1分支:
建立并切換到branch1分支:
檢視分支:
提示:顯示的結果中,其中有一個分支前有個*号,表示的是目前所在的分支;
合并branch1分支到master:
删除分支:
指令可以看到分支合并圖
禁用Fast forward模式合并分支
說明:預設Git合并分支時使用的是Fast forward模式,這種模式合并,删除分支後,會丢掉分支資訊,是以我們需要強制禁用此模式來合并;
補充内容:實際開發中分支管理的政策
master分支應該是非常穩定的,也就是僅用來釋出新版本,平時不能在上面送出;
我們可以新開一個dev分支,也就是說dev分支是不穩定的,到版本釋出時,再把dev分支合并到master上,在master分支釋出新版本;
你和你的協作者平時都在dev分支上送出,每個人都有自己的分支,時不時地往dev分支上合并就可以了;
作用:當你需要去修改其他内容時,這時候你的工作還沒有做完,先臨時儲存起來,等幹完其他事之後,再回來回複現場,再繼續幹活;為什麼?因為暫存區是公用的,如果不通過stash指令隐藏,會帶到其它分支去;
檢視已經儲存的工作現場清單:
恢複工作現場(恢複并從stash list删除):
或者:
恢複工作現場,但stash内容并不删除,如果你需要删除執行如下指令:
恢複指定的stash:
說明:其中stash@{0}為<code>git stash list</code>中的一種編号
強行删除即可:
作用:實際開發中,添加一個新feature,最好建立一個分支,如果要丢棄這個沒有被合并過的分支,可以通過上面的指令強行删除;
顯示更詳細的資訊:
推送master到遠端庫
推送branch1到遠端庫
說明:如果遠端庫中有分支,clone之後預設隻有master分支的,是以需要執行如上指令來建立本地分支才能與遠端的分支關聯起來;
作用:如果你本地建立的branch1分支,遠端庫中也有一個branch1分支(别人建立的),而剛好你也沒有送出過到這個分支,即沒有關聯過,會報一個<code>no tracking information</code>資訊,通過上面指令關聯即可;
例如:<code>git tag v1.0</code>
檢視所有标簽:
對曆史送出打tag
先使用<code>$ git log --pretty=oneline --abbrev-commit</code>指令找到曆史送出的commit id
例如對commit id 為123456的送出打一個tag:
檢視标簽資訊:
eg:<code>git show v1.0</code>
建立帶有說明的标簽,用-a指定标簽名,-m指定說明文字,123456為commit id:
用私鑰簽名一個标簽:
說明:簽名采用PGP簽名,是以,必須先要安裝gpg(GnuPG),如果沒有找到gpg,或者沒有gpg密鑰對,就會報錯,具體請參考GnuPG幫助文檔配置Key;
作用:用PGP簽名的标簽是不可僞造的,因為可以驗證PGP簽名;
删除标簽:
删除遠端庫中的标簽:
比如要删除遠端庫中的 V1.0 标簽,分兩步:
[1] 先删除本地标簽:<code>$ git tag -d V1.0</code>
[2] 再推送删除即可:<code>$ git push origin :refs/tags/V1.0</code>
推送标簽到遠端庫:
推送所有标簽到遠端庫:
Git顯示顔色,會讓指令輸出看起來更清晰、醒目:
設定指令别名:
說明:--global表示全局,即設定完之後全局生效,st表示别名,status表示原始名
好了,現在敲<code>git st</code>就相當于是<code>git status</code>指令了,是不是友善?
當然還有其他指令可以簡寫,這裡舉幾個:很多人都用co表示checkout,ci表示commit,br表示branch...
根據自己的喜好可以設定即可,個人覺得不是很推薦使用别名的方式;
推薦一個比較喪心病狂的别名設定:
效果自己去體會...
其他說明:配置的時候加上--global是針對目前使用者起作用的,如果不加隻對目前的倉庫起作用;每個倉庫的Git配置檔案都放在 .git/config 檔案中,我們可以打開對其中的配置作修改,可以删除設定的别名;而目前使用者的Git配置檔案放在使用者主目錄下的一個隐藏檔案.gitconfig中,我們也可以對其進行配置和修改。
原則:
忽略系統自動生成的檔案等;
忽略編譯生成的中間檔案、可執行檔案等,比如Java編譯産生的.class檔案,自動生成的檔案就沒必要送出;
忽略你自己的帶有敏感資訊的配置檔案,個人相關配置檔案;
忽略與自己相關開發環境相關的配置檔案;
...
使用:在Git工作區的根目錄下建立一個特殊的 .gitignore 檔案,然後把要忽略的檔案名或者相關規則填進去,Git就會自動忽略這些檔案,不知道怎麼寫的可參考:github.com/github/giti…,這裡提供了一些忽略的規則,可供參考;
如果你想添加一個被 .gitignore 忽略的檔案到Git中,但發現是添加不了的,是以我們可以使用強制添加<code>$ git add -f <file></code>
或者我們可以檢查及修改 .gitignore 檔案的忽略規則:
Git會告訴我們具體的 .gitignore 檔案中的第幾行規則忽略了該檔案,這樣我們就知道應該修改哪個規則了;
如何忽略已經送出到遠端庫中的檔案?
如果你已經将一些檔案送出到遠端庫中了,然後你想忽略掉此檔案,然後在 .gitignore 檔案中添加忽略,然而你會發現并沒有生效,因為Git添加忽略時隻有對沒有跟蹤的檔案才生效,也就是說你沒有add過和送出過的檔案才生效,按如下指令:
比如說:我們要忽略.idea目錄,先删除已經送出到本地庫的檔案目錄
格式:git rm --cached + 路徑
如果提示:fatal: not removing '.idea' recursively without -r
加個參數 -r 即可強制删除
然後,執行<code>git status</code>會提示你已經删除.idea目錄了,然後執行commit再push就可以了,此時的.idea目錄是沒有被跟蹤的,将.idea目錄添加到 .gitignore 檔案中就可以忽略了。
附圖:

好了,基本差不多了,其實常用的指令也就那麼幾個,如果使用多了,就熟練了,相信git給我們工作效率及工作上的提升...
作者:IT大飛說