老司機(jī)帶路芙贫,手把手教你使用Git

老司機(jī)帶路搂鲫,手把手教你使用Git

一:Git是什么?

? ? ? ?Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)磺平。

二:SVN與Git的最主要的區(qū)別魂仍?

? ? ? SVN是集中式版本控制系統(tǒng),版本庫(kù)是集中放在中央服務(wù)器的拣挪,而干活的時(shí)候擦酌,用的都是自己的電腦,所以首先要從中央服務(wù)器哪里得到最新的版本媒吗,然后干活仑氛,干完后,需要把自己做完的活推送到中央服務(wù)器闸英。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)還可以介袜,帶寬夠大甫何,速度夠快,如果在互聯(lián)網(wǎng)下遇伞,如果網(wǎng)速慢的話(huà)辙喂,就納悶了。

? ? ? Git是分布式版本控制系統(tǒng)鸠珠,那么它就沒(méi)有中央服務(wù)器的巍耗,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù),這樣渐排,工作的時(shí)候就不需要聯(lián)網(wǎng)了炬太,因?yàn)榘姹径际窃谧约旱碾娔X上。既然每個(gè)人的電腦都有一個(gè)完整的版本庫(kù)驯耻,那多個(gè)人如何協(xié)作呢亲族?比如說(shuō)自己在電腦上改了文件A炒考,其他人也在電腦上改了文件A,這時(shí)霎迫,你們兩之間只需把各自的修改推送給對(duì)方斋枢,就可以互相看到對(duì)方的修改了。

三:在windows上如何安裝Git知给?

? ? ? msysgit是 windows版的Git,如下:

?需要從網(wǎng)上下載一個(gè)瓤帚,然后進(jìn)行默認(rèn)安裝即可。安裝完成后涩赢,在開(kāi)始菜單里面找到 “Git –> Git Bash”,如下:

會(huì)彈出一個(gè)類(lèi)似的命令窗口的東西缘滥,就說(shuō)明Git安裝成功。如下:

安裝完成后谒主,還需要最后一步設(shè)置朝扼,在命令行輸入如下:

? 因?yàn)镚it是分布式版本控制系統(tǒng),所以需要填寫(xiě)用戶(hù)名和郵箱作為一個(gè)標(biāo)識(shí)霎肯。

? ?注意:git config? –global 參數(shù)擎颖,有了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉(cāng)庫(kù)都會(huì)使用這個(gè)配置观游,當(dāng)然你也可以對(duì)某個(gè)倉(cāng)庫(kù)指定的不同的用戶(hù)名和郵箱搂捧。

四:如何操作?

? ? ?一:創(chuàng)建版本庫(kù)懂缕。

? ? ?什么是版本庫(kù)允跑?版本庫(kù)又名倉(cāng)庫(kù),英文名repository,你可以簡(jiǎn)單的理解一個(gè)目錄搪柑,這個(gè)目錄里面的所有文件都可以被Git管理起來(lái)聋丝,每個(gè)文件的修改,刪除工碾,Git都能跟蹤弱睦,以便任何時(shí)刻都可以追蹤歷史,或者在將來(lái)某個(gè)時(shí)刻還可以將文件”還原”渊额。

? ? 所以創(chuàng)建一個(gè)版本庫(kù)也非常簡(jiǎn)單况木,如下我是D盤(pán) –> www下 目錄下新建一個(gè)testgit版本庫(kù)。

pwd 命令是用于顯示當(dāng)前的目錄旬迹。

? ? ? 1. 通過(guò)命令 git init 把這個(gè)目錄變成git可以管理的倉(cāng)庫(kù)火惊,如下:

? ? ?這時(shí)候你當(dāng)前testgit目錄下會(huì)多了一個(gè).git的目錄,這個(gè)目錄是Git來(lái)跟蹤管理版本的奔垦,沒(méi)事千萬(wàn)不要手動(dòng)亂改這個(gè)目錄里面的文件屹耐,否則,會(huì)把git倉(cāng)庫(kù)給破壞了宴倍。如下:

? ? ??2. 把文件添加到版本庫(kù)中张症。

