常用Git命令手册
常用Git命令手冊
此文只是對Git有一定基礎(chǔ)的人當(dāng)記憶使用,比較簡略,初級學(xué)員強(qiáng)烈推薦廖雪峰老師的Git系列教程,通俗易懂,戳此處即可開始學(xué)習(xí)
1.安裝Git
- Linux
- Window:到Git官網(wǎng)下載安裝:https://git-scm.com/downloads
2.配置全局用戶Name和E-mail
$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
3.初始化倉庫
git init4.添加文件到Git倉庫
git add <file>提示:可反復(fù)多次使用,添加多個文件;
5.提交添加的文件到Git倉庫
git commit然后會彈出一個Vim編輯器輸入本次提交的內(nèi)容;
或者
git commit -m "提交說明"6.查看倉庫當(dāng)前的狀態(tài)
git status7.比較當(dāng)前文件的修改
$ git diff <file>8.查看歷史提交記錄
git log或者加上參數(shù)查看就比較清晰了
git log --pretty=oneline9.回退版本
$ git reset --hard HEAD^說明:在Git中,用HEAD表示當(dāng)前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,以此類推,如果需要回退幾十個版本,寫幾十個^容易數(shù)不過來,所以可以寫,例如回退30個版本為:HEAD~30。
如果你回退完版本又后悔了,想回來,一般情況下是回不來的,但是如果你可以找到你之前的commit id的話,也是可以的,使用如下即可:
$ git reset --hard + commit id提示:commit id不需要寫全,Git會自動查找;
補充說明:Git中,commit id是一個使用SHA1計算出來的一個非常大的數(shù)字,用十六進(jìn)制表示,你提交時看到的一大串類似3628164...882e1e0的就是commit id(版本號);
在Git中,版本回退速度非常快,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時候,Git僅僅是把HEAD從指向回退的版本,然后順便刷新工作區(qū)文件;
10.查看操作的歷史命令記錄
$ git reflog結(jié)果會將你之前的操作的commit id和具體的操作類型及相關(guān)的信息打印出來,這個命令還有一個作用就是,當(dāng)你過了幾天,你想回退之前的某次提交,但是你不知道commit id了,通過這個你可查找出commit id,就可以輕松回退了,用一句話總結(jié):穿越未來,回到過去,so easy!
11.diff文件
git diff HEAD -- <file>說明:查看工作區(qū)和版本庫里面最新版本文件的區(qū)別,也可以不加HEAD參數(shù);
12.丟棄工作區(qū)的修改
$ git checkout -- <file>說明:適用于工作區(qū)修改沒有add的文件
13.丟棄暫存區(qū)的文件
$ git reset HEAD <file>說明:適用于暫存區(qū)已經(jīng)add的文件,注意執(zhí)行完此命令,他會將暫存區(qū)的修改放回到工作區(qū)中,如果要想工作區(qū)的修改也丟棄,就執(zhí)行第12條命令即可;
14.刪除文件
$ rm <file>然后提交即可;
如果不小心刪錯了,如果還沒有提交的話使用下面命令即可恢復(fù)刪除,注意的是它只能恢復(fù)最近版本提交的修改,你工作區(qū)的修改是不能被恢復(fù)的!
$ git checkout -- <file>15.創(chuàng)建SSH key
$ ssh-keygen -t rsa -C "youremail@example.com"一般本地Git倉庫和遠(yuǎn)程Git倉庫之間的傳輸是通過SSH加密的,所以我們可以將其生成的公鑰添加到Git服務(wù)端的設(shè)置中即可,這樣Git就可以知道是你提交的了;
16.與遠(yuǎn)程倉庫協(xié)作
$ git remote add origin git@github.com:xinpengfei520/IM.git刪除本地庫與遠(yuǎn)程庫的關(guān)聯(lián):
$ git remote rm origin作用:有時候我們需要關(guān)聯(lián)其他遠(yuǎn)程庫,需要先刪除舊的關(guān)聯(lián),再添加新的關(guān)聯(lián),因為如果你已經(jīng)關(guān)聯(lián)過了就不能在關(guān)聯(lián)了,不過想關(guān)聯(lián)多個遠(yuǎn)程庫也是可以的,前提是你的本地庫沒有關(guān)聯(lián)任何遠(yuǎn)程庫,操作如下:
先關(guān)聯(lián)Github遠(yuǎn)程庫:
$ git remote add github git@github.com:xinpengfei520/IM.git接著關(guān)聯(lián)碼云遠(yuǎn)程庫:
$ git remote add gitee git@gitee.com:xinpengfei521/IM.git現(xiàn)在,我們用git remote -v查看遠(yuǎn)程庫的關(guān)聯(lián)信息,如果看到兩組關(guān)聯(lián)信息就說明關(guān)聯(lián)成功了;
ok,現(xiàn)在我們的本地庫可以和多個遠(yuǎn)程庫協(xié)作了
如果要推送到GitHub,使用命令:
$ git push github master如果要推送到碼云,使用命令:
$ git push gitee master17.推送到遠(yuǎn)程倉庫
$ git push -u origin master注意:第一次提交需要加一個參數(shù)-u,以后不需要
18.克隆一個遠(yuǎn)程庫
$ git clone git@github.com:xinpengfei520/IM.git19.Git分支管理
創(chuàng)建一個分支branch1
$ git branch branch1切換到branch1分支:
$ git checkout branch1創(chuàng)建并切換到branch1分支:
$ git checkout -b branch1查看分支:
$ git branch提示:顯示的結(jié)果中,其中有一個分支前有個*號,表示的是當(dāng)前所在的分支;
合并branch1分支到master:
$ git merge branch1刪除分支:
$ git branch -d branch120.查看提交的歷史記錄
git log命令可以看到分支合并圖
git log --graph21.合并分支
禁用Fast forward模式合并分支
$ git merge --no-ff -m "merge" branch1說明:默認(rèn)Git合并分支時使用的是Fast forward模式,這種模式合并,刪除分支后,會丟掉分支信息,所以我們需要強(qiáng)制禁用此模式來合并;
補充內(nèi)容:實際開發(fā)中分支管理的策略
- master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時不能在上面提交;
- 我們可以新開一個dev分支,也就是說dev分支是不穩(wěn)定的,到版本發(fā)布時,再把dev分支合并到master上,在master分支發(fā)布新版本;
- 你和你的協(xié)作者平時都在dev分支上提交,每個人都有自己的分支,時不時地往dev分支上合并就可以了;
22.保存工作現(xiàn)場
$ git stash作用:當(dāng)你需要去修改其他內(nèi)容時,這時候你的工作還沒有做完,先臨時保存起來,等干完其他事之后,再回來回復(fù)現(xiàn)場,再繼續(xù)干活;為什么?因為暫存區(qū)是公用的,如果不通過stash命令隱藏,會帶到其它分支去;
查看已經(jīng)保存的工作現(xiàn)場列表:
$ git stash list恢復(fù)工作現(xiàn)場(恢復(fù)并從stash list刪除):
$ git stash pop或者:
git stash apply恢復(fù)工作現(xiàn)場,但stash內(nèi)容并不刪除,如果你需要刪除執(zhí)行如下命令:
$ git stash drop恢復(fù)指定的stash:
$ git stash apply stash@{0}說明:其中stash@{0}為git stash list中的一種編號
23.丟棄一個沒有被合并過的分支
強(qiáng)行刪除即可:
$ git branch -D <name>作用:實際開發(fā)中,添加一個新feature,最好新建一個分支,如果要丟棄這個沒有被合并過的分支,可以通過上面的命令強(qiáng)行刪除;
24.查看遠(yuǎn)程庫的信息
$ git remote顯示更詳細(xì)的信息:
$ git remote -v25.推送分支
推送master到遠(yuǎn)程庫
$ git push origin master推送branch1到遠(yuǎn)程庫
$ git push origin branch126.創(chuàng)建本地分支
$ git checkout -b branch1 origin/branch1說明:如果遠(yuǎn)程庫中有分支,clone之后默認(rèn)只有master分支的,所以需要執(zhí)行如上命令來創(chuàng)建本地分支才能與遠(yuǎn)程的分支關(guān)聯(lián)起來;
27.指定本地branch1分支與遠(yuǎn)程origin/branch1分支的鏈接
git branch --set-upstream branch1 origin/branch1作用:如果你本地新建的branch1分支,遠(yuǎn)程庫中也有一個branch1分支(別人創(chuàng)建的),而剛好你也沒有提交過到這個分支,即沒有關(guān)聯(lián)過,會報一個no tracking information信息,通過上面命令關(guān)聯(lián)即可;
28.創(chuàng)建標(biāo)簽
$ git tag <name>例如:git tag v1.0
查看所有標(biāo)簽:
$ git tag對歷史提交打tag
先使用$ git log --pretty=oneline --abbrev-commit命令找到歷史提交的commit id
例如對commit id 為123456的提交打一個tag:
$ git tag v0.9 123456查看標(biāo)簽信息:
$ git show <tagname>eg:git show v1.0
創(chuàng)建帶有說明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說明文字,123456為commit id:
$ git tag -a v1.0 -m "V1.0 released" 123456用私鑰簽名一個標(biāo)簽:
$ git tag -s v2.0 -m "signed V2.0 released" 345678說明:簽名采用PGP簽名,因此,必須先要安裝gpg(GnuPG),如果沒有找到gpg,或者沒有g(shù)pg密鑰對,就會報錯,具體請參考GnuPG幫助文檔配置Key;
作用:用PGP簽名的標(biāo)簽是不可偽造的,因為可以驗證PGP簽名;
刪除標(biāo)簽:
$ git tag -d <tagname>刪除遠(yuǎn)程庫中的標(biāo)簽:
比如要刪除遠(yuǎn)程庫中的?V1.0?標(biāo)簽,分兩步:
[1] 先刪除本地標(biāo)簽:$ git tag -d V1.0
[2] 再推送刪除即可:$ git push origin :refs/tags/V1.0
推送標(biāo)簽到遠(yuǎn)程庫:
$ git push origin <tagname>推送所有標(biāo)簽到遠(yuǎn)程庫:
$ git push origin --tags29.自定義Git設(shè)置
Git顯示顏色,會讓命令輸出看起來更清晰、醒目:
$ git config --global color.ui true設(shè)置命令別名:
$ git config --global alias.st status說明:--global表示全局,即設(shè)置完之后全局生效,st表示別名,status表示原始名
好了,現(xiàn)在敲git st就相當(dāng)于是git status命令了,是不是方便?
當(dāng)然還有其他命令可以簡寫,這里舉幾個:很多人都用co表示checkout,ci表示commit,br表示branch...
根據(jù)自己的喜好可以設(shè)置即可,個人覺得不是很推薦使用別名的方式;
推薦一個比較喪心病狂的別名設(shè)置:
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是針對當(dāng)前用戶起作用的,如果不加只對當(dāng)前的倉庫起作用;每個倉庫的Git配置文件都放在?.git/config?文件中,我們可以打開對其中的配置作修改,可以刪除設(shè)置的別名;而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中,我們也可以對其進(jìn)行配置和修改。
30.忽略文件規(guī)則
原則:
- 忽略系統(tǒng)自動生成的文件等;
- 忽略編譯生成的中間文件、可執(zhí)行文件等,比如Java編譯產(chǎn)生的.class文件,自動生成的文件就沒必要提交;
- 忽略你自己的帶有敏感信息的配置文件,個人相關(guān)配置文件;
- 忽略與自己相關(guān)開發(fā)環(huán)境相關(guān)的配置文件;
- ...
使用:在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的?.gitignore?文件,然后把要忽略的文件名或者相關(guān)規(guī)則填進(jìn)去,Git就會自動忽略這些文件,不知道怎么寫的可參考:https://github.com/github/gitignore,這里提供了一些忽略的規(guī)則,可供參考;
如果你想添加一個被?.gitignore?忽略的文件到Git中,但發(fā)現(xiàn)是添加不了的,所以我們可以使用強(qiáng)制添加$ git add -f <file>
或者我們可以檢查及修改?.gitignore?文件的忽略規(guī)則:
$ git check-ignore -v <file>Git會告訴我們具體的?.gitignore?文件中的第幾行規(guī)則忽略了該文件,這樣我們就知道應(yīng)該修改哪個規(guī)則了;
如何忽略已經(jīng)提交到遠(yuǎn)程庫中的文件?
如果你已經(jīng)將一些文件提交到遠(yuǎn)程庫中了,然后你想忽略掉此文件,然后在?.gitignore?文件中添加忽略,然而你會發(fā)現(xiàn)并沒有生效,因為Git添加忽略時只有對沒有跟蹤的文件才生效,也就是說你沒有add過和提交過的文件才生效,按如下命令:
比如說:我們要忽略.idea目錄,先刪除已經(jīng)提交到本地庫的文件目錄
git rm --cached .idea格式:git rm --cached + 路徑
如果提示:fatal: not removing '.idea' recursively without -r
加個參數(shù) -r 即可強(qiáng)制刪除
$ git rm -r --cached .idea然后,執(zhí)行g(shù)it status會提示你已經(jīng)刪除.idea目錄了,然后執(zhí)行commit再push就可以了,此時的.idea目錄是沒有被跟蹤的,將.idea目錄添加到?.gitignore?文件中就可以忽略了。
附圖:
好了,基本差不多了,其實常用的命令也就那么幾個,如果使用多了,就熟練了,相信git給我們工作效率及工作上的提升...
總結(jié)
- 上一篇: 全球及中国浴用纺织品行业商业模式分析及投
- 下一篇: 设置mathtype章节号显示与隐藏