git使用---安裝赁还,提交,回退驹沿,修改艘策,分支,標(biāo)簽等

下面是對git的各種使用及命令的基礎(chǔ)使用渊季,來自廖雪峰老師的git教程朋蔫,這個(gè)收錄下,作為git的使用總結(jié)却汉。

github上面地址為:https://github.com/Zhangguoliu/learn-git/blob/master/learngit-note.md

++++++++++++++++++++++++++++++++++++++++++++++++++

Git學(xué)習(xí)筆記

目錄

Git簡介

安裝Git

創(chuàng)建版本庫||使用vi編輯器||把文件添加到版本庫||查看工作區(qū)當(dāng)前狀態(tài)

時(shí)光穿梭-版本回退與重返未來

工作區(qū)與暫存區(qū)-管理修改比較不同

撤銷修改||刪除文件

遠(yuǎn)程倉庫

分支管理||Bug分支||Feature分支

多人協(xié)作

標(biāo)簽管理||操作標(biāo)簽

使用GitHub和碼云

自定義Git

Git簡介

Git是分布式版本控制系統(tǒng)

集中式VS分布式:

集中式版本控制系統(tǒng)驯妄,版本庫集中存放在中央服務(wù)器,必須要聯(lián)網(wǎng)才能工作,沒有歷史版本庫合砂。

分布式版本控制系統(tǒng)青扔,沒有“中央服務(wù)器”,每個(gè)開發(fā)人員電腦上都有一個(gè)完整的版本庫翩伪。

分布式優(yōu)勢:安全性更高微猖,無需聯(lián)網(wǎng),若“中央服務(wù)器”故障幻工,任何一個(gè)其他開發(fā)者本地都有最新的帶歷史記錄的版本庫励两。

主要區(qū)別在于歷史版本庫的存放,集中式歷史版本只存在于中央服務(wù)器囊颅,而分布式中每個(gè)本地庫都有歷史記錄存放当悔。

安裝Git

Linux系統(tǒng)

Debian或Ubuntu Linux

sudo apt-get install git

老版本Debian或Ubuntu Linux

sudo apt-get install git-core

其他版本Linux,官網(wǎng)下載源碼解壓踢代,然后依次輸入

./config ——> make ——> sudo make install

Windows系統(tǒng)

官網(wǎng)下載盲憎,安裝完成后,“Git”->“Git Bash”即可打開

Git配置

$ git config --global user.name "Your Name"

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

注意--global參數(shù)表示你這臺機(jī)器上所有的Git倉庫都會使用這個(gè)配置胳挎。

Git命令

創(chuàng)建版本庫

選擇一個(gè)合適目錄

Windows系統(tǒng)請確保目錄名(包括父目錄)不包含中文

如$ cd ?d:

$ mkdir <repository-name>饼疙,創(chuàng)建庫名

$ cd <repository-name>,進(jìn)入庫內(nèi)

補(bǔ)充pwd顯示路徑慕爬,ls顯示當(dāng)前目錄窑眯,ls -ah顯示隱藏目錄

在當(dāng)前目錄初始化庫

$ git init

使用vi編輯器

$ vi <file-name>屏积,新建或修改文件

按i進(jìn)入編輯

編輯完成后按ESC,然后選擇以下某個(gè)命令輸入

命令效果

:w保存文件磅甩,不退出vi

:w <file-name>另存為file,不退出

:w!強(qiáng)制保存炊林,不退出

:wq保存文件,退出

:wq!強(qiáng)制保存卷要,退出

:q不保存渣聚,退出

:q!不保存,強(qiáng)制退出

:e!放棄所有修改僧叉,回到上次保存文件開始編輯

查看文件內(nèi)容

cat <file-name>

把文件添加到版本庫

$ git add <file-name>

$ git commit -m "description"

注意可以多次git add 奕枝,最后一次git commit

查看工作區(qū)當(dāng)前狀態(tài)

$ git status

時(shí)光穿梭(回退)

$ git reset --hard commit-id

確定版本回退commit-id

通過查看提交歷史

$ git log

按q退出查看

簡化顯示提交歷史

$ git log --pretty=oneline

HEAD,當(dāng)前版本

HEAD^瓶堕,上個(gè)版本

HEAD^^隘道,上上個(gè)版本

HEAD~100,往上100個(gè)版本

確定重返未來commit-id

通過查看命令歷史

$ git reflog