? ? ? ? ? 首先要明確下仓技,所有的版本控制系統(tǒng),只能跟蹤文本文件的改動(dòng)俗他,比如txt文件脖捻,網(wǎng)頁(yè),所有程序的代碼等兆衅,Git也不列外地沮,版本控制系統(tǒng)可以告訴你每次的改動(dòng),但是圖片羡亩,視頻這些二進(jìn)制文件摩疑,雖能也能由版本控制系統(tǒng)管理,但沒(méi)法跟蹤文件的變化畏铆,只能把二進(jìn)制文件每次改動(dòng)串起來(lái)雷袋,也就是知道圖片從1kb變成2kb,但是到底改了啥辞居,版本控制也不知道楷怒。

? ??下面先看下demo如下演示:

? ? ?我在版本庫(kù)testgit目錄下新建一個(gè)記事本文件 readme.txt 內(nèi)容如下:11111111

? ? ?第一步:使用命令 git add readme.txt添加到暫存區(qū)里面去。如下:

? ?如果和上面一樣瓦灶,沒(méi)有任何提示鸠删,說(shuō)明已經(jīng)添加成功了。

? ?第二步:用命令 git commit告訴Git贼陶,把文件提交到倉(cāng)庫(kù)刃泡。

??現(xiàn)在我們已經(jīng)提交了一個(gè)readme.txt文件了,我們下面可以通過(guò)命令git status來(lái)查看是否還有文件未提交碉怔,如下:

?說(shuō)明沒(méi)有任何文件未提交烘贴,但是我現(xiàn)在繼續(xù)來(lái)改下readme.txt內(nèi)容,比如我在下面添加一行2222222222內(nèi)容眨层,繼續(xù)使用git status來(lái)查看下結(jié)果庙楚,如下:

上面的命令告訴我們 readme.txt文件已被修改,但是未被提交的修改趴樱。

接下來(lái)我想看下readme.txt文件到底改了什么內(nèi)容,如何查看呢酪捡?可以使用如下命令:

git diff readme.txt 如下:

如上可以看到叁征,readme.txt文件內(nèi)容從一行11111111改成 二行 添加了一行22222222內(nèi)容。

知道了對(duì)readme.txt文件做了什么修改后逛薇,我們可以放心的提交到倉(cāng)庫(kù)了捺疼,提交修改和提交文件是一樣的2步(第一步是git add? 第二步是:git commit)。

如下:

二:版本回退:

? ? ?如上永罚,我們已經(jīng)學(xué)會(huì)了修改文件啤呼,現(xiàn)在我繼續(xù)對(duì)readme.txt文件進(jìn)行修改卧秘,再增加一行

內(nèi)容為33333333333333.繼續(xù)執(zhí)行命令如下:

現(xiàn)在我已經(jīng)對(duì)readme.txt文件做了三次修改了,那么我現(xiàn)在想查看下歷史記錄官扣,如何查呢翅敌?我們現(xiàn)在可以使用命令 git log 演示如下所示:

? ? git log命令顯示從最近到最遠(yuǎn)的顯示日志,我們可以看到最近三次提交惕蹄,最近的一次是,增加內(nèi)容為333333.上一次是添加內(nèi)容222222蚯涮,第一次默認(rèn)是 111111.如果嫌上面顯示的信息太多的話(huà),我們可以使用命令 git log –pretty=oneline 演示如下:

? ? 現(xiàn)在我想使用版本回退操作卖陵,我想把當(dāng)前的版本回退到上一個(gè)版本遭顶,要使用什么命令呢?可以使用如下2種命令泪蔫,第一種是:git reset? –hard HEAD^ 那么如果要回退到上上個(gè)版本只需把HEAD^ 改成 HEAD^^ 以此類(lèi)推棒旗。那如果要回退到前100個(gè)版本的話(huà),使用上面的方法肯定不方便撩荣,我們可以使用下面的簡(jiǎn)便命令操作:git reset? –hard HEAD~100 即可铣揉。未回退之前的readme.txt內(nèi)容如下:

如果想回退到上一個(gè)版本的命令如下操作:

再來(lái)查看下 readme.txt內(nèi)容如下:通過(guò)命令cat readme.txt查看

