一:Git是什么?
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)心褐。
二:SVN與Git的最主要的區(qū)別舔涎?
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的逗爹,而干活的時(shí)候亡嫌,用的都是自己的電腦,所以首先要從中央服務(wù)器哪里得到最新的版本掘而,然后干活挟冠,干完后,需要把自己做完的活推送到中央服務(wù)器袍睡。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作知染,如果在局域網(wǎng)還可以,帶寬夠大斑胜,速度夠快控淡,如果在互聯(lián)網(wǎng)下,如果網(wǎng)速慢的話止潘,就納悶了逸寓。
Git是分布式版本控制系統(tǒng),那么它就沒有中央服務(wù)器的覆山,每個(gè)人的電腦就是一個(gè)完整的版本庫,這樣泥栖,工作的時(shí)候就不需要聯(lián)網(wǎng)了簇宽,因?yàn)榘姹径际窃谧约旱碾娔X上。既然每個(gè)人的電腦都有一個(gè)完整的版本庫吧享,那多個(gè)人如何協(xié)作呢魏割?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A钢颂,這時(shí)钞它,你們兩之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
三:在windows上如何安裝Git遭垛?
msysgit是 windows版的Git,如下:
需要從網(wǎng)上下載一個(gè)尼桶,然后進(jìn)行默認(rèn)安裝即可。安裝完成后锯仪,在開始菜單里面找到 “Git –> Git Bash”,如下:
會(huì)彈出一個(gè)類似的命令窗口的東西泵督,就說明Git安裝成功。如下:
安裝完成后庶喜,還需要最后一步設(shè)置小腊,在命令行輸入如下:
因?yàn)镚it是分布式版本控制系統(tǒng),所以需要填寫用戶名和郵箱作為一個(gè)標(biāo)識(shí)久窟。
** 注意:**git config –global 參數(shù)秩冈,有了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉庫都會(huì)使用這個(gè)配置斥扛,當(dāng)然你也可以對(duì)某個(gè)倉庫指定的不同的用戶名和郵箱入问。
四:如何操作?
一:創(chuàng)建版本庫犹赖。
什么是版本庫队他?版本庫又名倉庫,英文名repository,你可以簡(jiǎn)單的理解一個(gè)目錄峻村,這個(gè)目錄里面的所有文件都可以被Git管理起來麸折,每個(gè)文件的修改,刪除粘昨,Git都能跟蹤垢啼,以便任何時(shí)刻都可以追蹤歷史,或者在將來某個(gè)時(shí)刻還可以將文件”還原”张肾。
所以創(chuàng)建一個(gè)版本庫也非常簡(jiǎn)單芭析,如下我是D盤 –> www下 目錄下新建一個(gè)testgit版本庫。
pwd 命令是用于顯示當(dāng)前的目錄吞瞪。
1. 通過命令 git init 把這個(gè)目錄變成git可以管理的倉庫馁启,如下:
這時(shí)候你當(dāng)前testgit目錄下會(huì)多了一個(gè).git的目錄,這個(gè)目錄是Git來跟蹤管理版本的芍秆,沒事千萬不要手動(dòng)亂改這個(gè)目錄里面的文件惯疙,否則,會(huì)把git倉庫給破壞了妖啥。如下:
- 把文件添加到版本庫中霉颠。
首先要明確下,所有的版本控制系統(tǒng)荆虱,只能跟蹤文本文件的改動(dòng)蒿偎,比如txt文件朽们,網(wǎng)頁,所有程序的代碼等诉位,Git也不列外骑脱,版本控制系統(tǒng)可以告訴你每次的改動(dòng),但是圖片不从,視頻這些二進(jìn)制文件惜姐,雖能也能由版本控制系統(tǒng)管理,但沒法跟蹤文件的變化椿息,只能把二進(jìn)制文件每次改動(dòng)串起來歹袁,也就是知道圖片從1kb變成2kb,但是到底改了啥寝优,版本控制也不知道条舔。
** 下面先看下****demo****如下演示:**
我在版本庫testgit目錄下新建一個(gè)記事本文件 readme.txt 內(nèi)容如下:11111111
第一步:使用命令 git add readme.txt添加到暫存區(qū)里面去。如下:
如果和上面一樣乏矾,沒有任何提示孟抗,說明已經(jīng)添加成功了。
第二步:用命令 git commit告訴Git钻心,把文件提交到倉庫凄硼。
現(xiàn)在我們已經(jīng)提交了一個(gè)readme.txt文件了,我們下面可以通過命令git status來查看是否還有文件未提交捷沸,如下:
說明沒有任何文件未提交摊沉,但是我現(xiàn)在繼續(xù)來改下readme.txt內(nèi)容,比如我在下面添加一行2222222222內(nèi)容痒给,繼續(xù)使用git status來查看下結(jié)果说墨,如下:
上面的命令告訴我們 readme.txt文件已被修改,但是未被提交的修改苍柏。
接下來我想看下readme.txt文件到底改了什么內(nèi)容尼斧,如何查看呢?可以使用如下命令:
git diff readme.txt 如下:
如上可以看到试吁,readme.txt文件內(nèi)容從一行11111111改成 二行 添加了一行22222222內(nèi)容棺棵。
知道了對(duì)readme.txt文件做了什么修改后,我們可以放心的提交到倉庫了熄捍,提交修改和提交文件是一樣的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.如果嫌上面顯示的信息太多的話,我們可以使用命令 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è)版本的命令如下操作:
再來查看下 readme.txt內(nèi)容如下:通過命令cat readme.txt查看
可以看到,內(nèi)容已經(jīng)回退到上一個(gè)版本了桐罕。我們可以繼續(xù)使用git log 來查看下歷史記錄信息脉让,如下:
我們看到 增加333333 內(nèi)容我們沒有看到了,但是現(xiàn)在我想回退到最新的版本功炮,如:有333333的內(nèi)容要如何恢復(fù)呢溅潜?我們可以通過版本號(hào)回退,使用命令方法如下:
git reset –hard 版本號(hào) 薪伏,但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次命令行或者333內(nèi)容的版本號(hào)我并不知道呢滚澜?要如何知道增加3333內(nèi)容的版本號(hào)呢?可以通過如下命令即可獲取到版本號(hào):git reflog 演示如下:
通過上面的顯示我們可以知道毅该,增加內(nèi)容3333的版本號(hào)是 6fcfc89.我們現(xiàn)在可以命令
git reset –hard 6fcfc89來恢復(fù)了博秫。演示如下:
可以看到 目前已經(jīng)是最新的版本了。
三:理解工作區(qū)與暫存區(qū)的區(qū)別眶掌?
工作區(qū):就是你在電腦上看到的目錄挡育,比如目錄下testgit里的文件(.git隱藏目錄版本庫除外)∑优溃或者以后需要再新建的目錄文件等等都屬于工作區(qū)范疇即寒。
** 版本庫****(Repository)****:**工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不屬于工作區(qū),這是版本庫召噩。其中版本庫里面存了很多東西母赵,其中最重要的就是stage(暫存區(qū)),還有Git為我們自動(dòng)創(chuàng)建了第一個(gè)分支master,以及指向master的一個(gè)指針HEAD具滴。
我們前面說過使用Git提交文件到版本庫有兩步:
第一步:是使用 git add 把文件添加進(jìn)去凹嘲,實(shí)際上就是把文件添加到暫存區(qū)。
第二步:使用git commit提交更改构韵,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上周蹭。
我們繼續(xù)使用demo來演示下:
我們?cè)趓eadme.txt再添加一行內(nèi)容為4444444趋艘,接著在目錄下新建一個(gè)文件為test.txt 內(nèi)容為test,我們先用命令 git status來查看下狀態(tài)凶朗,如下:
現(xiàn)在我們先使用git add 命令把2個(gè)文件都添加到暫存區(qū)中瓷胧,再使用git status來查看下狀態(tài),如下:
接著我們可以使用git commit一次性提交到分支上棚愤,如下:
四:Git撤銷修改和刪除文件操作搓萧。
一:撤銷修改:
比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為555555555555,我們先通過命令查看如下:
在我未提交之前宛畦,我發(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種情況,如下:
readme.txt自動(dòng)修改后怕敬,還沒有放到暫存區(qū)揣炕,使用 撤銷修改就回到和版本庫一模一樣的狀態(tài)。
另外一種是readme.txt已經(jīng)放入暫存區(qū)了东跪,接著又作了修改畸陡,撤銷修改就回到添加暫存區(qū)后的狀態(tài)。
對(duì)于第二種情況虽填,我想我們繼續(xù)做demo來看下丁恭,假如現(xiàn)在我對(duì)readme.txt添加一行 內(nèi)容為6666666666666,我git add 增加到暫存區(qū)后斋日,接著添加內(nèi)容7777777牲览,我想通過撤銷命令讓其回到暫存區(qū)后的狀態(tài)。如下所示:
注意:命令git checkout — readme.txt 中的 — 很重要恶守,如果沒有 — 的話竭恬,那么命令變成創(chuàng)建分支了跛蛋。
二:刪除文件。
假如我現(xiàn)在版本庫testgit目錄添加一個(gè)文件b.txt,然后提交痊硕。如下:
如上:一般情況下,可以直接在文件目錄中把文件刪了押框,或者使用如上rm命令:rm b.txt 岔绸,如果我想徹底從版本庫中刪掉了此文件的話,可以再執(zhí)行commit命令 提交掉橡伞,現(xiàn)在目錄是這樣的盒揉,
只要沒有commit之前,如果我想在版本庫中恢復(fù)此文件如何操作呢兑徘?
可以使用如下命令 git checkout — b.txt刚盈,如下所示:
再來看看我們testgit目錄,添加了3個(gè)文件了挂脑。如下所示:
五:遠(yuǎn)程倉庫藕漱。
在了解之前,先注冊(cè)github賬號(hào)崭闲,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的肋联,所以需要一點(diǎn)設(shè)置:
第一步:創(chuàng)建SSH Key。在用戶主目錄下刁俭,看看有沒有.ssh目錄橄仍,如果有,再看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件牍戚,如果有的話侮繁,直接跳過此如下命令,如果沒有的話如孝,打開命令行宪哩,輸入如下命令:
ssh-keygen -t rsa –C “youremail@example.com”, 由于我本地此前運(yùn)行過一次,所以本地有暑竟,如下所示:
id_rsa是私鑰斋射,不能泄露出去,id_rsa.pub是公鑰但荤,可以放心地告訴任何人罗岖。
第二步:登錄github,打開” 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)程庫哑了?
現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個(gè)Git倉庫后赘方,又想在github創(chuàng)建一個(gè)Git倉庫,并且希望這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步弱左,這樣github的倉庫可以作為備份窄陡,又可以其他人通過該倉庫來協(xié)作。
首先拆火,登錄github上跳夭,然后在右上角找到“create a new repo”創(chuàng)建一個(gè)新的倉庫。如下:
在Repository name填入testgit
们镜,其他保持默認(rèn)設(shè)置币叹,點(diǎn)擊“Create repository”按鈕,就成功地創(chuàng)建了一個(gè)新的Git倉庫:
目前模狭,在GitHub上的這個(gè)testgit
倉庫還是空的颈抚,GitHub告訴我們勃黍,可以從這個(gè)倉庫克隆出新的倉庫宋舷,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián)谬运,然后纱烘,把本地倉庫的內(nèi)容推送到GitHub倉庫涤伐。
現(xiàn)在欣舵,我們根據(jù)GitHub的提示葱轩,在本地的testgit
倉庫下運(yùn)行命令:
git remote add origin https://github.com/tugenhua0707/testgit.git
所有的如下:
把本地庫的內(nèi)容推送到遠(yuǎn)程屠阻,使用 git push命令宴树,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程策菜。
由于遠(yuǎn)程庫是空的,我們第一次推送master分支時(shí)酒贬,加上了 –u參數(shù)又憨,Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來锭吨,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令蠢莺。推送成功后,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了零如,上面的要輸入github的用戶名和密碼如下所示:
從現(xiàn)在起躏将,只要本地作了提交,就可以通過如下命令:
git push origin master
把本地master分支的最新修改推送到github上了考蕾,現(xiàn)在你就擁有了真正的分布式版本庫了祸憋。
- 如何從遠(yuǎn)程庫克隆肖卧?
上面我們了解了先有本地庫蚯窥,后有遠(yuǎn)程庫時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫。
現(xiàn)在我們想拦赠,假如遠(yuǎn)程庫有新的內(nèi)容了巍沙,我想克隆到本地來 如何克隆呢?
首先荷鼠,登錄github句携,創(chuàng)建一個(gè)新的倉庫,名字叫testgit2.如下:
如下允乐,我們看到:
現(xiàn)在务甥,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是使用命令git clone克隆一個(gè)本地庫了喳篇。如下所示:
接著在我本地目錄下 生成testgit2目錄了,如下所示:
六:創(chuàng)建與合并分支态辛。
在 版本回填退里麸澜,你已經(jīng)知道,每次提交奏黑,Git都把它們串成一條時(shí)間線炊邦,這條時(shí)間線就是一個(gè)分支。截止到目前熟史,只有一條時(shí)間線馁害,在Git里,這個(gè)分支叫主分支蹂匹,即master分支碘菜。HEAD嚴(yán)格來說不是指向提交,而是指向master限寞,master才是指向提交的忍啸,所以,HEAD指向的就是當(dāng)前分支履植。
首先计雌,我們來創(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
首先我們先來查看下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
如何解決沖突拯啦?
下面我們還是一步一步來澡匪,先新建一個(gè)新分支,比如名字叫fenzhi1褒链,在readme.txt添加一行內(nèi)容8888888唁情,然后提交,如下所示:
同樣甫匹,我們現(xiàn)在切換到master分支上來甸鸟,也在最后一行添加內(nèi)容,內(nèi)容為99999999赛惩,如下所示:
現(xiàn)在我們需要在master分支上來合并fenzhi1哀墓,如下操作:
Git用<<<<<<<,=======喷兼,>>>>>>>標(biāo)記出不同分支的內(nèi)容篮绰,其中<<<HEAD是指主分支修改的內(nèi)容,>>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容季惯,我們可以修改下如下后保存:
如果我想查看分支合并的情況的話吠各,需要使用命令 git log.命令行演示如下:
3.分支管理策略。
通常合并分支時(shí)勉抓,git一般使用”Fast forward”模式贾漏,在這種模式下,刪除分支后藕筋,會(huì)丟掉分支信息纵散,現(xiàn)在我們來使用帶參數(shù) –no-ff來禁用”Fast forward”模式。首先我們來做demo演示下:
創(chuàng)建一個(gè)dev分支。
修改readme.txt內(nèi)容伍掀。
添加到暫存區(qū)掰茶。
切換回主分支(master)。
合并dev分支蜜笤,使用命令 git merge –no-ff -m “注釋” dev
查看歷史記錄
截圖如下:
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的濒蒋,也就是用來發(fā)布新版本,一般情況下不允許在上面干活把兔,干活一般情況下在新建的dev分支上干活沪伙,干完后,比如上要發(fā)布县好,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來围橡。
七:bug分支:
在開發(fā)中,會(huì)經(jīng)常碰到bug問題缕贡,那么有了bug就需要修復(fù)某饰,在Git中,分支是很強(qiáng)大的善绎,每個(gè)bug都可以通過一個(gè)臨時(shí)分支來修復(fù),修復(fù)完成后诫尽,合并分支禀酱,然后將臨時(shí)的分支刪除掉。
比如我在開發(fā)中接到一個(gè)404 bug時(shí)候牧嫉,我們可以創(chuàng)建一個(gè)404分支來修復(fù)它剂跟,但是,當(dāng)前的dev分支上的工作還沒有提交酣藻。比如如下:
并不是我不想提交曹洽,而是工作進(jìn)行到一半時(shí)候,我們還無法提交辽剧,比如我這個(gè)分支bug要2天完成送淆,但是我issue-404 bug需要5個(gè)小時(shí)內(nèi)完成。怎么辦呢怕轿?還好偷崩,Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場(chǎng) ”隱藏起來”撞羽,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作阐斜。如下:
所以現(xiàn)在我可以通過創(chuàng)建issue-404分支來修復(fù)bug了。
首先我們要確定在那個(gè)分支上修復(fù)bug诀紊,比如我現(xiàn)在是在主分支master上來修復(fù)的谒出,現(xiàn)在我要在master分支上創(chuàng)建一個(gè)臨時(shí)分支,演示如下:
修復(fù)完成后,切換到master分支上笤喳,并完成合并为居,最后刪除issue-404分支。演示如下:
現(xiàn)在莉测,我們回到dev分支上干活了颜骤。
工作區(qū)是干凈的,那么我們工作現(xiàn)場(chǎng)去哪里呢捣卤?我們可以使用命令 git stash list來查看下忍抽。如下:
工作現(xiàn)場(chǎng)還在,Git把stash內(nèi)容存在某個(gè)地方了董朝,但是需要恢復(fù)一下鸠项,可以使用如下2個(gè)方法:
git stash apply恢復(fù),恢復(fù)后子姜,stash內(nèi)容并不刪除祟绊,你需要使用命令git stash drop來刪除。
另一種方式是使用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪除了哥捕。
演示如下
八:多人協(xié)作牧抽。
當(dāng)你從遠(yuǎn)程庫克隆時(shí)候,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來了遥赚,并且遠(yuǎn)程庫的默認(rèn)名稱是origin扬舒。
要查看遠(yuǎn)程庫的信息 使用 git remote
要查看遠(yuǎn)程庫的詳細(xì)信息 使用 git remote –v
如下演示:
一:推送分支:
推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫中,推送時(shí)凫佛,要指定本地分支讲坎,這樣,Git就會(huì)把該分支推送到遠(yuǎn)程庫對(duì)應(yīng)的遠(yuǎn)程分支上:
使用命令 git push origin master
比如我現(xiàn)在的github上的readme.txt代碼如下:
本地的readme.txt代碼如下:
現(xiàn)在我想把本地更新的readme.txt代碼推送到遠(yuǎn)程庫中愧薛,使用命令如下:
我們可以看到如上晨炕,推送成功,我們可以繼續(xù)來截圖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)程的庫到本地來觉吭,如下:
現(xiàn)在目錄下生成有如下所示:
現(xiàn)在我們的小伙伴要在dev分支上做開發(fā)腾供,就必須把遠(yuǎn)程的origin的dev分支到本地來,于是可以使用命令創(chuàng)建本地dev分支:git checkout –b dev origin/dev
現(xiàn)在小伙伴們就可以在dev分支上做開發(fā)了鲜滩,開發(fā)完成后把dev分支推送到遠(yuǎn)程庫時(shí)伴鳖。
如下:
小伙伴們已經(jīng)向origin/dev分支上推送了提交,而我在我的目錄文件下也對(duì)同樣的文件同個(gè)地方作了修改徙硅,也試圖推送到遠(yuǎn)程庫時(shí)榜聂,如下:
由上面可知:推送失敗,因?yàn)槲业男』锇樽钚绿峤坏暮臀以噲D推送的有沖突嗓蘑,解決的辦法也很簡(jiǎn)單须肆,上面已經(jīng)提示我們,先用git pull把最新的提交從origin/dev抓下來桩皿,然后在本地合并豌汇,解決沖突,再推送泄隔。
git pull也失敗了瘤礁,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示梅尤,設(shè)置dev和origin/dev的鏈接:如下:
這回git pull成功,但是合并有沖突岩调,需要手動(dòng)解決巷燥,解決的方法和分支管理中的 解決沖突完全一樣。解決后号枕,提交缰揪,再push:
我們可以先來看看readme.txt內(nèi)容了。
現(xiàn)在手動(dòng)已經(jīng)解決完了葱淳,我接在需要再提交钝腺,再push到遠(yuǎn)程庫里面去。如下所示:
因此:多人協(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倉庫,生成隱藏.git文件刮便。
git add XX 把xx文件添加到暫存區(qū)去空猜。
git commit –m “XX” 提交文件 –m 后面的是注釋。
git status 查看倉庫狀態(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ū)的修改全部撤銷辈毯。
git rm XX 刪除XX文件
git remote add origin https://github.com/tugenhua0707/testgit 關(guān)聯(lián)一個(gè)遠(yuǎn)程庫
git push –u(第一次要用-u 以后不需要) origin master 把當(dāng)前master分支推送到遠(yuǎn)程庫
git clone https://github.com/tugenhua0707/testgit 從遠(yuǎn)程庫中克隆
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)前的工作隱藏起來 等以后恢復(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)程庫的信息
git remote –v 查看遠(yuǎn)程庫的詳細(xì)信息
git push origin master Git會(huì)把master分支推送到遠(yuǎn)程庫對(duì)應(yīng)的遠(yuǎn)程分支上
原文出處: 涂根華的博客