git命令使用手冊

1.安裝Git

  • Window:到Git官網下載安裝:https://git-scm.com/downloads

2.配置全局用戶Name和E-mail

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"git

3.初始化倉庫

git initgithub

4.添加文件到Git倉庫

git add <file>app

提示:可反覆屢次使用,添加多個文件;ssh

5.提交添加的文件到Git倉庫

git commit編輯器

而後會彈出一個Vim編輯器輸入本次提交的內容;ide

或者ui

git commit -m "提交說明"加密

6.查看倉庫當前的狀態

git statusidea

7.比較當前文件的修改

$ git diff <file>spa

8.查看歷史提交記錄

git log

或者加上參數查看就比較清晰了

$ git log --pretty=oneline

9.回退版本

$ git reset --hard HEAD^

說明:在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,以此類推,若是須要回退幾十個版本,寫幾十個^容易數不過來,因此能夠寫,例如回退30個版本爲:HEAD~30。

若是你回退完版本又後悔了,想回來,通常狀況下是回不來的,可是若是你能夠找到你以前的commit id的話,也是能夠的,使用以下便可:

$ git reset --hard + commit id

提示:commit id不須要寫全,Git會自動查找;

補充說明:Git中,commit id是一個使用SHA1計算出來的一個很是大的數字,用十六進制表示,你提交時看到的一大串相似3628164...882e1e0的就是commit id(版本號);

Git中,版本回退速度很是快,由於Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向回退的版本,而後順便刷新工做區文件;

10.查看操做的歷史命令記錄

$ git reflog

結果會將你以前的操做的commit id和具體的操做類型及相關的信息打印出來,這個命令還有一個做用就是,當你過了幾天,你想回退以前的某次提交,可是你不知道commit id了,經過這個你可查找出commit id,就能夠輕鬆回退了,用一句話總結:穿越將來,回到過去,so easy!

11.diff文件

git diff HEAD -- <file>

說明:查看工做區和版本庫裏面最新版本文件的區別,也能夠不加HEAD參數;

12.丟棄工做區的修改

$ git checkout -- <file>

說明:適用於工做區修改沒有add的文件

13.丟棄暫存區的文件

$ git reset HEAD <file>

說明:適用於暫存區已經add的文件,注意執行完此命令,他會將暫存區的修改放回到工做區中,若是要想工做區的修改也丟棄,就執行第12條命令便可;

14.刪除文件

$ rm <file>

而後提交便可;

若是不當心刪錯了,若是尚未提交的話使用下面命令便可恢復刪除,注意的是它只能恢復最近版本提交的修改,你工做區的修改是不能被恢復的!

$ git checkout -- <file>

15.建立SSH key

$ ssh-keygen -t rsa -C "youremail@example.com"

通常本地Git倉庫和遠程Git倉庫之間的傳輸是經過SSH加密的,因此咱們能夠將其生成的公鑰添加到Git服務端的設置中便可,這樣Git就能夠知道是你提交的了;

16.與遠程倉庫協做

$ git remote add origin git@github.com:xinpengfei520/IM.git

刪除本地庫與遠程庫的關聯:

$ git remote rm origin

做用:有時候咱們須要關聯其餘遠程庫,須要先刪除舊的關聯,再添加新的關聯,由於若是你已經關聯過了就不能在關聯了,不過想關聯多個遠程庫也是能夠的,前提是你的本地庫沒有關聯任何遠程庫,操做以下:

先關聯Github遠程庫:

$ git remote add github git@github.com:xinpengfei520/IM.git

接着關聯碼雲遠程庫:

$ git remote add gitee git@gitee.com:xinpengfei521/IM.git

如今,咱們用git remote -v查看遠程庫的關聯信息,若是看到兩組關聯信息就說明關聯成功了;

ok,如今咱們的本地庫能夠和多個遠程庫協做了

若是要推送到GitHub,使用命令:

$ git push github master

若是要推送到碼雲,使用命令:

$ git push gitee master

17.推送到遠程倉庫

$ git push -u origin master

注意:第一次提交須要加一個參數-u,之後不須要

18.克隆一個遠程庫

$ git clone git@github.com:xinpengfei520/IM.git

19.Git分支管理

建立一個分支branch1

$ git branch branch1

切換到branch1分支:

$ git checkout branch1

建立並切換到branch1分支:

$ git checkout -b branch1

查看分支:

$ git branch

提示:顯示的結果中,其中有一個分支前有個*號,表示的是當前所在的分支;

合併branch1分支到master:

$ git merge branch1

刪除分支:

$ git branch -d branch1

20.查看提交的歷史記錄

$ git log

命令能夠看到分支合併圖

git log --graph

21.合併分支

禁用Fast forward模式合併分支

$ git merge --no-ff -m "merge" branch1

說明:默認Git合併分支時使用的是Fast forward模式,這種模式合併,刪除分支後,會丟掉分支信息,因此咱們須要強制禁用此模式來合併;

補充內容:實際開發中分支管理的策略

  • master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面提交;
  • 咱們能夠新開一個dev分支,也就是說dev分支是不穩定的,到版本發佈時,再把dev分支合併到master上,在master分支發佈新版本;
  • 你和你的協做者平時都在dev分支上提交,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了;

22.保存工做現場

$ git stash

做用:當你須要去修改其餘內容時,這時候你的工做尚未作完,先臨時保存起來,等幹完其餘事以後,再回來回覆現場,再繼續幹活;爲何?由於暫存區是公用的,若是不經過stash命令隱藏,會帶到其它分支去;

查看已經保存的工做現場列表:

$ git stash list

恢復工做現場(恢復並從stash list刪除):

$ git stash pop