可以看到,內(nèi)容已經(jīng)回退到上一個(gè)版本了婿滓。我們可以繼續(xù)使用git log 來(lái)查看下歷史記錄信息老速,如下:

我們看到 增加333333 內(nèi)容我們沒(méi)有看到了,但是現(xiàn)在我想回退到最新的版本凸主,如:有333333的內(nèi)容要如何恢復(fù)呢橘券?我們可以通過(guò)版本號(hào)回退,使用命令方法如下:

git reset? –hard 版本號(hào) 卿吐,但是現(xiàn)在的問(wèn)題假如我已經(jīng)關(guān)掉過(guò)一次命令行或者333內(nèi)容的版本號(hào)我并不知道呢旁舰?要如何知道增加3333內(nèi)容的版本號(hào)呢?可以通過(guò)如下命令即可獲取到版本號(hào):git reflog? 演示如下:

通過(guò)上面的顯示我們可以知道嗡官,增加內(nèi)容3333的版本號(hào)是 6fcfc89.我們現(xiàn)在可以命令

git reset? –hard 6fcfc89來(lái)恢復(fù)了箭窜。演示如下:

可以看到 目前已經(jīng)是最新的版本了。

三:理解工作區(qū)與暫存區(qū)的區(qū)別衍腥?

工作區(qū):就是你在電腦上看到的目錄磺樱,比如目錄下testgit里的文件(.git隱藏目錄版本庫(kù)除外)∑畔蹋或者以后需要再新建的目錄文件等等都屬于工作區(qū)范疇竹捉。

? ? ? 版本庫(kù)(Repository)工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不屬于工作區(qū),這是版本庫(kù)尚骄。其中版本庫(kù)里面存了很多東西块差,其中最重要的就是stage(暫存區(qū)),還有Git為我們自動(dòng)創(chuàng)建了第一個(gè)分支master,以及指向master的一個(gè)指針HEAD。

我們前面說(shuō)過(guò)使用Git提交文件到版本庫(kù)有兩步:

? 第一步:是使用 git add 把文件添加進(jìn)去憨闰,實(shí)際上就是把文件添加到暫存區(qū)状蜗。

? 第二步:使用git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上鹉动。

我們繼續(xù)使用demo來(lái)演示下:

我們?cè)趓eadme.txt再添加一行內(nèi)容為4444444轧坎,接著在目錄下新建一個(gè)文件為test.txt 內(nèi)容為test,我們先用命令 git status來(lái)查看下?tīng)顟B(tài)训裆,如下:

現(xiàn)在我們先使用git add 命令把2個(gè)文件都添加到暫存區(qū)中眶根,再使用git status來(lái)查看下?tīng)顟B(tài),如下:

接著我們可以使用git commit一次性提交到分支上边琉,如下:

四:Git撤銷(xiāo)修改和刪除文件操作属百。

一:撤銷(xiāo)修改:

??? 比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為555555555555,我們先通過(guò)命令查看如下:

在我未提交之前变姨,我發(fā)現(xiàn)添加5555555555555內(nèi)容有誤族扰,所以我得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下幾種方法可以做修改:

第一:如果我知道要?jiǎng)h掉那些內(nèi)容的話(huà)定欧,直接手動(dòng)更改去掉那些需要的文件渔呵,然后add添加到暫存區(qū),最后commit掉砍鸠。

第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本扩氢。使用 git reset? –hard HEAD^

但是現(xiàn)在我不想使用上面的2種方法,我想直接想使用撤銷(xiāo)命令該如何操作呢爷辱?首先在做撤銷(xiāo)之前录豺,我們可以先用 git status 查看下當(dāng)前的狀態(tài)。如下所示:

可以發(fā)現(xiàn)饭弓,Git會(huì)告訴你双饥,git checkout? — file 可以丟棄工作區(qū)的修改,如下命令:

git checkout? —? readme.txt,如下所示:

命令 git checkout –readme.txt 意思就是弟断,把readme.txt文件在工作區(qū)做的修改全部撤銷(xiāo)咏花,這里有2種情況,如下:

readme.txt自動(dòng)修改后阀趴,還沒(méi)有放到暫存區(qū)昏翰,使用 撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài)。

