天天看點

常用Git指令手冊

常用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 &lt;file&gt;​</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指令手冊

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

作者:IT大飛說