或者:

git stash apply

恢復工做現場,但stash內容並不刪除,若是你須要刪除執行以下命令:

$ git stash drop

恢復指定的stash:

$ git stash apply stash@{0}

說明:其中stash@{0}爲git stash list中的一種編號

23.丟棄一個沒有被合併過的分支

強行刪除便可:

$ git branch -D <name>

做用:實際開發中,添加一個新feature,最好新建一個分支,若是要丟棄這個沒有被合併過的分支,能夠經過上面的命令強行刪除;

24.查看遠程庫的信息

$ git remote

顯示更詳細的信息:

$ git remote -v

25.推送分支

推送master到遠程庫

$ git push origin master

推送branch1到遠程庫

$ git push origin branch1

26.建立本地分支

$ git checkout -b branch1 origin/branch1

說明:若是遠程庫中有分支,clone以後默認只有master分支的,因此須要執行如上命令來建立本地分支才能與遠程的分支關聯起來;

27.指定本地branch1分支與遠程origin/branch1分支的連接

$ git branch --set-upstream branch1 origin/branch1

做用:若是你本地新建的branch1分支,遠程庫中也有一個branch1分支(別人建立的),而恰好你也沒有提交過到這個分支,即沒有關聯過,會報一個no tracking information信息,經過上面命令關聯便可;

28.建立標籤

$ git tag <name>

例如:git tag v1.0

查看全部標籤:

$ git tag

對歷史提交打tag

先使用$ git log --pretty=oneline --abbrev-commit命令找到歷史提交的commit id

例如對commit id 爲123456的提交打一個tag:

$ git tag v0.9 123456

查看標籤信息:

$ git show <tagname>

eg:git show v1.0

建立帶有說明的標籤,用-a指定標籤名,-m指定說明文字,123456爲commit id:

$ git tag -a v1.0 -m "V1.0 released" 123456

用私鑰簽名一個標籤:

$ git tag -s v2.0 -m "signed V2.0 released" 345678

說明:簽名採用PGP簽名,所以,必須先要安裝gpg(GnuPG),若是沒有找到gpg,或者沒有gpg密鑰對,就會報錯,具體請參考GnuPG幫助文檔配置Key;

做用:用PGP簽名的標籤是不可僞造的,由於能夠驗證PGP簽名;

刪除標籤:

$ git tag -d <tagname>

刪除遠程庫中的標籤:

好比要刪除遠程庫中的 V1.0 標籤,分兩步:

[1] 先刪除本地標籤:$ git tag -d V1.0

[2] 再推送刪除便可:$ git push origin :refs/tags/V1.0

推送標籤到遠程庫:

$ git push origin <tagname>

推送全部標籤到遠程庫:

$ git push origin --tags

29.自定義Git設置

Git顯示顏色,會讓命令輸出看起來更清晰、醒目:

$ git config --global color.ui true

設置命令別名:

$ git config --global alias.st status

說明:--global表示全局,即設置完以後全局生效,st表示別名,status表示原始名

好了,如今敲git st就至關因而git status命令了,是否是方便?

固然還有其餘命令能夠簡寫,這裏舉幾個:不少人都用co表示checkout,ci表示commit,br表示branch...
根據本身的喜愛能夠設置便可,我的以爲不是很推薦使用別名的方式;

推薦一個比較喪心病狂的別名設置:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

效果本身去體會...

其餘說明:配置的時候加上--global是針對當前用戶起做用的,若是不加只對當前的倉庫起做用;每一個倉庫的Git配置文件都放在 .git/config 文件中,咱們能夠打開對其中的配置做修改,能夠刪除設置的別名;而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中,咱們也能夠對其進行配置和修改。

30.忽略文件規則

原則:

  • 忽略系統自動生成的文件等;
  • 忽略編譯生成的中間文件、可執行文件等,好比Java編譯產生的.class文件,自動生成的文件就不必提交;
  • 忽略你本身的帶有敏感信息的配置文件,我的相關配置文件;
  • 忽略與本身相關開發環境相關的配置文件;
  • ...

使用:在Git工做區的根目錄下建立一個特殊的 .gitignore 文件,而後把要忽略的文件名或者相關規則填進去,Git就會自動忽略這些文件,不知道怎麼寫的可參考:https://github.com/github/gitignore,這裏提供了一些忽略的規則,可供參考;

若是你想添加一個被 .gitignore 忽略的文件到Git中,但發現是添加不了的,因此咱們可使用強制添加$ git add -f <file>

或者咱們能夠檢查及修改 .gitignore 文件的忽略規則:

$ git check-ignore -v <file>

Git會告訴咱們具體的 .gitignore 文件中的第幾行規則忽略了該文件,這樣咱們就知道應該修改哪一個規則了;

如何忽略已經提交到遠程庫中的文件?
若是你已經將一些文件提交到遠程庫中了,而後你想忽略掉此文件,而後在 .gitignore 文件中添加忽略,然而你會發現並無生效,由於Git添加忽略時只有對沒有跟蹤的文件才生效,也就是說你沒有add過和提交過的文件才生效,按以下命令:

好比說:咱們要忽略.idea目錄,先刪除已經提交到本地庫的文件目錄

git rm --cached .idea

格式:git rm --cached + 路徑

若是提示:fatal: not removing '.idea' recursively without -r

加個參數 -r 便可強制刪除

$ git rm -r --cached .idea

而後,執行git status會提示你已經刪除.idea目錄了,而後執行commit再push就能夠了,此時的.idea目錄是沒有被跟蹤的,將.idea目錄添加到 .gitignore 文件中就能夠忽略了。

附圖:

相關文章
相關標籤/搜索