另外一種是readme.txt已經(jīng)放入暫存區(qū)了刘急,接著又作了修改矩父,撤銷(xiāo)修改就回到添加暫存區(qū)后的狀態(tài)。

對(duì)于第二種情況排霉,我想我們繼續(xù)做demo來(lái)看下,假如現(xiàn)在我對(duì)readme.txt添加一行 內(nèi)容為6666666666666,我git add 增加到暫存區(qū)后攻柠,接著添加內(nèi)容7777777球订,我想通過(guò)撤銷(xiāo)命令讓其回到暫存區(qū)后的狀態(tài)。如下所示:

注意:命令git checkout — readme.txt 中的 — 很重要瑰钮,如果沒(méi)有 — 的話(huà)冒滩,那么命令變成創(chuàng)建分支了。

二:刪除文件浪谴。

? ? ?假如我現(xiàn)在版本庫(kù)testgit目錄添加一個(gè)文件b.txt,然后提交开睡。如下:

如上:一般情況下,可以直接在文件目錄中把文件刪了苟耻,或者使用如上rm命令:rm b.txt 篇恒,如果我想徹底從版本庫(kù)中刪掉了此文件的話(huà),可以再執(zhí)行commit命令 提交掉凶杖,現(xiàn)在目錄是這樣的胁艰,

只要沒(méi)有commit之前,如果我想在版本庫(kù)中恢復(fù)此文件如何操作呢智蝠?

可以使用如下命令 git checkout? — b.txt腾么,如下所示:

再來(lái)看看我們testgit目錄,添加了3個(gè)文件了杈湾。如下所示:

五:遠(yuǎn)程倉(cāng)庫(kù)解虱。

? ? ?在了解之前,先注冊(cè)github賬號(hào)漆撞,由于你的本地Git倉(cāng)庫(kù)和github倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的殴泰,所以需要一點(diǎn)設(shè)置:

? ? ?第一步:創(chuàng)建SSH Key寂纪。在用戶(hù)主目錄下倡蝙,看看有沒(méi)有.ssh目錄挑宠,如果有位谋,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件凯傲,如果有的話(huà)妇斤,直接跳過(guò)此如下命令响鹃,如果沒(méi)有的話(huà)瞧掺,打開(kāi)命令行奋献,輸入如下命令:

ssh-keygen? -t rsa –C “youremail@example.com”, 由于我本地此前運(yùn)行過(guò)一次健霹,所以本地有,如下所示:

id_rsa是私鑰瓶蚂,不能泄露出去糖埋,id_rsa.pub是公鑰,可以放心地告訴任何人窃这。

第二步:登錄github,打開(kāi)” settings”中的SSH Keys頁(yè)面瞳别,然后點(diǎn)擊“Add SSH Key”,填上任意title,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容。

點(diǎn)擊 Add Key祟敛,你就應(yīng)該可以看到已經(jīng)添加的key疤坝。

如何添加遠(yuǎn)程庫(kù)?

? ? ? ? ?現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個(gè)Git倉(cāng)庫(kù)后馆铁,又想在github創(chuàng)建一個(gè)Git倉(cāng)庫(kù)跑揉,并且希望這兩個(gè)倉(cāng)庫(kù)進(jìn)行遠(yuǎn)程同步,這樣github的倉(cāng)庫(kù)可以作為備份埠巨,又可以其他人通過(guò)該倉(cāng)庫(kù)來(lái)協(xié)作辣垒。

?? 首先,登錄github上乍构,然后在右上角找到“create a new repo”創(chuàng)建一個(gè)新的倉(cāng)庫(kù)哥遮。如下:

在Repository name填入testgit岂丘,其他保持默認(rèn)設(shè)置眠饮,點(diǎn)擊“Create repository”按鈕仪召,就成功地創(chuàng)建了一個(gè)新的Git倉(cāng)庫(kù):