工作區(qū)與暫存區(qū)

工作區(qū)就是電腦中能看到的目錄捞烟,工作區(qū)有一個(gè)隱藏目錄.git薄声,這是Git的版本庫

管理修改

修改但未add

比較工作區(qū)與暫存區(qū)(即上次git add的內(nèi)容)的不同

比較所有修改文件的不同

$ git diff

比較指定修改文件的不同

$ git diff <file-name>

修改已a(bǔ)dd但未commit

比較暫存區(qū)與倉庫分支(上次git commit)的不同

$ git diff --staged

$ git diff --cached

撤銷修改

場景1——工作區(qū)已修改但未add到暫存區(qū)

$ git checkout -- <file-name>

其實(shí)就是用版本庫里的版本替換工作區(qū)的版本

場景2——工作區(qū)修改且已經(jīng)git add到暫存區(qū),分兩步

$ git reset HEAD <file-name>

回到場景1题画,再按場景1操作

場景3:已經(jīng)commit但沒有推送到遠(yuǎn)程庫——版本回退

刪除文件

假設(shè)文件原已commit默辨,目前情況是——已經(jīng)在目錄下手動(dòng)或$ rm <file-name>刪除文件

選擇一:確實(shí)要從版本庫中刪除該文件,分兩步

第一步

$ git rm <file-name>

git add <file-name>

第二步

$ git commit -m "description"

選擇二:刪錯(cuò)了苍息,要恢復(fù)

$ git checkout -- <file-name>

其實(shí)就是用版本庫里的版本替換工作區(qū)的版本

遠(yuǎn)程倉庫

創(chuàng)建SSH Key

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

補(bǔ)充在用戶主目錄下(cd)

$ ls -ah可見.ssh目錄

$ cd .ssh可見id_rsa(私鑰不能泄露)和id_rsa.pub(公鑰可公開)

關(guān)聯(lián)遠(yuǎn)程倉庫

$ git remote add origin git@github.com:username/repositoryname.git

$ git remote add origin https://github.com/username/repositoryname.git

遠(yuǎn)程庫默認(rèn)名字為origin

刪除已經(jīng)關(guān)聯(lián)的遠(yuǎn)程庫

git remote rm remote-name

若遠(yuǎn)程庫默認(rèn)名字為origin缩幸,則

git remote rm origin

推送到遠(yuǎn)程倉庫

第一次推送到GitHub

$ git push -u origin master

推送master分支

后續(xù)推送

$ git push origin master

不再使用參數(shù)-u

從遠(yuǎn)程庫克隆

$ git clone git@github.com:username/repositoryname.git

$ git clone https://github.com/username/repositoryname.git

分支管理

查看分支

$ git branch

創(chuàng)建分支

$ git branch <branch-name>

切換分支

$ git checkout <branch-name>

創(chuàng)建+切換分支

$ git checkout -b <branch-name>

合并某分支到當(dāng)前分支

$ git merge <branch-name>

普通模式合并分支

$ git merge --no-ff -m "description" <branch-name>

通常進(jìn)行分支合并時(shí),如果可以竞思,Git會使用Fast forward模式表谊,刪除分支后,分支歷史信息會丟失

--no-ff表示禁用Fast forward模式盖喷,能看出曾做過合并

刪除分支

$ git branch -d <branch-name>

強(qiáng)行刪除分支

$ git branch -D <branch-name>

查看分支合并圖

$ git log --graph

簡潔查看

$ git log --graph --pretty=oneline --abbrev-commit

Bug分支

假設(shè)場景——設(shè)A為游戲軟件

master 上面發(fā)布的是A的1.0版本

dev 上開發(fā)的是A的2.0版本

這時(shí)爆办,用戶反映 1.0版本存在漏洞,有人利用這個(gè)漏洞開外掛

需要從dev切換到master去填這個(gè)漏洞课梳,正常必須先提交dev目前的工作距辆,才能切換

而dev的工作還未完成,不想提交暮刃,所以先把dev的工作stash一下跨算。然后切換到master

在master建立分支issue101并切換

在issue101上修復(fù)漏洞

修復(fù)后,在master上合并并刪除issue101

切回dev椭懊,恢復(fù)原本工作诸蚕,繼續(xù)工作

保存工作現(xiàn)場

$ git stash

查看保存的工作現(xiàn)場

$ git stash list

恢復(fù)工作現(xiàn)場

