16a197f8c92518dafaa64a185d138fb.png
一、Git是什么老玛? Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)脯颜。
工作原理 / 流程:
image
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
Remote:遠(yuǎn)程倉(cāng)庫(kù)
二、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)速慢的話耸别,就納悶了健芭。
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碗殷?
安裝完成后精绎,還需要最后一步設(shè)置速缨,在命令行輸入如下:
因?yàn)镚it是分布式版本控制系統(tǒng),所以需要填寫用戶名和郵箱作為一個(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ù)指定的不同的用戶名和郵箱寓娩。
四、如何操作堕仔?
1. 創(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盤 –> www下 目錄下新建一個(gè)testgit版本庫(kù)。
pwd 命令是用于顯示當(dāng)前的目錄轨功。
通過(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ù)給破壞了蒿褂。如下:
下面先看下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文件已被修改析砸,但是未被提交的修改。
把文件添加到版本庫(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,但是到底改了啥斥季,版本控制也不知道训桶。
接下來(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)置侍。
如下:2. 版本回退:
如上,我們已經(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.如果嫌上面顯示的信息太多的話,我們可以使用命令 git log –pretty=oneline 演示如下:
現(xiàn)在我想使用版本回退操作搞糕,我想把當(dāng)前的版本回退到上一個(gè)版本勇吊,要使用什么命令呢?可以使用如下2種命令窍仰,第一種是:git reset --hard HEAD^ 那么如果要回退到上上個(gè)版本只需把HEAD^ 改成 HEAD^^ 以此類推汉规。那如果要回退到前100個(gè)版本的話,使用上面的方法肯定不方便辈赋,我們可以使用下面的簡(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)是最新的版本了锯玛。
3. 理解工作區(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一次性提交到分支上赁还,如下:
4. Git撤銷修改和刪除文件操作。 1. 撤銷修改:
比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為555555555555驹沿,我們先通過(guò)命令查看如下:
在我未提交之前艘策,我發(fā)現(xiàn)添加5555555555555內(nèi)容有誤,所以我得馬上恢復(fù)以前的版本渊季,現(xiàn)在我可以有如下幾種方法可以做修改:
第一:如果我知道要?jiǎng)h掉那些內(nèi)容的話朋蔫,直接手動(dòng)更改去掉那些需要的文件,然后add添加到暫存區(qū)却汉,最后commit掉驯妄。
第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本。使用 git reset --hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法合砂,我想直接想使用撤銷命令該如何操作呢青扔?首先在做撤銷之前,我們可以先用 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ū)做的修改全部撤銷,這里有2種情況轻姿,如下:
1.readme.txt自動(dòng)修改后犁珠,還沒(méi)有放到暫存區(qū)傅瞻,使用 撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài)。
2.另外一種是readme.txt已經(jīng)放入暫存區(qū)了盲憎,接著又作了修改嗅骄,撤銷修改就回到添加暫存區(qū)后的狀態(tài)。 對(duì)于第二種情況饼疙,我想我們繼續(xù)做demo來(lái)看下溺森,假如現(xiàn)在我對(duì)readme.txt添加一行 內(nèi)容為6666666666666,我git add 增加到暫存區(qū)后窑眯,接著添加內(nèi)容7777777屏积,我想通過(guò)撤銷命令讓其回到暫存區(qū)后的狀態(tài)。如下所示:
注意:命令git checkout -- readme.txt 中的 -- 很重要磅甩,如果沒(méi)有 -- 的話炊林,那么命令變成創(chuàng)建分支了。
2. 刪除文件卷要。
假如我現(xiàn)在版本庫(kù)testgit目錄添加一個(gè)文件b.txt,然后提交渣聚。如下:
如上:一般情況下,可以直接在文件目錄中把文件刪了僧叉,或者使用如上rm命令:rm b.txt 奕枝,如果我想徹底從版本庫(kù)中刪掉了此文件的話,可以再執(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壹置。在用戶主目錄下竞思,看看有沒(méi)有.ssh目錄,如果有钞护,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件盖喷,如果有的話,直接跳過(guò)此如下命令难咕,如果沒(méi)有的話课梳,打開(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盅抚。
1. 如何添加遠(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ù):
<pre style="margin: 0px 0.5em; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; color: rgb(51, 51, 51); font-size: 17px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: 0.544px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
目前升筏,在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ù)灵汪。
</pre>
現(xiàn)在,我們根據(jù)GitHub的提示柑潦,在本地的testgit倉(cāng)庫(kù)下運(yùn)行命令:
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; background: none;">
git remote add origin https://github.com/tugenhua0707/testgit.git
</pre>
所有的如下:
把本地庫(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的用戶名和密碼如下所示:
從現(xiàn)在起,只要本地作了提交侦讨,就可以通過(guò)如下命令:
git push origin master
把本地master分支的最新修改推送到github上了被盈,現(xiàn)在你就擁有了真正的分布式版本庫(kù)了。
六搭伤、創(chuàng)建與合并分支
在 版本回填退里只怎,你已經(jīng)知道,每次提交怜俐,Git都把它們串成一條時(shí)間線身堡,這條時(shí)間線就是一個(gè)分支。截止到目前拍鲤,只有一條時(shí)間線贴谎,在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)容,其中<<<HEAD是指主分支修改的內(nèi)容凤瘦,>>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容宿礁,我們可以修改下如下后保存:
如果我想查看分支合并的情況的話,需要使用命令 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è)方法:
1.git stash apply恢復(fù)网沾,恢復(fù)后,stash內(nèi)容并不刪除蕊爵,你需要使用命令git stash drop來(lái)刪除辉哥。
2.另一種方式是使用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)名稱是origin会放。
要查看遠(yuǎn)程庫(kù)的信息 使用 git remote
要查看遠(yuǎn)程庫(kù)的詳細(xì)信息 使用 git remote –v
如下演示:
1. 推送分支:
推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫(kù)中饲齐,推送時(shí),要指定本地分支咧最,這樣捂人,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:使用命令 git push origin master
現(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)程去。
2. 抓取分支:
多人協(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推送拆檬。