目前扔茅,在GitHub上的這個(gè)testgit倉(cāng)庫(kù)還是空的召娜,GitHub告訴我們玖瘸,可以從這個(gè)倉(cāng)庫(kù)克隆出新的倉(cāng)庫(kù)雅倒,也可以把一個(gè)已有的本地倉(cāng)庫(kù)與之關(guān)聯(lián)蔑匣,然后,把本地倉(cāng)庫(kù)的內(nèi)容推送到GitHub倉(cāng)庫(kù)。

現(xiàn)在,我們根據(jù)GitHub的提示灭忠,在本地的testgit倉(cāng)庫(kù)下運(yùn)行命令:

git remote add origin https://github.com/tugenhua0707/testgit.git

所有的如下:

把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程弛作,使用 git push命令映琳,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程萨西。

由于遠(yuǎn)程庫(kù)是空的谎脯,我們第一次推送master分支時(shí),加上了 –u參數(shù)废麻,Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支烛愧,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái)屑彻,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令社牲。推送成功后违寿,可以立刻在github頁(yè)面中看到遠(yuǎn)程庫(kù)的內(nèi)容已經(jīng)和本地一模一樣了藤巢,上面的要輸入github的用戶(hù)名和密碼如下所示:

從現(xiàn)在起,只要本地作了提交绍刮,就可以通過(guò)如下命令:

git push origin master

把本地master分支的最新修改推送到github上了孩革,現(xiàn)在你就擁有了真正的分布式版本庫(kù)了。

2. 如何從遠(yuǎn)程庫(kù)克卤ゲ窍帝?

上面我們了解了先有本地庫(kù)坤学,后有遠(yuǎn)程庫(kù)時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫(kù)飞苇。

現(xiàn)在我們想布卡,假如遠(yuǎn)程庫(kù)有新的內(nèi)容了,我想克隆到本地來(lái) 如何克隆呢贸街?

首先薛匪,登錄github逸尖,創(chuàng)建一個(gè)新的倉(cāng)庫(kù)渐白,名字叫testgit2.如下:

如下栋齿,我們看到:

現(xiàn)在瓦堵,遠(yuǎn)程庫(kù)已經(jīng)準(zhǔn)備好了澜驮,下一步是使用命令git clone克隆一個(gè)本地庫(kù)了杂穷。如下所示:

接著在我本地目錄下 生成testgit2目錄了,如下所示:

六:創(chuàng)建與合并分支廊蜒。

在 ?版本回填退里,你已經(jīng)知道屁倔,每次提交汰现,Git都把它們串成一條時(shí)間線(xiàn)口叙,這條時(shí)間線(xiàn)就是一個(gè)分支妄田。截止到目前,只有一條時(shí)間線(xiàn)启具,在Git里鲁冯,這個(gè)分支叫主分支,即master分支跨扮。HEAD嚴(yán)格來(lái)說(shuō)不是指向提交衡创,而是指向master钧汹,master才是指向提交的拔莱,所以,HEAD指向的就是當(dāng)前分支尊剔。

首先挨稿,我們來(lái)創(chuàng)建dev分支奶甘,然后切換到dev分支上。如下操作:

git checkout 命令加上 –b參數(shù)表示創(chuàng)建并切換钉赁,相當(dāng)于如下2條命令

git branch dev

git checkout dev

git branch查看分支,會(huì)列出所有的分支姓蜂,當(dāng)前分支前面會(huì)添加一個(gè)星號(hào)逮京。然后我們?cè)赿ev分支上繼續(xù)做demo懒棉,比如我們現(xiàn)在在readme.txt再增加一行 7777777777777

首先我們先來(lái)查看下readme.txt內(nèi)容穗慕,接著添加內(nèi)容77777777逛绵,如下:

現(xiàn)在dev分支工作已完成寿酌,現(xiàn)在我們切換到主分支master上醇疼,繼續(xù)查看readme.txt內(nèi)容如下:

現(xiàn)在我們可以把dev分支上的內(nèi)容合并到分支master上了倔毙,可以在master分支上贵试,使用如下命令 git merge dev 如下所示:

git merge命令用于合并指定分支到當(dāng)前分支上,合并后桑滩,再查看readme.txt內(nèi)容,可以看到胁澳,和dev分支最新提交的是完全一樣的。

注意到上面的Fast-forward信息胰丁,Git告訴我們,這次合并是“快進(jìn)模式”甘萧,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非逞快庞钢。

