還是老規(guī)矩醉鳖,這篇看完后,還是學(xué)不會git版本控制的哮内,你來砍我
是兄弟就來砍我吧5量谩W尘隆!
Git是分布式版本控制系統(tǒng)纹因,那么它就沒有中央服務(wù)器的喷屋,每個人的電腦就是一個完整的版本庫,這樣瞭恰,工作的時候就不 需要聯(lián)網(wǎng)了屯曹,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫惊畏,那多個人如何協(xié)作呢恶耽?比如說自己在電腦上改了文件A,其他人也在電腦上 改了文件A颜启,這時偷俭,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了缰盏。
一:Git是什么涌萤?
? ? ? ?Git是目前世界上最先進的分布式版本控制系統(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)上下載一個,然后進行默認安裝即可流纹。安裝完成后谎砾,在開始菜單里面找到 “Git –> Git Bash”,如下:
會彈出一個類似的命令窗口的東西,就說明Git安裝成功捧颅。如下:
安裝完成后,還需要最后一步設(shè)置较雕,在命令行輸入如下:
最后輸入git config --list后碉哑,如果最后兩行的信息和你之前輸入的一模一樣,OK那就完成了git的初始化操作
? 因為Git是分布式版本控制系統(tǒng)亮蒋,所以需要填寫用戶名和郵箱作為一個標識扣典。
? ?注意:git config? –global 參數(shù),有了這個參數(shù)慎玖,表示你這臺機器上所有的Git倉庫都會使用這個配置贮尖,當然你也可以對某個倉庫指定的不同的用戶名和郵箱。
四:如何操作趁怔?
? ? ?一:創(chuàng)建版本庫湿硝。
? ? ?什么是版本庫?版本庫又名倉庫润努,英文名repository,你可以簡單的理解一個目錄关斜,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改铺浇,刪除痢畜,Git都能跟蹤,以便任何時刻都可以追蹤歷史鳍侣,或者在將來某個時刻還可以將文件”還原”丁稀。
? ? 所以創(chuàng)建一個版本庫也非常簡單,如下我是V盤 下 目錄下新建一個Z6T版本庫倚聚。
pwd 命令是用于顯示當前的目錄线衫。
? ? ? 1. 通過命令 git init 把這個目錄變成git可以管理的倉庫,如下:
? ? ?這時候你當前testgit目錄下會多了一個.git的目錄秉沼,這個目錄是Git來跟蹤管理版本的桶雀,沒事千萬不要手動亂改這個目錄里面的文件矿酵,否則,會把git倉庫給破壞了矗积。如下:
? ? ??2. 把文件添加到版本庫中全肮。
? ? ? ? ? 首先要明確下,所有的版本控制系統(tǒng)棘捣,只能跟蹤文本文件的改動辜腺,比如txt文件,網(wǎng)頁乍恐,所有程序的代碼等评疗,Git也不列外,版本控制系統(tǒng)可以告訴你每次的改 動茵烈,但是圖片百匆,視頻這些二進制文件,雖能也能由版本控制系統(tǒng)管理呜投,但沒法跟蹤文件的變化加匈,只能把二進制文件每次改動串起來,也就是知道圖片從1kb變成 2kb仑荐,但是到底改了啥雕拼,版本控制也不知道。
? ??下面先看下demo如下演示:
? ? ?我在版本庫Z6T目錄下新建一個記事本文件 readme.txt 內(nèi)容如下:
? ? ?第一步:使用命令 git add readme.txt添加到暫存區(qū)里面去粘招。如下:
? ?如果和上面一樣啥寇,沒有任何提示,說明已經(jīng)添加成功了洒扎。
? ?第二步:用命令 git commit告訴Git辑甜,把文件提交到倉庫。
??現(xiàn)在我們已經(jīng)提交了一個readme.txt文件了袍冷,我們下面可以通過命令git status來查看是否還有文件未提交栈戳,如下:
?說明沒有任何文件未提交,但是我現(xiàn)在繼續(xù)來改下readme.txt內(nèi)容难裆,比如我在下面添加一行內(nèi)容
繼續(xù)使用git status來查看下結(jié)果子檀,如下:
上面的命令告訴我們 readme.txt文件已被修改,但是未被提交的修改乃戈。注意看中間字的顏色褂痰,紅色表明還沒有添加到暫存區(qū),如果是綠色就表明已經(jīng)添加到了暫存區(qū)
接下來我想看下readme.txt文件到底改了什么內(nèi)容症虑,如何查看呢缩歪?可以使用如下命令:
git diff readme.txt 如下:
如上可以看到,readme.txt文件內(nèi)容從一行內(nèi)容改成 二行 谍憔,添加了一行下邊一行的內(nèi)容匪蝙。
知道了對readme.txt文件做了什么修改后主籍,我們可以放心的提交到倉庫了,提交修改和提交文件是一樣的2步(第一步是git add? 第二步是:git commit)逛球。
如下:
二:版本回退:
? ? ?如上千元,我們已經(jīng)學(xué)會了修改文件,現(xiàn)在我繼續(xù)對readme.txt文件進行修改颤绕,再增加一行
內(nèi)容如下
繼續(xù)執(zhí)行命令如下:
現(xiàn)在我已經(jīng)對readme.txt文件做了三次修改了幸海,那么我現(xiàn)在想查看下歷史記錄,如何查呢奥务?我們現(xiàn)在可以使用命令 git log 演示如下所示:
? ? git log命令顯示從最近到最遠的顯示日志物独,我們可以看到最近四次提交,如果嫌上面顯示的信息太多的話氯葬,我們可以使用命令 git log –pretty=oneline(千萬注意挡篓,不是online,是oneline):如下圖所示
? ? 現(xiàn)在我想使用版本回退操作,我想把當前的版本回退到上一個版本帚称,要使用什么命令呢瞻凤?可以使用如下2種命令,第一種是:git reset? –hard HEAD^ 那么如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推世杀。那如果要回退到前100個版本的話,使用上面的方法肯定不方便肝集,我們可以使用下面的簡便命令操作:git reset? –hard HEAD~100 即可瞻坝。未回退之前的readme.txt內(nèi)容如下:
如果想回退到上一個版本的命令如下操作:
再來查看下 readme.txt內(nèi)容如下:通過命令cat readme.txt查看,大家可以看到對比原來已經(jīng)少了一行了
可以看到杏瞻,內(nèi)容已經(jīng)回退到上一個版本了所刀。我們可以繼續(xù)使用git log 來查看下歷史記錄信息,如下:
我們看到 (備注:添加 第三行的內(nèi)容)我們已經(jīng)看不到了捞挥,但是現(xiàn)在我想回退到最新的版本浮创,如:有(添加 第三行的內(nèi)容)的內(nèi)容要如何恢復(fù)呢?我們可以通過版本號回退砌函,使用命令方法如下:
git reset? –hard 版本號 斩披,但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次命令行或者333內(nèi)容的版本號我并不知道呢?要如何知道增加3333內(nèi)容的版本號呢讹俊?可以通過如下命令即可獲取到版本號:git reflog? 演示如下:
通過上面的顯示我們可以知道垦沉,--添加了第三行的內(nèi)容--的版本號是 beb1eb4.我們現(xiàn)在可以命令
git reset? –-hard?beb1eb4來恢復(fù)了。演示如下:
可以看到 目前已經(jīng)是最新的版本了仍劈,即處于(增加了第三行的內(nèi)容的)版本號厕倍。,查看內(nèi)容:
三:理解工作區(qū)與暫存區(qū)的區(qū)別?
工作區(qū):就是你在電腦上看到的目錄贩疙,比如目錄下testgit里的文件(.git隱藏目錄版本庫除外)讹弯】黾龋或者以后需要再新建的目錄文件等等都屬于工作區(qū)范疇。
? ? ? 版本庫(Repository):工作區(qū)有一個隱藏目錄.git,這個不屬于工作區(qū)组民,這是版本庫棒仍。其中版本庫里面存了很多東西,其中最重要的就是stage(暫存區(qū))邪乍,還有Git為我們自動創(chuàng)建了第一個分支master,以及指向master的一個指針HEAD降狠。
我們前面說過使用Git提交文件到版本庫有兩步:
? 第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區(qū)庇楞。
? 第二步:使用git commit提交更改榜配,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支上。
我們繼續(xù)使用demo來演示下:
我們在readme.txt再添加一行內(nèi)容為(打工是不可能打工的吕晌,這輩子都不可能打工的)蛋褥,接著在目錄下新建一個文件為lala.txt 內(nèi)容為(啦啦啦啦啦啦啦啦啦),我們先用命令 git status來查看下狀態(tài)睛驳,如下:
現(xiàn)在我們先使用git add 命令把2個文件都添加到暫存區(qū)中烙心,再使用git status來查看下狀態(tài),如下:
已經(jīng)添加到暫存區(qū)的為綠色字體乏沸,未添加到的為紅色字體R稹!蹬跃!
接著我們可以使用git commit一次性提交到分支上匙瘪,如下:
四:Git撤銷修改和刪除文件操作。
一:撤銷修改:
??? 比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為(惟沉默是最高的輕蔑蝶缀。--魯迅)丹喻,我們先通過命令查看如下:
在我未提交之前,我發(fā)現(xiàn)添加
內(nèi)容有誤碍论,所以我得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下幾種方法可以做修改:
第一:如果我知道要刪掉那些內(nèi)容的話柄慰,直接手動更改去掉那些需要的文件鳍悠,然后add添加到暫存區(qū),最后commit掉坐搔。
第二:我可以按以前的方法直接恢復(fù)到上一個版本贼涩。使用 git reset? –hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢薯蝎?首先在做撤銷之前遥倦,我們可以先用 git status 查看下當前的狀態(tài)。如下所示:顯示已經(jīng)修改,但是還沒有添加到暫存區(qū)
可以發(fā)現(xiàn)袒哥,Git會告訴你缩筛,git checkout? — file 可以丟棄工作區(qū)的修改,如下命令:
如下所示:
[objc]?view plain?copy
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)。
好好理解一下巫俺,這兩句話其實也不難理解H纤浮!介汹!
對于第二種情況却嗡,我想我們繼續(xù)做demo來看下,假如現(xiàn)在我對readme.txt添加一行 內(nèi)容為(猛獸總是獨行嘹承,牛羊才成群結(jié)隊)
窗价,我git add 增加到暫存區(qū)后,接著添加內(nèi)容(從來如此叹卷,便對么撼港?)
,我想通過撤銷命令讓其回到暫存區(qū)后的狀態(tài)豪娜。如下所示:
注意:命令git checkout -- readme.txt 中的 — 很重要,如果沒有-- 的話哟楷,那么命令變成創(chuàng)建分支了瘤载。
二:刪除文件。
? ? ?假如我現(xiàn)在版本庫Z6T目錄添加一個文件666.txt,然后提交卖擅。如下:
如上:一般情況下鸣奔,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm 666.txt 惩阶,如果我想徹底從版本庫中刪掉了此文件的話挎狸,可以再執(zhí)行commit命令 提交掉,現(xiàn)在目錄是這樣的断楷,
只要沒有commit之前锨匆,如果我想在版本庫中恢復(fù)此文件如何操作呢?
可以使用如下命令 git checkout ?-- b.txt冬筒,如下所示:
再來看看我們testgit目錄恐锣,添加了666.txt文件了茅主。如下所示:
五:遠程倉庫。
? ? ?在了解之前土榴,先注冊github賬號诀姚,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設(shè)置:
? ? ?第一步:創(chuàng)建SSH Key玷禽。在用戶主目錄下赫段,看看有沒有.ssh目錄,如果有矢赁,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件糯笙,如果有的話,直接跳過此如下命令坯台,如果沒有的話炬丸,打開命令行,輸入如下命令:
ssh-keygen? -t rsa –C “youremail@example.com”
?結(jié)果如下所示:
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。
如何添加遠程庫准夷?
? ? ? ? ?現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個Git倉庫后钥飞,又想在github創(chuàng)建一個Git倉庫,并且希望這兩個倉庫進行遠程同步衫嵌,這樣github的倉庫可以作為備份读宙,又可以其他人通過該倉庫來協(xié)作。
?? 首先楔绞,登錄github上结闸,然后在右上角找到“create a new repo”創(chuàng)建一個新的倉庫。如下:
在Repository name填入testgit酒朵,其他保持默認設(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)容推送到遠程,使用 git push命令博肋,實際上是把當前分支master推送到遠程低斋。
由于遠程庫是空的,我們第一次推送master分支時匪凡,加上了 –u參數(shù)膊畴,Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來病游, 在以后的推送或者拉取時就可以簡化命令唇跨。推送成功后,可以立刻在github頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣了衬衬,上面的要輸入github的用 戶名和密碼如下所示:
從現(xiàn)在起买猖,只要本地作了提交,就可以通過如下命令:
[objc]?view plain?copy
git?push?origin?master??
把本地master分支的最新修改推送到github上了滋尉,現(xiàn)在你就擁有了真正的分布式版本庫了玉控。
2. 如何從遠程庫克隆狮惜?
上面我們了解了先有本地庫高诺,后有遠程庫時候,如何關(guān)聯(lián)遠程庫碾篡。
現(xiàn)在我們想虱而,假如遠程庫有新的內(nèi)容了,我想克隆到本地來 如何克隆呢开泽?
首先牡拇,登錄github,創(chuàng)建一個新的倉庫眼姐,名字叫testDemo.如下:
現(xiàn)在诅迷,遠程庫已經(jīng)準備好了佩番,下一步是使用命令git clone克隆一個本地庫了众旗。如下所示:
接著在我本地目錄下 生成testgit2目錄了,如下所示:
六:創(chuàng)建與合并分支趟畏。
在 ?版本回填退里贡歧,你已經(jīng)知道,每次提交,Git都把它們串成一條時間線利朵,這條時間線就是一個分支律想。截止到目前,只有一條時間線绍弟,在Git里技即,這個分支叫主分支,即master分支樟遣。HEAD嚴格來說不是指向提交而叼,而是指向master,master才是指向提交的豹悬,所以葵陵,HEAD指向的就是當前分支,切換分支級可以I理解為切換時間線。
首先瞻佛,我們來創(chuàng)建dev分支脱篙,然后切換到dev分支上。如下操作:
git checkout 命令加上 –b參數(shù)表示創(chuàng)建并切換伤柄,相當于如下2條命令
git branch dev
git checkout dev
git branch查看分支绊困,會列出所有的分支,當前分支前面會添加一個星號响迂。然后我們在dev分支上繼續(xù)做demo考抄,比如我們現(xiàn)在在readme.txt再增加一行 keep foolish
然后直接在kobe的分支上進行提交:
在kobe的分支上,開始是只有5行蔗彤,然后再kobe的分支上又加了一行keep ?foolish,然后提交川梅!,并查看kobe分支上readme.txt的neiron
現(xiàn)在dev分支工作已完成然遏,現(xiàn)在我們切換到主分支master上贫途,繼續(xù)查看readme.txt內(nèi)容如下:
現(xiàn)在我們可以把dev分支上的內(nèi)容合并到分支master上了,此時的readme.txt的內(nèi)容還是和之前一樣:
可以在master分支上待侵,使用如下命令 git merge kobe如下所示:
git merge命令用于合并指定分支到當前分支上丢早,合并后,再查看readme.txt內(nèi)容秧倾,可以看到怨酝,和dev分支最新提交的是完全一樣的。
注意到上面的Fast-forward信息那先,Git告訴我們农猬,這次合并是“快進模式”,也就是直接把master指向dev的當前提交售淡,所以合并速度非辰锎校快慷垮。
合并完成后,我們可以接著刪除dev分支了揍堕,操作如下:使用 git branch -d fenzhimi
如何解決沖突料身?
下面我們還是一步一步來,先新建一個新分支衩茸,比如名字叫james芹血,在readme.txt添加一行內(nèi)容stay hungry,然后提交楞慈,如下所示:
同樣祟牲,我們現(xiàn)在切換到master分支上來,查看此時的內(nèi)容為添加stay hungry之前的內(nèi)容,圖如下所示:
此時也在readmex.txt的最后一行添加內(nèi)容抖部,內(nèi)容為keep healthy说贝,如下所示:
現(xiàn)在我們需要在master分支上來合并james,如下操作:
此時我們再來查看一下readme.txt的內(nèi)容:
Git用<<<<<<<慎颗,=======乡恕,>>>>>>>標記出 不同分支的內(nèi)容,其中<<>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容俯萎,我們可以修改下如下后保存:
如果我想查看分支合并的情況的話傲宜,需要使用命令 git log.命令行演示如下:
? ? 3.分支管理策略。
? ? ? 通常合并分支時夫啊,git一般使用”Fast forward”模式函卒,在這種模式下,刪除分支后撇眯,會丟掉分支信息报嵌,現(xiàn)在我們來使用帶參數(shù) –no-ff來禁用”Fast forward”模式。首先我們來做demo演示下:
創(chuàng)建一個kobe分支熊榛。
修改readme.txt內(nèi)容锚国。
添加到暫存區(qū)。
切換回主分支(master)玄坦。
合并dev分支血筑,使用命令 git merge –no-ff? -m “注釋” dev
查看????歷史記錄
截圖如下:
大家可以看到,我刪除了之后煎楣,原來的版本信息竟然還存在2蜃堋!择懂!?
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的喻喳,也就是用來發(fā)布新版本,一般情況下不允許在上面干活休蟹,干活一般情況下在新建的dev分支上干活沸枯,干完后,比如上要發(fā)布赂弓,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來绑榴。
七:bug分支:
?????在開發(fā)中,會經(jīng)常碰到bug問題盈魁,那么有了bug就需要修復(fù)翔怎,在Git中,分支是很強大的杨耙,每個bug都可以通過一個臨時分支來修復(fù)赤套,修復(fù)完成后,合并分支珊膜,然后將臨時的分支刪除掉容握。
比如我在開發(fā)中接到一個404 bug時候,我們可以創(chuàng)建一個404分支來修復(fù)它车柠,但是剔氏,當前的dev分支上的工作還沒有提交。比如如下:
? ?并不是我不想提交竹祷,而是工作進行到一半時候谈跛,我們還無法提交,比如我這個分支bug要2天完成塑陵,但是我issue-404 bug需要5個小時內(nèi)完成感憾。怎么辦呢?還好令花,Git還提供了一個stash功能阻桅,可以把當前工作現(xiàn)場 ”隱藏起來”,等以后恢復(fù)現(xiàn)場后繼續(xù)工作兼都。如下:
? ?所以現(xiàn)在我可以通過創(chuàng)建bug-404分支來修復(fù)bug了鳍刷。
首先我們要確定在那個分支上修復(fù)bug,比如我現(xiàn)在是在主分支master上來修復(fù)的俯抖,現(xiàn)在我要在master分支上創(chuàng)建一個臨時分支输瓜,演示如下:
修復(fù)完成后,切換到master分支上芬萍,并完成合并尤揣,最后刪除bug-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àn)了內(nèi)容
八:多人協(xié)作益缠。
當你從遠程庫克隆時候,實際上Git自動把本地的master分支和遠程的master分支對應(yīng)起來了基公,并且遠程庫的默認名稱是origin幅慌。
要查看遠程庫的信息 使用 git remote
要查看遠程庫的詳細信息 使用 git remote –v
一:推送分支:
????? 推送分支就是把該分支上所有本地提交到遠程庫中,推送時轰豆,要指定本地分支欠痴,這樣,Git就會把該分支推送到遠程庫對應(yīng)的遠程分支上:
????? 使用命令 git push origin master
比如我現(xiàn)在的github上的readme.txt代碼如下:
本地的readme.txt代碼如下:
現(xiàn)在我想把本地更新的readme.txt代碼推送到遠程庫中秒咨,使用命令如下:
我們可以看到如上喇辽,推送成功,我們可以繼續(xù)來截圖github上的readme.txt內(nèi)容 如下:
可以看到 推送成功了雨席,如果我們現(xiàn)在要推送到其他分支菩咨,比如dev分支上,我們還是那個命令 git push origin dev
那么一般情況下陡厘,那些分支要推送呢抽米?
master分支是主分支,因此要時刻與遠程同步糙置。
一些修復(fù)bug分支不需要推送到遠程去云茸,可以先合并到主分支上,然后把主分支master推送到遠程去谤饭。
二:抓取分支:
多人協(xié)作時标捺,大家都會往master分支上推送各自的修改。現(xiàn)在我們可以模擬另外一個同事揉抵,可以在另一臺電腦上(注意要把SSH key添加到github上)或者同一臺電腦上另外一個目錄克隆亡容,新建一個目錄名字叫testgit2
但是我首先要把dev分支也要推送到遠程去,如下
接著進入testgit2目錄冤今,進行克隆遠程的庫到本地來闺兢,如下:
現(xiàn)在目錄下生成有如下所示:
現(xiàn)在我們的小伙伴要在dev分支上做開發(fā),就必須把遠程的origin的dev分支到本地來戏罢,于是可以使用命令創(chuàng)建本地dev分支:git checkout? –b dev origin/dev
現(xiàn)在小伙伴們就可以在dev分支上做開發(fā)了屋谭,開發(fā)完成后把dev分支推送到遠程庫時脚囊。
如下:
小伙伴們已經(jīng)向origin/dev分支上推送了提交,而我在我的目錄文件下也對同樣的文件同個地方作了修改桐磁,也試圖推送到遠程庫時悔耘,如下:
由上面可知:推送失敗,因為我的小伙伴最新提交的和我試圖推送的有沖突所意,解決的辦法也很簡單,上面已經(jīng)提示我們催首,先用git pull把最新的提交從origin/dev抓下來扶踊,然后在本地合并,解決沖突郎任,再推送秧耗。
git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接舶治,根據(jù)提示分井,設(shè)置dev和origin/dev的鏈接:如下:
這回git pull成功,但是合并有沖突霉猛,需要手動解決尺锚,解決的方法和分支管理中的 解決沖突完全一樣。解決后惜浅,提交瘫辩,再push:
我們可以先來看看readme.txt內(nèi)容了。
現(xiàn)在手動已經(jīng)解決完了坛悉,我接在需要再提交伐厌,再push到遠程庫里面去。如下所示:
因此:多人協(xié)作工作模式一般是這樣的:
首先裸影,可以試圖用git push origin branch-name推送自己的修改.
如果推送失敗挣轨,則因為遠程分支比你的本地更新早,需要先用git pull試圖合并轩猩。
如果合并有沖突卷扮,則需要解決沖突,并在本地提交均践。再用git push origin branch-name推送画饥。
Git基本常用命令如下:
?? mkdir:???????? XX (創(chuàng)建一個空目錄 XX指目錄名)
?? pwd:????????? 顯示當前目錄的路徑。
?? git init????????? 把當前的目錄變成可以管理的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~ 回退到上一個版本
??????????????????????? (如果想回退到100個版本衔彻,使用git reset –hard HEAD~100 )
?? cat XX???????? 查看XX文件內(nèi)容
?? git reflog?????? 查看歷史記錄的版本號id
?? git checkout — XX? 把XX文件在工作區(qū)的修改全部撤銷薇宠。
?? git rm XX????????? 刪除XX文件
?? git remote add origin?https://github.com/tugenhua0707/testgit?關(guān)聯(lián)一個遠程庫
?? git push –u(第一次要用-u 以后不需要) origin master 把當前master分支推送到遠程庫
? ?git clone?https://github.com/tugenhua0707/testgit? 從遠程庫中克隆
? ?git checkout –b dev? 創(chuàng)建dev分支 并切換到dev分支上
? ?git branch? 查看當前所有的分支
? ?git checkout master 切換回master分支
? ?git merge dev? ??在當前的分支上合并dev分支
? ?git branch –d dev 刪除dev分支
? ?git branch name? 創(chuàng)建分支
? ?git stash 把當前的工作隱藏起來 等以后恢復(fù)現(xiàn)場后繼續(xù)工作
? ?git stash list 查看所有被隱藏的文件列表
? ?git stash apply 恢復(fù)被隱藏的文件,但是內(nèi)容不刪除
? ?git stash drop 刪除文件
? ?git stash pop 恢復(fù)文件的同時 也刪除文件
? ?git remote 查看遠程庫的信息
? ?git remote –v 查看遠程庫的詳細信息
? ?git push origin master? Git會把master分支推送到遠程庫對應(yīng)的遠程分支上?