Git基礎(chǔ)
一:Git是什么影晓?
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)迷守。
二:SVN與Git的最主要的區(qū)別犬绒?
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的兑凿,而干活的時候凯力,用的都是自己的電腦茵瘾,所以首先要從中央服務(wù)器哪里得到最新的版本,然后干活咐鹤,干完后拗秘,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作祈惶,如果在局域網(wǎng)還可以雕旨,帶寬夠大,速度夠快捧请,如果在互聯(lián)網(wǎng)下凡涩,如果網(wǎng)速慢的話,就納悶了疹蛉。
Git是分布式版本控制系統(tǒng)活箕,那么它就沒有中央服務(wù)器的,每個人的電腦就是一個完整的版本庫可款,這樣育韩,工作的時候就不需要聯(lián)網(wǎng)了,因為版本都是在自己的電腦上闺鲸。既然每個人的電腦都有一個完整的版本庫筋讨,那多個人如何協(xié)作呢?比如說自己在電腦上改了文件A翠拣,其他人也在電腦上改了文件A版仔,這時,你們兩之間只需把各自的修改推送給對方误墓,就可以互相看到對方的修改了蛮粮。
三:在windows上如何安裝Git?
msysgit是 windows版的Git,如下:
需要從網(wǎng)上下載一個谜慌,然后進(jìn)行默認(rèn)安裝即可然想。安裝完成后,在開始菜單里面找到 "Git --> Git Bash",如下:
會彈出一個類似的命令窗口的東西欣范,就說明Git安裝成功变泄。如下:
安裝完成后,還需要最后一步設(shè)置恼琼,在命令行輸入如下:
因為Git是分布式版本控制系統(tǒng)妨蛹,所以需要填寫用戶名和郵箱作為一個標(biāo)識。
** 注意:**git config --global 參數(shù)晴竞,有了這個參數(shù)蛙卤,表示你這臺機(jī)器上所有的Git倉庫都會使用這個配置,當(dāng)然你也可以對某個倉庫指定的不同的用戶名和郵箱。
四:如何操作颤难?
一:創(chuàng)建版本庫神年。
什么是版本庫?版本庫又名倉庫行嗤,英文名repository,你可以簡單的理解一個目錄已日,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改栅屏,刪除飘千,Git都能跟蹤,以便任何時刻都可以追蹤歷史既琴,或者在將來某個時刻還可以將文件”還原”占婉。
所以創(chuàng)建一個版本庫也非常簡單,如下我是D盤 –> www下 目錄下新建一個testgit版本庫甫恩。
pwd 命令是用于顯示當(dāng)前的目錄逆济。
-
通過命令 git init 把這個目錄變成git可以管理的倉庫,如下:
這時候你當(dāng)前testgit目錄下會多了一個.git的目錄磺箕,這個目錄是Git來跟蹤管理版本的奖慌,沒事千萬不要手動亂改這個目錄里面的文件,否則松靡,會把git倉庫給破壞了简僧。如下:
- 把文件添加到版本庫中。
首先要明確下雕欺,所有的版本控制系統(tǒng)岛马,只能跟蹤文本文件的改動,比如txt文件屠列,網(wǎng)頁啦逆,所有程序的代碼等,Git也不列外笛洛,版本控制系統(tǒng)可以告訴你每次的改動夏志,但是圖片,視頻這些二進(jìn)制文件苛让,雖能也能由版本控制系統(tǒng)管理沟蔑,但沒法跟蹤文件的變化,只能把二進(jìn)制文件每次改動串起來狱杰,也就是知道圖片從1kb變成2kb瘦材,但是到底改了啥,版本控制也不知道仿畸。
- 把文件添加到版本庫中。
下面先看下demo如下演示:
我在版本庫testgit目錄下新建一個記事本文件 readme.txt 內(nèi)容如下:11111111
第一步:使用命令 git add readme.txt添加到暫存區(qū)里面去食棕。如下:
![](http://upload-images.jianshu.io/upload_images/1530254-3210f17df876ae97.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果和上面一樣,沒有任何提示,說明已經(jīng)添加成功了宣蠕。
第二步:用命令 git commit告訴Git,把文件提交到倉庫甥捺。
現(xiàn)在我們已經(jīng)提交了一個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)容织堂。
知道了對readme.txt文件做了什么修改后叠艳,我們可以放心的提交到倉庫了,提交修改和提交文件是一樣的2步(第一步是git add 第二步是:git commit)易阳。
如下:
二:版本回退:
如上附较,我們已經(jīng)學(xué)會了修改文件,現(xiàn)在我繼續(xù)對readme.txt文件進(jìn)行修改潦俺,再增加一行
內(nèi)容為33333333333333.繼續(xù)執(zhí)行命令如下:
現(xiàn)在我已經(jīng)對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)前的版本回退到上一個版本遏匆,要使用什么命令呢法挨?可以使用如下2種命令,第一種是:git reset --hard HEAD^ 那么如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推幅聘。那如果要回退到前100個版本的話凡纳,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可帝蒿。未回退之前的readme.txt內(nèi)容如下:
如果想回退到上一個版本的命令如下操作:
再來查看下 readme.txt內(nèi)容如下:通過命令cat readme.txt查看
可以看到荐糜,內(nèi)容已經(jīng)回退到上一個版本了。我們可以繼續(xù)使用git log 來查看下歷史記錄信息,如下:
我們看到 增加333333 內(nèi)容我們沒有看到了暴氏,但是現(xiàn)在我想回退到最新的版本延塑,如:有333333的內(nèi)容要如何恢復(fù)呢?我們可以通過版本號回退答渔,使用命令方法如下:
git reset --hard 版本號 关带,但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次命令行或者333內(nèi)容的版本號我并不知道呢?要如何知道增加3333內(nèi)容的版本號呢沼撕?可以通過如下命令即可獲取到版本號:git reflog 演示如下:
通過上面的顯示我們可以知道宋雏,增加內(nèi)容3333的版本號是 6fcfc89.我們現(xiàn)在可以命令
git reset --hard 6fcfc89來恢復(fù)了。演示如下:
可以看到 目前已經(jīng)是最新的版本了务豺。
三:理解工作區(qū)與暫存區(qū)的區(qū)別磨总?
工作區(qū):就是你在電腦上看到的目錄,比如目錄下testgit里的文件(.git隱藏目錄版本庫除外)笼沥◎窖啵或者以后需要再新建的目錄文件等等都屬于工作區(qū)范疇。
版本庫(Repository):工作區(qū)有一個隱藏目錄.git,這個不屬于工作區(qū)敬拓,這是版本庫邻薯。其中版本庫里面存了很多東西,其中最重要的就是stage(暫存區(qū))乘凸,還有Git為我們自動創(chuàng)建了第一個分支master,以及指向master的一個指針HEAD厕诡。
我們前面說過使用Git提交文件到版本庫有兩步:
第一步:是使用 git add 把文件添加進(jìn)去,實際上就是把文件添加到暫存區(qū)营勤。
第二步:使用git commit提交更改灵嫌,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上。
我們繼續(xù)使用demo來演示下:
我們在readme.txt再添加一行內(nèi)容為4444444葛作,接著在目錄下新建一個文件為test.txt 內(nèi)容為test寿羞,我們先用命令 git status來查看下狀態(tài),如下:
現(xiàn)在我們先使用git add 命令把2個文件都添加到暫存區(qū)中赂蠢,再使用git status來查看下狀態(tài)绪穆,如下:
接著我們可以使用git commit一次性提交到分支上,如下:
四:Git撤銷修改和刪除文件操作虱岂。
一:撤銷修改:
比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為555555555555玖院,我們先通過命令查看如下:
在我未提交之前,我發(fā)現(xiàn)添加5555555555555內(nèi)容有誤第岖,所以我得馬上恢復(fù)以前的版本难菌,現(xiàn)在我可以有如下幾種方法可以做修改:
第一:如果我知道要刪掉那些內(nèi)容的話,直接手動更改去掉那些需要的文件蔑滓,然后add添加到暫存區(qū)郊酒,最后commit掉遇绞。
第二:我可以按以前的方法直接恢復(fù)到上一個版本。使用 git reset --hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法燎窘,我想直接想使用撤銷命令該如何操作呢摹闽?首先在做撤銷之前,我們可以先用 git status 查看下當(dāng)前的狀態(tài)褐健。如下所示:
可以發(fā)現(xiàn)钩骇,Git會告訴你,git checkout -- file 可以丟棄工作區(qū)的修改铝量,如下命令:
git checkout -- readme.txt,如下所示:
命令 git checkout --readme.txt 意思就是,把readme.txt文件在工作區(qū)做的修改全部撤銷银亲,這里有2種情況慢叨,如下:
readme.txt自動修改后,還沒有放到暫存區(qū)务蝠,使用 撤銷修改就回到和版本庫一模一樣的狀態(tài)拍谐。
另外一種是readme.txt已經(jīng)放入暫存區(qū)了,接著又作了修改馏段,撤銷修改就回到添加暫存區(qū)后的狀態(tài)轩拨。
對于第二種情況,我想我們繼續(xù)做demo來看下院喜,假如現(xiàn)在我對readme.txt添加一行 內(nèi)容為6666666666666亡蓉,我git add 增加到暫存區(qū)后,接著添加內(nèi)容7777777喷舀,我想通過撤銷命令讓其回到暫存區(qū)后的狀態(tài)砍濒。如下所示:
注意:命令git checkout -- readme.txt 中的 -- 很重要,如果沒有 -- 的話硫麻,那么命令變成創(chuàng)建分支了爸邢。
二:刪除文件。
假如我現(xiàn)在版本庫testgit目錄添加一個文件b.txt,然后提交拿愧。如下:
如上:一般情況下杠河,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt 浇辜,如果我想徹底從版本庫中刪掉了此文件的話券敌,可以再執(zhí)行commit命令 提交掉,現(xiàn)在目錄是這樣的奢赂,
只要沒有commit之前陪白,如果我想在版本庫中恢復(fù)此文件如何操作呢?
可以使用如下命令 git checkout -- b.txt膳灶,如下所示:
再來看看我們testgit目錄咱士,添加了3個文件了立由。如下所示:
五:遠(yuǎn)程倉庫。
在了解之前序厉,先注冊github賬號锐膜,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設(shè)置:
第一步:創(chuàng)建SSH Key弛房。在用戶主目錄下道盏,看看有沒有.ssh目錄,如果有文捶,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件荷逞,如果有的話,直接跳過此如下命令粹排,如果沒有的話种远,打開命令行,輸入如下命令:
ssh-keygen -t rsa –C “youremail@example.com”, 由于我本地此前運行過一次顽耳,所以本地有坠敷,如下所示:
id_rsa是私鑰,不能泄露出去射富,id_rsa.pub是公鑰膝迎,可以放心地告訴任何人。
第二步:登錄github,打開” settings”中的SSH Keys頁面胰耗,然后點擊“Add SSH Key”,填上任意title限次,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容。
點擊 Add Key柴灯,你就應(yīng)該可以看到已經(jīng)添加的key掂恕。
如何添加遠(yuǎn)程庫?
現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個Git倉庫后弛槐,又想在github創(chuàng)建一個Git倉庫懊亡,并且希望這兩個倉庫進(jìn)行遠(yuǎn)程同步,這樣github的倉庫可以作為備份乎串,又可以其他人通過該倉庫來協(xié)作店枣。
首先,登錄github上叹誉,然后在右上角找到“create a new repo”創(chuàng)建一個新的倉庫鸯两。如下:
在Repository name填入testgit
,其他保持默認(rèn)設(shè)置长豁,點擊“Create repository”按鈕钧唐,就成功地創(chuàng)建了一個新的Git倉庫:
目前,在GitHub上的這個testgit
倉庫還是空的匠襟,GitHub告訴我們钝侠,可以從這個倉庫克隆出新的倉庫该园,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后帅韧,把本地倉庫的內(nèi)容推送到GitHub倉庫里初。
現(xiàn)在,我們根據(jù)GitHub的提示忽舟,在本地的testgit
倉庫下運行命令:
git remote add origin https://github.com/tugenhua0707/testgit.git
所有的如下:
把本地庫的內(nèi)容推送到遠(yuǎn)程双妨,使用 git push命令,實際上是把當(dāng)前分支master推送到遠(yuǎn)程叮阅。
由于遠(yuǎn)程庫是空的刁品,我們第一次推送master分支時,加上了 –u參數(shù)浩姥,Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支哑诊,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令及刻。推送成功后,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了竞阐,上面的要輸入github的用戶名和密碼如下所示:
從現(xiàn)在起缴饭,只要本地作了提交,就可以通過如下命令:
git push origin master
把本地master分支的最新修改推送到github上了桑涎,現(xiàn)在你就擁有了真正的分布式版本庫了蚜印。
-
如何從遠(yuǎn)程庫克掠昱颉?
上面我們了解了先有本地庫丢氢,后有遠(yuǎn)程庫時候,如何關(guān)聯(lián)遠(yuǎn)程庫先改。
現(xiàn)在我們想疚察,假如遠(yuǎn)程庫有新的內(nèi)容了,我想克隆到本地來 如何克隆呢仇奶?
首先貌嫡,登錄github,創(chuàng)建一個新的倉庫该溯,名字叫testgit2.如下:
如下岛抄,我們看到:
現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了狈茉,下一步是使用命令git clone克隆一個本地庫了夫椭。如下所示:
接著在我本地目錄下 生成testgit2目錄了,如下所示:
六:創(chuàng)建與合并分支氯庆。
在 版本回填退里蹭秋,你已經(jīng)知道扰付,每次提交,Git都把它們串成一條時間線感凤,這條時間線就是一個分支悯周。截止到目前,只有一條時間線陪竿,在Git里禽翼,這個分支叫主分支,即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查看分支咧叭,會列出所有的分支,當(dāng)前分支前面會添加一個星號烁竭。然后我們在dev分支上繼續(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
如何解決沖突?
下面我們還是一步一步來邢笙,先新建一個新分支啸如,比如名字叫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.分支管理策略呛牲。
通常合并分支時,git一般使用”Fast forward”模式懂牧,在這種模式下,刪除分支后尊勿,會丟掉分支信息僧凤,現(xiàn)在我們來使用帶參數(shù) –no-ff來禁用”Fast forward”模式。首先我們來做demo演示下:
創(chuàng)建一個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ā)中娃承,會經(jīng)常碰到bug問題奏夫,那么有了bug就需要修復(fù)怕篷,在Git中,分支是很強(qiáng)大的酗昼,每個bug都可以通過一個臨時分支來修復(fù)廊谓,修復(fù)完成后,合并分支麻削,然后將臨時的分支刪除掉蒸痹。
比如我在開發(fā)中接到一個404 bug時候,我們可以創(chuàng)建一個404分支來修復(fù)它碟婆,但是电抚,當(dāng)前的dev分支上的工作還沒有提交。比如如下:
并不是我不想提交竖共,而是工作進(jìn)行到一半時候蝙叛,我們還無法提交,比如我這個分支bug要2天完成公给,但是我issue-404 bug需要5個小時內(nèi)完成借帘。怎么辦呢?還好淌铐,Git還提供了一個stash功能肺然,可以把當(dāng)前工作現(xiàn)場 ”隱藏起來”,等以后恢復(fù)現(xiàn)場后繼續(xù)工作腿准。如下:
所以現(xiàn)在我可以通過創(chuàng)建issue-404分支來修復(fù)bug了际起。
首先我們要確定在那個分支上修復(fù)bug,比如我現(xiàn)在是在主分支master上來修復(fù)的吐葱,現(xiàn)在我要在master分支上創(chuàng)建一個臨時分支街望,演示如下:
修復(fù)完成后,切換到master分支上弟跑,并完成合并灾前,最后刪除issue-404分支。演示如下:
現(xiàn)在孟辑,我們回到dev分支上干活了哎甲。
工作區(qū)是干凈的,那么我們工作現(xiàn)場去哪里呢饲嗽?我們可以使用命令 git stash list來查看下炭玫。如下:
工作現(xiàn)場還在,Git把stash內(nèi)容存在某個地方了貌虾,但是需要恢復(fù)一下础嫡,可以使用如下2個方法:
git stash apply恢復(fù),恢復(fù)后,stash內(nèi)容并不刪除榴鼎,你需要使用命令git stash drop來刪除伯诬。
另一種方式是使用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪除了。
演示如下
八:多人協(xié)作巫财。
當(dāng)你從遠(yuǎn)程庫克隆時候盗似,實際上Git自動把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了,并且遠(yuǎn)程庫的默認(rèn)名稱是origin平项。
要查看遠(yuǎn)程庫的信息 使用 git remote
要查看遠(yuǎn)程庫的詳細(xì)信息 使用 git remote –v
如下演示:
一:推送分支:
推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫中赫舒,推送時,要指定本地分支闽瓢,這樣接癌,Git就會把該分支推送到遠(yuǎn)程庫對應(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分支上荔燎,我們還是那個命令 git push origin dev
那么一般情況下,那些分支要推送呢销钝?
master分支是主分支有咨,因此要時刻與遠(yuǎn)程同步。
一些修復(fù)bug分支不需要推送到遠(yuǎn)程去蒸健,可以先合并到主分支上座享,然后把主分支master推送到遠(yuǎn)程去。
二:抓取分支:
多人協(xié)作時似忧,大家都會往master分支上推送各自的修改≡眩現(xiàn)在我們可以模擬另外一個同事,可以在另一臺電腦上(注意要把SSH key添加到github上)或者同一臺電腦上另外一個目錄克隆橡娄,新建一個目錄名字叫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)程庫時。
如下:
小伙伴們已經(jīng)向origin/dev分支上推送了提交埂材,而我在我的目錄文件下也對同樣的文件同個地方作了修改塑顺,也試圖推送到遠(yuǎn)程庫時,如下:
由上面可知:推送失敗,因為我的小伙伴最新提交的和我試圖推送的有沖突严拒,解決的辦法也很簡單扬绪,上面已經(jīng)提示我們,先用git pull把最新的提交從origin/dev抓下來裤唠,然后在本地合并挤牛,解決沖突,再推送种蘸。
git pull也失敗了墓赴,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示航瞭,設(shè)置dev和origin/dev的鏈接:如下:
這回git pull成功诫硕,但是合并有沖突,需要手動解決刊侯,解決的方法和分支管理中的 解決沖突完全一樣章办。解決后,提交滔吠,再push:
我們可以先來看看readme.txt內(nèi)容了纲菌。
現(xiàn)在手動已經(jīng)解決完了,我接在需要再提交疮绷,再push到遠(yuǎn)程庫里面去翰舌。如下所示:
因此:多人協(xié)作工作模式一般是這樣的:
首先,可以試圖用git push origin branch-name推送自己的修改.
如果推送失敗冬骚,則因為遠(yuǎn)程分支比你的本地更新早椅贱,需要先用git pull試圖合并。
如果合并有沖突只冻,則需要解決沖突庇麦,并在本地提交。再用git push origin branch-name推送喜德。