合并完成后基括,我們可以接著刪除dev分支了,操作如下:

總結(jié)創(chuàng)建與合并分支命令如下:

?? 查看分支:git branch

?? 創(chuàng)建分支:git branch name

?? 切換分支:git checkout name

創(chuàng)建+切換分支:git checkout –b name

合并某分支到當(dāng)前分支:git merge name

刪除分支:git branch –d name

如何解決沖突?

下面我們還是一步一步來(lái)魔眨,先新建一個(gè)新分支,比如名字叫fenzhi1朋凉,在readme.txt添加一行內(nèi)容8888888,然后提交蚁鳖,如下所示:

同樣钾腺,我們現(xiàn)在切換到master分支上來(lái)放棒,也在最后一行添加內(nèi)容,內(nèi)容為99999999厢破,如下所示:

現(xiàn)在我們需要在master分支上來(lái)合并fenzhi1,如下操作:

Git用<<<<<<<嚷掠,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容,其中<<>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容项棠,我們可以修改下如下后保存:

如果我想查看分支合并的情況的話(huà),需要使用命令 git log.命令行演示如下:

? ? 3.分支管理策略。

? ? ? 通常合并分支時(shí),git一般使用”Fast forward”模式凑队,在這種模式下,刪除分支后叫惊,會(huì)丟掉分支信息抡草,現(xiàn)在我們來(lái)使用帶參數(shù) –no-ff來(lái)禁用”Fast forward”模式。首先我們來(lái)做demo演示下:

創(chuàng)建一個(gè)dev分支。

修改readme.txt內(nèi)容答姥。

添加到暫存區(qū)。

切換回主分支(master)敲长。

合并dev分支,使用命令 git merge –no-ff? -m “注釋” dev

查看歷史記錄

截圖如下:

分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的,也就是用來(lái)發(fā)布新版本月褥,一般情況下不允許在上面干活,干活一般情況下在新建的dev分支上干活,干完后逗载,比如上要發(fā)布,或者說(shuō)dev分支代碼穩(wěn)定后可以合并到主分支master上來(lái)链烈。

七:bug分支:

?????在開(kāi)發(fā)中厉斟,會(huì)經(jīng)常碰到bug問(wèn)題,那么有了bug就需要修復(fù)强衡,在Git中,分支是很強(qiáng)大的,每個(gè)bug都可以通過(guò)一個(gè)臨時(shí)分支來(lái)修復(fù)感挥,修復(fù)完成后缩搅,合并分支,然后將臨時(shí)的分支刪除掉触幼。

比如我在開(kāi)發(fā)中接到一個(gè)404 bug時(shí)候硼瓣,我們可以創(chuàng)建一個(gè)404分支來(lái)修復(fù)它,但是置谦,當(dāng)前的dev分支上的工作還沒(méi)有提交堂鲤。比如如下:

? ?并不是我不想提交,而是工作進(jìn)行到一半時(shí)候媒峡,我們還無(wú)法提交瘟栖,比如我這個(gè)分支bug要2天完成,但是我issue-404 bug需要5個(gè)小時(shí)內(nèi)完成谅阿。怎么辦呢半哟?還好,Git還提供了一個(gè)stash功能签餐,可以把當(dāng)前工作現(xiàn)場(chǎng) ”隱藏起來(lái)”寓涨,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作。如下:

? ?所以現(xiàn)在我可以通過(guò)創(chuàng)建issue-404分支來(lái)修復(fù)bug了贱田。

首先我們要確定在那個(gè)分支上修復(fù)bug缅茉,比如我現(xiàn)在是在主分支master上來(lái)修復(fù)的,現(xiàn)在我要在master分支上創(chuàng)建一個(gè)臨時(shí)分支男摧,演示如下:

修復(fù)完成后蔬墩,切換到master分支上,并完成合并耗拓,最后刪除issue-404分支拇颅。演示如下:

現(xiàn)在,我們回到dev分支上干活了乔询。

工作區(qū)是干凈的樟插,那么我們工作現(xiàn)場(chǎng)去哪里呢?我們可以使用命令 git stash list來(lái)查看下竿刁。如下:

工作現(xiàn)場(chǎng)還在黄锤,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下食拜,可以使用如下2個(gè)方法:

git stash apply恢復(fù)鸵熟,恢復(fù)后,stash內(nèi)容并不刪除负甸,你需要使用命令git stash drop來(lái)刪除流强。

另一種方式是使用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪除了痹届。

???????? 演示如下

八:多人協(xié)作。

當(dāng)你從遠(yuǎn)程庫(kù)克隆時(shí)候打月,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái)了队腐,并且遠(yuǎn)程庫(kù)的默認(rèn)名稱(chēng)是origin。

要查看遠(yuǎn)程庫(kù)的信息 使用 git remote

要查看遠(yuǎn)程庫(kù)的詳細(xì)信息 使用 git remote –v

如下演示:

一:推送分支:

????? 推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫(kù)中奏篙,推送時(shí)柴淘,要指定本地分支,這樣报破,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:

????? 使用命令 git push origin master

比如我現(xiàn)在的github上的readme.txt代碼如下:

本地的readme.txt代碼如下:

現(xiàn)在我想把本地更新的readme.txt代碼推送到遠(yuǎn)程庫(kù)中悠就,使用命令如下:

我們可以看到如上,推送成功充易,我們可以繼續(xù)來(lái)截圖github上的readme.txt內(nèi)容 如下:

可以看到 推送成功了梗脾,如果我們現(xiàn)在要推送到其他分支,比如dev分支上盹靴,我們還是那個(gè)命令 git push origin dev

那么一般情況下炸茧,那些分支要推送呢?

master分支是主分支稿静,因此要時(shí)刻與遠(yuǎn)程同步梭冠。

一些修復(fù)bug分支不需要推送到遠(yuǎn)程去,可以先合并到主分支上改备,然后把主分支master推送到遠(yuǎn)程去控漠。

二:抓取分支:

多人協(xié)作時(shí),大家都會(huì)往master分支上推送各自的修改⌒現(xiàn)在我們可以模擬另外一個(gè)同事盐捷,可以在另一臺(tái)電腦上(注意要把SSH key添加到github上)或者同一臺(tái)電腦上另外一個(gè)目錄克隆,新建一個(gè)目錄名字叫testgit2

但是我首先要把dev分支也要推送到遠(yuǎn)程去默勾,如下

接著進(jìn)入testgit2目錄碉渡,進(jìn)行克隆遠(yuǎn)程的庫(kù)到本地來(lái),如下:

現(xiàn)在目錄下生成有如下所示:

現(xiàn)在我們的小伙伴要在dev分支上做開(kāi)發(fā)母剥,就必須把遠(yuǎn)程的origin的dev分支到本地來(lái)滞诺,于是可以使用命令創(chuàng)建本地dev分支:git checkout? –b dev origin/dev

現(xiàn)在小伙伴們就可以在dev分支上做開(kāi)發(fā)了,開(kāi)發(fā)完成后把dev分支推送到遠(yuǎn)程庫(kù)時(shí)环疼。

如下:

小伙伴們已經(jīng)向origin/dev分支上推送了提交习霹,而我在我的目錄文件下也對(duì)同樣的文件同個(gè)地方作了修改,也試圖推送到遠(yuǎn)程庫(kù)時(shí)炫隶,如下:

由上面可知:推送失敗淋叶,因?yàn)槲业男』锇樽钚绿峤坏暮臀以噲D推送的有沖突,解決的辦法也很簡(jiǎn)單等限,上面已經(jīng)提示我們爸吮,先用git pull把最新的提交從origin/dev抓下來(lái),然后在本地合并望门,解決沖突形娇,再推送。

git pull也失敗了筹误,原因是沒(méi)有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接桐早,根據(jù)提示,設(shè)置dev和origin/dev的鏈接:如下:

這回git pull成功厨剪,但是合并有沖突哄酝,需要手動(dòng)解決,解決的方法和分支管理中的 解決沖突完全一樣祷膳。解決后陶衅,提交,再push:

我們可以先來(lái)看看readme.txt內(nèi)容了直晨。

