GIT命令操作全攻略,请收下我的膝盖!
👇👇關(guān)注后回復(fù)?“進(jìn)群”?,拉你進(jìn)程序員交流群👇👇
作者丨鴨血粉絲Tang
來源丨Java極客技術(shù)(ID:Javageektech)
一、簡(jiǎn)介
在介紹git操作命令之前,我們先來了解一段故事!
很多人都知道,Linus 在1991年 創(chuàng)建了開源的Linux操作系統(tǒng),此后的三十多年里,Linux 系統(tǒng)不斷發(fā)展,已然成為全世界最大的服務(wù)器系統(tǒng)軟件了。
Linus 雖然創(chuàng)建了Linux操作系統(tǒng),但是Linux操作系統(tǒng)的壯大是得益于全世界熱心的志愿者參與的,這么多人在世界各地為L(zhǎng)inux操作系統(tǒng)編寫代碼,那Linux操作系統(tǒng)的代碼是如何管理的呢?
在 2002 年以前,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給 Linus,然后由 Linus 本人通過手工方式合并代碼!
不過,到了 2002 年,Linux操作系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫(kù)之大讓 Linus 很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對(duì)這種方式表達(dá)了強(qiáng)烈不滿。
可能有的同學(xué)會(huì)發(fā)出疑問,不是有 CVS、SVN 這些免費(fèi)的版本控制系統(tǒng)嗎?為什么不用它們來托管Linux操作系統(tǒng)代碼?
因?yàn)?Linus 本人堅(jiān)定地反對(duì) CVS 和 SVN,原因是這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。
于是 Linus 選擇了一個(gè)商業(yè)的版本控制系統(tǒng) BitKeeper,BitKeeper 的東家 BitMover 公司出于人道主義精神,授權(quán) Linux 社區(qū)免費(fèi)使用這個(gè)版本控制系統(tǒng)。
隨著 Linux 社區(qū)對(duì) BitKeeper 版本控制系統(tǒng)的深度了解,原本安定團(tuán)結(jié)的大好局面在 2005 年被打破了,原因是 Linux 社區(qū)牛人眾多,一名叫 Andrew 的開發(fā)者把 BitKeeper 商業(yè)授權(quán)協(xié)議破解了(這么干的其實(shí)也不只他一個(gè)),之后被 BitMover 公司發(fā)現(xiàn)了(監(jiān)控工作做得不錯(cuò)!),于是 BitMover 公司怒了,要收回 Linux 社區(qū)的免費(fèi)使用權(quán)。
Linus 向 BitMover 公司道了歉,保證以后嚴(yán)格管教弟兄們,嗯,想要?jiǎng)e人不破解,這其實(shí)是不可能的。
之后,Linus 花了兩周時(shí)間自己用 C 寫了一個(gè)分布式版本控制系統(tǒng),這就是我們今天要介紹的 Git!(牛人是怎么定義的,大家可以自行體會(huì)一下)
一個(gè)月之內(nèi),Linux 系統(tǒng)的源碼已經(jīng)由 Git 管理了!
之后的事情,想必估計(jì)都知道,Git 迅速成為全世界最流行的分布式版本控制系統(tǒng),在代碼托管方面,基本上是一騎絕塵!
尤其是 2008 年,GitHub 網(wǎng)站上線了,它為開源項(xiàng)目免費(fèi)提供 Git 存儲(chǔ),無數(shù)的開源項(xiàng)目開始遷移至 GitHub,包括 jQuery、PHP、Ruby等等!
說了這么多,Git 是一款什么樣的軟件?和 CVS、SVN 這些免費(fèi)的版本控制系統(tǒng)有什么區(qū)別呢?
上文中我們也說到了,Git 其實(shí)是一款分布式的版本控制系統(tǒng),可能你還是不太理解什么叫分布式,我們先聊聊什么是集中式!
集中方的版本控制系統(tǒng),簡(jiǎn)單的說,就是當(dāng)你要干活的時(shí)候,用的一般都是自己的電腦,首先要從中央服務(wù)器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務(wù)器。
集中式版本控制系統(tǒng),好處就是統(tǒng)一管理,但是壞處也很明顯,必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)內(nèi)還好,帶寬夠大,速度夠快,可如果在互聯(lián)網(wǎng)上,遇到網(wǎng)速慢的話,可能提交一個(gè)10M的文件就需要5分鐘,這還不得把人給憋死啊。
分布式版本控制系統(tǒng),與集中式版本控制系統(tǒng)最大的不同就是:沒有中央服務(wù)器這個(gè)東西。
每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),可以說每個(gè)電腦都是中央服務(wù)器,當(dāng)你工作的時(shí)候,不需要聯(lián)網(wǎng),可以直接提交工作的內(nèi)容,如果對(duì)方的電腦想要知道你的工作內(nèi)容,你只需要把對(duì)應(yīng)的工作文件推送過去就可以,對(duì)方就可以看到,其他不相關(guān)的文件不需要推送給對(duì)方!
和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題,所有人都沒法干活了。
既然git這么受歡迎,下面我們就開始git的學(xué)習(xí)之旅吧!
二、安裝 GIT
2.1、在 Linux 上安裝 Git
如果你當(dāng)前的電腦操作系統(tǒng)是 Linux,安裝起來會(huì)非常簡(jiǎn)單,首先試著輸入git,看看系統(tǒng)有沒有安裝Git:
$?git The?program?'git'?is?currently?not?installed.?You?can?install?it?by?typing: sudo?apt-get?install?git像上面的命令,有很多 Linux 會(huì)友好地告訴你 Git 沒有安裝,還會(huì)告訴你如何安裝 Git。
按照提示,輸入如下命令,即可安裝git!
sudo?apt-get?install?git2.2、在 Mac OS X 上安裝 Git
如果你正在使用 Mac 做開發(fā),有兩種安裝 Git 的方法!
一是安裝homebrew,然后通過homebrew安裝Git,具體方法請(qǐng)參考homebrew的文檔:http://brew.sh/。
第二種方法更簡(jiǎn)單,也是推薦的方法,就是直接從AppStore安裝Xcode,因?yàn)閄code集成了Git,不過默認(rèn)沒有安裝,你需要運(yùn)行Xcode,選擇菜單Xcode->Preferences,在彈出窗口中找到Downloads,選擇Command Line Tools,點(diǎn)Install就可以完成安裝了。
Xcode是Apple官方IDE,功能非常強(qiáng)大,是開發(fā)Mac和iOS App的必選裝備,而且是免費(fèi)的!
2.3、在 Windows 上安裝 Git
在Windows上使用Git,就比較傻瓜式了,可以從Git官網(wǎng)直接下載安裝程序,然后按默認(rèn)選項(xiàng)安裝即可。
安裝完成后,在開始菜單里找到Git->Git Bash,蹦出一個(gè)類似命令行窗口的東西,就說明Git安裝成功!
以上全部安裝完成后,還需要最后一步設(shè)置,在命令行輸入:
#配置全局用戶名 git?config?--global?user.name?"Your?Name"#配置全局郵箱 git?config?--global?user.email?"email@example.com"配置的你用戶名和郵箱,因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門!
三、GIT 操作手冊(cè)
在上文中,我們對(duì)git的安裝進(jìn)行了一些簡(jiǎn)單的介紹,等環(huán)境準(zhǔn)備完成之后,我們就可以開啟GIT之旅!
3.1、配置管理
在上文中,我們有介紹了全局配置用戶名和郵箱,假如你的用戶和郵箱輸入錯(cuò)誤了,想修改,怎么辦呢?
同樣可以用如下的命令,進(jìn)行修改!
#重新配置用戶名 git?config?--global?user.name?"zhangsan"#重新配置郵箱 git?config?--global?user.email?"zhangsan@example.com"同時(shí),還可以通過如下命令查詢配置
#查看當(dāng)前配置 git?config?--list如果你想針對(duì)某個(gè)庫(kù),設(shè)置用戶名和郵箱,直接當(dāng)前倉(cāng)庫(kù)根路徑下,通過如下方式可以實(shí)現(xiàn)單獨(dú)配置!
#配置某個(gè)倉(cāng)庫(kù)的用戶名、郵箱 git?config?user.name?"Your?Name" git?config?user.email?"email@example.com"如果你配置的倉(cāng)庫(kù),用戶和密碼填錯(cuò)了,可以通過如下命令方式清除,然后重新配置!
git?config?--system?--unset?credential.helper3.2、版本管理
版本庫(kù)管理是GIT最重要的核心模塊,具體操作如下!
當(dāng)你想向GIT里面提交一個(gè)文件的時(shí)候,首先需要初始化一個(gè)版本庫(kù)
#初始化一個(gè)版本庫(kù) git?init然后,可以通過如下命令,添加或者修改一個(gè)的指定文件!
#添加或者修改一個(gè)的指定文件 git?add?<文件名>當(dāng)然,你還可以通過如下命令,添加當(dāng)前目錄下全部的文件!
#添加或者修改的所有文件 git?add?--all添加完成之后,還需要提交文件,命令如下
#提交文件 git?commit?-m?<注釋>例如,提交所有的內(nèi)容提交到版本庫(kù)!
#例如,提交所有的文件添加修改提交到版本庫(kù) git?commit?-m?"注釋內(nèi)容"有些時(shí)候,我們需要通過一下命令,查詢當(dāng)前工作區(qū)的信息。
比如,查看當(dāng)前工作區(qū)的狀態(tài),這個(gè)基本上經(jīng)常用到!
#查看當(dāng)前工作區(qū)的狀態(tài) git?status查詢當(dāng)前版本庫(kù)的歷史提交日志紀(jì)錄,這個(gè)會(huì)在版本回滾的時(shí)候用到!
#查看歷史日志 git?log#查看精簡(jiǎn)日志 git?log?--pretty=oneline查看當(dāng)前文件的內(nèi)容!
#查看文件內(nèi)容 cat?<文件名>查看歷史提交的命令!
#查看歷史提交的命令 git?reflog查看文件修改內(nèi)容!
#查看當(dāng)前文件修改內(nèi)容 git?diff?<文件名>查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別!
#查看當(dāng)前文件和版本庫(kù)里面最新版本的區(qū)別 git?diff?HEAD?--?<文件名>如果你想將當(dāng)前文件回滾到歷史上某個(gè)時(shí)間點(diǎn)提交的文件,可以通過如下命令!
#首先查詢你要回滾到歷史上某個(gè)時(shí)間點(diǎn)的版本ID git?log?--pretty=oneline#然后通過如下命令,進(jìn)行回滾操作 git?reset?--hard?<版本id>當(dāng)你修改了某個(gè)文件,但是沒有提交,想要回滾,怎么處理呢?可以通過如下命令進(jìn)行撤回!
#撤銷某個(gè)文件的修改 git?checkout?--?<文件名>如果你想全部撤銷,可以通過如下命令撤回全部!
#撤銷所有修改 git?checkout?.當(dāng)然,如果你不想要某個(gè)文件了,可以通過如下方式刪除!
#刪除指定文件 git?rm?<文件名>3.3、分支管理
GIT的分支管理,非常強(qiáng)大,也是它遠(yuǎn)勝 CVS、SVN 這些免費(fèi)的版本控制系統(tǒng)一大神器!
GIT在初始化版本庫(kù)的時(shí)候,會(huì)默認(rèn)創(chuàng)建一個(gè)master分支,也就是主干分支!
如果你想創(chuàng)建某個(gè)分支,可以通過如下命令創(chuàng)建!
#創(chuàng)建分支 git?branch?<分支名>比如,創(chuàng)建一個(gè)develop分支!
git?branch?develop當(dāng)執(zhí)行這個(gè)命令之后,GIT的develop分支指針會(huì)指向到當(dāng)前分支當(dāng)前位置!
怎么切換到分支呢?我們可以通過git checkout命令,實(shí)現(xiàn)分支的切換!
#切換分支 git?checkout?<分支名>當(dāng)然,你還可以一步到位,通過如下命令,創(chuàng)建并切換分支!
#創(chuàng)建分支+切換分支 git?checkout?-b?<分支名>通過下面這個(gè)命令,可以查詢當(dāng)前分支!
#查看當(dāng)前分支 git?branch如果分支切換失敗,可以通過git status命令查詢一下為什么會(huì)失敗,分支切換失敗多半是當(dāng)前工作區(qū)的代碼沒有提交到版本庫(kù)里面導(dǎo)致,可以檢測(cè)一下是不是代碼都提交到本地版本庫(kù)!
在平時(shí)的開發(fā)過程中,我們會(huì)經(jīng)常碰到需要合并分支,比如將develop分支合并到master分支,怎么處理呢?
可以通過如下命令,實(shí)現(xiàn)快速合并!
#快速合并分支 git?merge?<分支名>在合并的時(shí)候,可能會(huì)出現(xiàn)文件發(fā)生沖突的情況,如果出現(xiàn),就排查修改文件,然后提交!
當(dāng)然,你還可以通過如下命令,來實(shí)現(xiàn)分支合并提交!
#普通模式合并分支+提交 git?merge?--no-ff?-m?"merge?with?no-ff"?<分支名>如果某個(gè)分支,你不想要了,想刪除,可以通過如下命令實(shí)現(xiàn)!
#刪除分支 git?branch?-d?<分支名>如果刪除過程中,出現(xiàn)報(bào)錯(cuò),可以下面這個(gè)命令,強(qiáng)行刪除!
#強(qiáng)行刪除分支 git?branch?-D?<分支名>最后,你可以通過下面這個(gè)命令,查詢當(dāng)前版本分支的變動(dòng)情況!
#查看分支合并圖 git?log?--graph3.4、標(biāo)簽管理
標(biāo)簽管理,也是git最最核心的功能!通過標(biāo)簽,我們可以很快的定位到倉(cāng)庫(kù)中某個(gè)版本,并進(jìn)行代碼回滾!
可以通過如下命令創(chuàng)建某個(gè)標(biāo)簽,比如v1.0標(biāo)簽。
#創(chuàng)建標(biāo)簽 git?tag?v1.0查看標(biāo)簽情況
#查看所有的標(biāo)簽 git?tag如果你想看某個(gè)標(biāo)簽,具體的詳情,可以通過如下命令!
#查看標(biāo)簽信息 git?show?<標(biāo)簽名>如果你不想要了,可以通過如下命令,刪除標(biāo)簽!
#刪除標(biāo)簽 git?tag?-d?<標(biāo)簽名>當(dāng)然,如果你想針對(duì)某個(gè)歷史版本,打標(biāo)簽,可以通過如下方式實(shí)現(xiàn)!
#查看歷史版本id git?log?--pretty=oneline?--abbrev-commit#對(duì)某個(gè)版本ID,打上標(biāo)簽,名稱v0.9 git?tag?v0.9?<版本id>我們還可以將標(biāo)簽推送到遠(yuǎn)程分支,命令如下:
#推送全部標(biāo)簽到遠(yuǎn)程庫(kù) git?push?origin?--tags刪除遠(yuǎn)程標(biāo)簽庫(kù)
#刪除本地標(biāo)簽 git?tag?-d?v0.9#推送到遠(yuǎn)程分支 git?push?origin?:refs/tags/<標(biāo)簽名>3.5、忽略文件管理
GIT還為我們提供了一個(gè)巨大的利器,我們可以通過配置忽略文件,將當(dāng)前目錄中某些文件忽略掉,不提交到版本庫(kù)里面,具體怎么操作呢?
首先在當(dāng)前版本庫(kù)根目錄下,創(chuàng)建一個(gè).gitignore文件,內(nèi)容自己定義,比如下面這個(gè)內(nèi)容,就是小編定義的忽略文件,
然后,執(zhí)行如下命令,讓忽略文件生效!
#清除緩存 git?rm?-r?--cached?.#添加所有文件 git?add?.#提交到版本庫(kù) git?commit?-m?"update?.gitignore"#提交到遠(yuǎn)程分支(如果有的話) git?push3.6、遠(yuǎn)程倉(cāng)庫(kù)管理
以上介紹的基本上都是本地倉(cāng)庫(kù)的操作,如果我們需要與其他的電腦協(xié)助工作,怎么處理呢?
如果我們本地沒有倉(cāng)庫(kù),我們可以直接從遠(yuǎn)程分支里面拉取一個(gè)版本庫(kù)同步到本地,命令如下。
#從遠(yuǎn)端服務(wù)器創(chuàng)建主分支 git?clone?<url>我們可以通過如下命令,查詢遠(yuǎn)程分支的詳情
#查看遠(yuǎn)程庫(kù) git?remote?-v如果你是通過git init方式初始化了本地倉(cāng)庫(kù),想與遠(yuǎn)程分支關(guān)聯(lián),可以通過如下命令實(shí)現(xiàn)!
#添加遠(yuǎn)程地址 git?remote?add?origin?<url>如果你填寫錯(cuò)了,想刪除,可以通過如下命令刪除,再重新添加!
#刪除遠(yuǎn)程提交地址 git?remote?rm?origin如果你之前沒有推送內(nèi)容到遠(yuǎn)程庫(kù),可以通過如下命令推送
#首次推送到遠(yuǎn)程庫(kù)并創(chuàng)建分支 git?push?-u?origin?<分支名>?(第一次將內(nèi)容推送到master分支)后期推送到遠(yuǎn)程分支,可以這樣操作
#后期推送到遠(yuǎn)程分支 git?push?origin?<分支名>#可以簡(jiǎn)寫,快速推送 git?push有時(shí)候,我們還需要查詢遠(yuǎn)程分支的情況,可以通過如下命令操作:
#查看遠(yuǎn)程的所有分支 git?branch?-a有時(shí)候,我們還需要從遠(yuǎn)程服務(wù)器拉取某個(gè)指定的分支到本地,可以通過下面這個(gè)命令完成:
#從遠(yuǎn)程服務(wù)器拉取某個(gè)指定的分支到本地,并創(chuàng)建分支 git?checkout?-b?<分支名>??origin/<分支名>大部分的情況下,當(dāng)遠(yuǎn)程服務(wù)器更新了版本庫(kù),通知我們也要更新時(shí),通過如下方式,即可將遠(yuǎn)程的版本庫(kù)最新的內(nèi)容同步到我們本地電腦版本庫(kù)里面。
#拉取遠(yuǎn)程分支內(nèi)容,并同步到本地版本庫(kù) git?pull有時(shí)候,需要設(shè)置本地分支與遠(yuǎn)程分支的鏈接,可以通過下面這個(gè)命令完成:
#設(shè)置本地分支與遠(yuǎn)程分支的鏈接 git?branch?--set-upstream?dev?origin/dev有時(shí)候,我們需要?jiǎng)h除沒有untracked的文件,可以通過下面這個(gè)命令完成:
#刪除沒有untracked的文件 git?clean?-d?-xf3.7、沖突處理
版本同步的時(shí)候,如果大家都修改了同一個(gè)文件,難免會(huì)發(fā)生沖突。
比如,當(dāng)修改的文件未提交,直接遠(yuǎn)程拉取代碼會(huì)發(fā)生沖突,改怎么辦呢?
可以這樣處理
#先將本地修改存儲(chǔ)起來 git?stash#暫存了本地修改之后,就可以pull了 git?pull#還原暫存的內(nèi)容 git?stash?pop?stash@{0}此時(shí)系統(tǒng)會(huì)提示如下類似的信息:
Auto-merging?c/environ.c CONFLICT?(content):?Merge?conflict?in?c/environ.c意思就是系統(tǒng)自動(dòng)合并修改的內(nèi)容,但是其中有沖突,需要解決其中的沖突。
然后打開沖突的文件,進(jìn)行修改,修改完畢之后,執(zhí)行如下命令進(jìn)行提交!
git?add?. git?commit?-m?"注釋" git?push當(dāng)然,還可以進(jìn)行強(qiáng)制更新操作,覆蓋本地代碼,命令如下!
#下載遠(yuǎn)程庫(kù)內(nèi)容 git?fetch?--all#不做任何的合并,git?reset?會(huì)把HEAD指向剛剛下載的最新的版本 git?reset?--hard?origin/master四、與服務(wù)器建立 ssh 連接
git中電腦與電腦之前的連接,支持的模式有兩種:HTTP和SSH,其中HTTP的傳輸會(huì)比較慢,才能SSH方式進(jìn)行互推,效率會(huì)非常高!
因此,在實(shí)際的使用過程總,推薦使用SSH模式與遠(yuǎn)程服務(wù)器建立連接!
例如與GitHub的連接,具體的操作配置方式如下!
4.1、創(chuàng)建 SSH Key
在當(dāng)前電腦用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了,可以直接跳過。
如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建 SSH Key:
ssh-keygen?-t?rsa?-C?"youremail@example.com"你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認(rèn)值即可,由于這個(gè) Key 也不是用于軍事目的,所以也無需設(shè)置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個(gè)文件,這兩個(gè)就是 SSH Key 的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
4.2、將公鑰配置到服務(wù)端
登陸 GitHub,打開Account settings,SSH Keys頁面:
然后,點(diǎn)Add SSH Key,填上任意Title,在 Key 文本框里粘貼id_rsa.pub文件的內(nèi)容:
點(diǎn)Add Key,你就應(yīng)該看到已經(jīng)添加的 Key !
至此,本地與遠(yuǎn)程服務(wù)器的連接配置已經(jīng)完成,剩下的就是直接遠(yuǎn)程服務(wù)器拉取代碼,然后提交的時(shí)候git push就可以了!
五、小結(jié)
本文主要圍繞GIT的背景和常用的操作命令做了一些介紹,可能有些地方介紹的比較粗陋、不完美,希望老鐵們能批評(píng)指出!
六、參考
1、廖雪峰 - GIT 教程
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?面試題?資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!
點(diǎn)擊👆卡片,關(guān)注后回復(fù)【面試題】即可獲取
在看點(diǎn)這里好文分享給更多人↓↓
總結(jié)
以上是生活随笔為你收集整理的GIT命令操作全攻略,请收下我的膝盖!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 45套(毕业答辩、开题报告、职场)PPT
- 下一篇: app渗透思路