$ git stash apply

刪除工作現(xiàn)場

$ git stash drop

恢復(fù)并刪除工作現(xiàn)場

git stash pop

Feature分支

每添加一個(gè)新功能,最好新建一個(gè)feature分支,在上面開發(fā)完成后背犯,合并坏瘩,最后,刪除該feature分支

多人協(xié)作

多人協(xié)作通常的工作模式

先試圖推送自己的修改git push

若推送失敗媳板,則遠(yuǎn)程分支比本地分支更新桑腮,git pull拉取遠(yuǎn)程分支試圖合并

若合并有沖突,則解決沖突蛉幸,并在本地提交(add和commit)

若沒有沖突或解決了沖突,再次推送git push

查看遠(yuǎn)程庫信息

$ git remote

詳細(xì)查看

git remote -v

本地推送分支

$ git push origin <branch-name>

在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支

$ git checkout -b <branch-name> origin/<branch-name>

建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)

$ git branch --set-upstream <branch-name> origin/<branch-name>

$ git branch --set-upstream-to=origin/<branch-name> <branch-name>

從遠(yuǎn)程抓取分支

$ git pull

Rebase“變基”

$ git rebase

把分叉的提交歷史“整理”成一條直線丛晦,看上去更直觀奕纫。缺點(diǎn)是本地的分叉提交已經(jīng)被修改過了。

只對尚未推送或尚未分享給別人的本地修改執(zhí)行變基操作清理歷史烫沙,從不對已推送至別處的提交執(zhí)行變基操作

標(biāo)簽管理

發(fā)布一個(gè)版本時(shí)匹层,我們通常先在版本庫中打一個(gè)標(biāo)簽(tag),這樣锌蓄,就唯一確定了打標(biāo)簽時(shí)刻的版本

將來無論什么時(shí)候升筏,取某個(gè)標(biāo)簽的版本,就是把那個(gè)打標(biāo)簽的時(shí)刻的歷史版本取出來瘸爽。所以您访,標(biāo)簽也是版本庫的一個(gè)快照

創(chuàng)建標(biāo)簽

$ git tag <tag-name>

在最新commit上打一個(gè)標(biāo)簽

$ git tag <tag-name> commit-id

在對應(yīng)的commit_id上打一個(gè)新標(biāo)簽

創(chuàng)建帶有說明的標(biāo)簽

$ git tag -a <tag-name> -m "description" commit-id

-a指定標(biāo)簽名,-m指定說明文字

查看所有標(biāo)簽

$ git tag

查看對應(yīng)標(biāo)簽的信息

$ git show <tag-name>

注意標(biāo)簽總是和某個(gè)commit掛鉤剪决。如果這個(gè)commit既出現(xiàn)在master分支灵汪,又出現(xiàn)在dev分支,那么在這兩個(gè)分支上都可以看到這個(gè)標(biāo)簽柑潦。

操作標(biāo)簽

推送某個(gè)標(biāo)簽到遠(yuǎn)程

$ git push origin <tag-name>

一次性推送全部尚未推送的標(biāo)簽到遠(yuǎn)程

git push origin --tags

刪除一個(gè)本地標(biāo)簽

$ git tag -d <tag-name>

刪除一個(gè)遠(yuǎn)程標(biāo)簽

先從本地刪除

$ git tag -d <tag-name>

再從遠(yuǎn)程刪除

$ git push origin :refs/tags/<tag-name>

使用GitHub

如何參與一個(gè)開源項(xiàng)目

Fork任意開源庫 ——> 從自己的賬戶下clone——> 修復(fù)bug或者新增一個(gè)功能 ——> 若希望官方庫接受你的修改享言,可以在GitHub上發(fā)起一個(gè)pull request

本地庫既關(guān)聯(lián)GitHub,又關(guān)聯(lián)碼云

如原來已經(jīng)關(guān)聯(lián)了默認(rèn)名origin的GitHub

先刪除已關(guān)聯(lián)的名為origin的遠(yuǎn)程庫:

$ git remote rm origin

然后渗鬼,先關(guān)聯(lián)GitHub的遠(yuǎn)程庫:

$ git remote add github git@github.com:username/repositoryname.git

注意览露,遠(yuǎn)程庫的名稱叫g(shù)ithub,不叫origin了

接著譬胎,再關(guān)聯(lián)碼云的遠(yuǎn)程庫:

$ git remote add gitee git@gitee.com:username/repositoryname.git

同樣注意差牛,遠(yuǎn)程庫的名稱叫g(shù)itee,不叫origin了

注意多個(gè)關(guān)聯(lián)后以上所以命令含的origin都換成相應(yīng)的github或gitee

如果要推送到GitHub银择,使用命令:

$ git push github master

如果要推送到碼云多糠,使用命令:

$ git push gitee master

自定義Git

顯示顏色

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

$ git config --global color.ui true

忽略特殊文件

見廖老師教程

配置別名

用git st就表示git status

$ git config --global alias.st status

配置一個(gè)git last浩考,讓其顯示最后一次提交信息:

$ git config --global alias.last 'log -1'

甚至還有人喪心病狂地把lg配置成了:

$ 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"

試試git lg的效果夹孔,很炫酷

配置文件

配置Git的時(shí)候,加上--global是針對當(dāng)前用戶起作用的,如果不加搭伤,那只針對當(dāng)前的倉庫起作用

查看用戶的配置信息:

$ git config --global --list

要查看當(dāng)前倉庫的只怎,把global改成local就好

配置文件放哪了?每個(gè)倉庫的Git配置文件都放在.git/config文件中:$ cat .gitconfig

別名就在alias后面怜俐,要?jiǎng)h除別名身堡,直接把對應(yīng)的行刪掉即可

搭建Git服務(wù)器

GitHub就是一個(gè)免費(fèi)托管開源代碼的遠(yuǎn)程倉庫

但是對于某些視源代碼如生命的商業(yè)公司來說,既不想公開源代碼拍鲤,又舍不得給GitHub交保護(hù)費(fèi)贴谎,那就只能自己搭建一臺Git服務(wù)器作為私有倉庫使用

搭建見廖老師教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市季稳,隨后出現(xiàn)的幾起案子擅这,更是在濱河造成了極大的恐慌,老刑警劉巖景鼠,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲翎,死亡現(xiàn)場離奇詭異,居然都是意外死亡铛漓,警方通過查閱死者的電腦和手機(jī)溯香,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓恶,“玉大人玫坛,你說我怎么就攤上這事∥是辏” “怎么了昂秃?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杜窄。 經(jīng)常有香客問我肠骆,道長,這世上最難降的妖魔是什么塞耕? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任蚀腿,我火速辦了婚禮,結(jié)果婚禮上扫外,老公的妹妹穿的比我還像新娘莉钙。我一直安慰自己,他們只是感情好筛谚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布磁玉。 她就那樣靜靜地躺著,像睡著了一般驾讲。 火紅的嫁衣襯著肌膚如雪蚊伞。 梳的紋絲不亂的頭發(fā)上席赂,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音时迫,去河邊找鬼颅停。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掠拳,可吹牛的內(nèi)容都是我干的癞揉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼溺欧,長吁一口氣:“原來是場噩夢啊……” “哼喊熟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姐刁,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤逊移,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后龙填,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拐叉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年岩遗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凤瘦。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宿礁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔬芥,到底是詐尸還是另有隱情梆靖,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布笔诵,位于F島的核電站返吻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏乎婿。R本人自食惡果不足惜测僵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谢翎。 院中可真熱鬧捍靠,春花似錦、人聲如沸森逮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褒侧。三九已至良风,卻和暖如春谊迄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拖吼。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工鳞上, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吊档。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓篙议,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怠硼。 傳聞我的和親對象是個(gè)殘疾皇子鬼贱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,661評論 9 163
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么香璃? Git是目前世界上最先...
    橫渡閱讀 3,957評論 3 27
  • 遠(yuǎn)程倉庫 到目前為止这难,我們已經(jīng)掌握了如何在Git倉庫里對一個(gè)文件進(jìn)行時(shí)光穿梭,你再也不用擔(dān)心文件備份或者丟失的問題...
    歸云丶閱讀 1,961評論 0 5
  • (預(yù)警:因?yàn)樵敿?xì)葡秒,所以行文有些長姻乓,新手邊看邊操作效果出乎你的預(yù)料) 一:Git是什么? Git是目前世界上最先進(jìn)的...
    axiaochao閱讀 1,934評論 1 8
  • git 使用筆記 git原理: 文件(blob)對象眯牧,樹(tree)對象蹋岩,提交(commit)對象 tree對象 ...
    神刀閱讀 3,773評論 0 10