現(xiàn)在手動(dòng)已經(jīng)解決完了搀军,我接在需要再提交,再push到遠(yuǎn)程庫(kù)里面去勇皇。如下所示:

因此:多人協(xié)作工作模式一般是這樣的:

首先罩句,可以試圖用git push origin branch-name推送自己的修改.

如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新早敛摘,需要先用git pull試圖合并门烂。

如果合并有沖突,則需要解決沖突兄淫,并在本地提交屯远。再用git push origin branch-name推送。

Git基本常用命令如下:

?? mkdir:???????? XX (創(chuàng)建一個(gè)空目錄 XX指目錄名)

?? pwd:????????? 顯示當(dāng)前目錄的路徑拖叙。

?? git init????????? 把當(dāng)前的目錄變成可以管理的git倉(cāng)庫(kù)氓润,生成隱藏.git文件。

?? git add XX?????? 把xx文件添加到暫存區(qū)去薯鳍。

?? git commit –m “XX”? 提交文件 –m 后面的是注釋咖气。

?? git status??????? 查看倉(cāng)庫(kù)狀態(tài)

?? git diff? XX????? 查看XX文件修改了那些內(nèi)容

?? git log????????? 查看歷史記錄

?? git reset? –hard HEAD^ 或者 git reset? –hard HEAD~ 回退到上一個(gè)版本

??????????????????????? (如果想回退到100個(gè)版本,使用git reset –hard HEAD~100 )

?? cat XX???????? 查看XX文件內(nèi)容

?? git reflog?????? 查看歷史記錄的版本號(hào)id

?? git checkout — XX? 把XX文件在工作區(qū)的修改全部撤銷(xiāo)挖滤。

?? git rm XX????????? 刪除XX文件

git remote add originhttps://github.com/tugenhua0707/testgit關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù)

?? git push –u(第一次要用-u 以后不需要) origin master 把當(dāng)前master分支推送到遠(yuǎn)程庫(kù)

git clonehttps://github.com/tugenhua0707/testgit從遠(yuǎn)程庫(kù)中克隆

? ?git checkout –b dev? 創(chuàng)建dev分支 并切換到dev分支上

? ?git branch? 查看當(dāng)前所有的分支

? ?git checkout master 切換回master分支

? ?git merge dev? ??在當(dāng)前的分支上合并dev分支

? ?git branch –d dev 刪除dev分支

? ?git branch name? 創(chuàng)建分支

? ?git stash 把當(dāng)前的工作隱藏起來(lái) 等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作

? ?git stash list 查看所有被隱藏的文件列表

? ?git stash apply 恢復(fù)被隱藏的文件崩溪,但是內(nèi)容不刪除

? ?git stash drop 刪除文件

? ?git stash pop 恢復(fù)文件的同時(shí) 也刪除文件

? ?git remote 查看遠(yuǎn)程庫(kù)的信息

? ?git remote –v 查看遠(yuǎn)程庫(kù)的詳細(xì)信息

? ?git push origin master? Git會(huì)把master分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斩松,隨后出現(xiàn)的幾起案子伶唯,更是在濱河造成了極大的恐慌,老刑警劉巖惧盹,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳幸,死亡現(xiàn)場(chǎng)離奇詭異瞪讼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)粹断,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)符欠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瓶埋,你說(shuō)我怎么就攤上這事希柿。” “怎么了养筒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵曾撤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我晕粪,道長(zhǎng)挤悉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任兵多,我火速辦了婚禮尖啡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剩膘。我一直安慰自己衅斩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布怠褐。 她就那樣靜靜地躺著畏梆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奈懒。 梳的紋絲不亂的頭發(fā)上奠涌,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音磷杏,去河邊找鬼溜畅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛极祸,可吹牛的內(nèi)容都是我干的慈格。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遥金,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浴捆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起稿械,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤选泻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體页眯,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯捕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窝撵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科阎。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忿族,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝌矛,我是刑警寧澤道批,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站入撒,受9級(jí)特大地震影響隆豹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茅逮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一璃赡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧献雅,春花似錦碉考、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至章钾,卻和暖如春墙贱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贱傀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工惨撇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人府寒。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓魁衙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親椰棘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纺棺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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