Git使用教程(全宇宙最詳細(xì),最簡單汉形,最易xue)

(預(yù)警:因?yàn)樵敿?xì)纸镊,所以行文有些長倍阐,新手邊看邊操作效果出乎你的預(yù)料)
一:Git是什么?
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)逗威。
工作原理 / 流程:


圖片描述

Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠(yuǎn)程倉庫

二: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í)半等,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了呐萨。

三杀饵、在windows上如何安裝Git?

msysgit是 windows版的Git,如下:


圖片描述

需要從網(wǎng)上下載一個(gè)谬擦,然后進(jìn)行默認(rèn)安裝即可切距。安裝完成后,在開始菜單里面找到 "Git --> Git Bash",如下:


圖片描述

會彈出一個(gè)類似的命令窗口的東西惨远,就說明Git安裝成功谜悟。如下:


圖片描述

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

圖片描述

因?yàn)镚it是分布式版本控制系統(tǒng)葡幸,所以需要填寫用戶名和郵箱作為一個(gè)標(biāo)識最筒。

注意:git config --global 參數(shù),有了這個(gè)參數(shù)蔚叨,表示你這臺機(jī)器上所有的Git倉庫都會使用這個(gè)配置床蜘,當(dāng)然你也可以對某個(gè)倉庫指定的不同的用戶名和郵箱。

四:如何操作蔑水?

一:創(chuàng)建版本庫邢锯。

什么是版本庫?版本庫又名倉庫搀别,英文名repository,你可以簡單的理解一個(gè)目錄丹擎,這個(gè)目錄里面的所有文件都可以被Git管理起來,每個(gè)文件的修改歇父,刪除蒂培,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史庶骄,或者在將來某個(gè)時(shí)刻還可以將文件”還原”毁渗。

所以創(chuàng)建一個(gè)版本庫也非常簡單,如下我是D盤 –> www下 目錄下新建一個(gè)testgit版本庫单刁。

圖片描述

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

  1. 通過命令 git init 把這個(gè)目錄變成git可以管理的倉庫,如下:

    圖片描述

    這時(shí)候你當(dāng)前testgit目錄下會多了一個(gè).git的目錄羔飞,這個(gè)目錄是Git來跟蹤管理版本的肺樟,沒事千萬不要手動亂改這個(gè)目錄里面的文件,否則逻淌,會把git倉庫給破壞了么伯。如下:

    圖片描述
    1. 把文件添加到版本庫中。

      首先要明確下卡儒,所有的版本控制系統(tǒng)田柔,只能跟蹤文本文件的改動,比如txt文件骨望,網(wǎng)頁硬爆,所有程序的代碼等,Git也不列外擎鸠,版本控制系統(tǒng)可以告訴你每次的改動缀磕,但是圖片,視頻這些二進(jìn)制文件,雖能也能由版本控制系統(tǒng)管理袜蚕,但沒法跟蹤文件的變化糟把,只能把二進(jìn)制文件每次改動串起來,也就是知道圖片從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)容岔霸。

知道了對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)前的版本回退到上一個(gè)版本,要使用什么命令呢?可以使用如下2種命令窗宇,第一種是:git reset --hard HEAD^ 那么如果要回退到上上個(gè)版本只需把HEAD^ 改成 HEAD^^ 以此類推措伐。那如果要回退到前100個(gè)版本的話,使用上面的方法肯定不方便军俊,我們可以使用下面的簡便命令操作: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ù)呢提前?我們可以通過版本號回退,使用命令方法如下:

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ū)有一個(gè)隱藏目錄.git,這個(gè)不屬于工作區(qū),這是版本庫哨苛。其中版本庫里面存了很多東西鸽凶,其中最重要的就是stage(暫存區(qū)),還有Git為我們自動創(chuàng)建了第一個(gè)分支master,以及指向master的一個(gè)指針HEAD建峭。

我們前面說過使用Git提交文件到版本庫有兩步:

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

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

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

我們在readme.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)在我可以有如下幾種方法可以做修改:

第一:如果我知道要刪掉那些內(nèi)容的話彻桃,直接手動更改去掉那些需要的文件坛善,然后add添加到暫存區(qū),最后commit掉邻眷。

第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本眠屎。使用 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種情況,如下:

1.readme.txt自動修改后洒放,還沒有放到暫存區(qū)蛉鹿,使用 撤銷修改就回到和版本庫一模一樣的狀態(tài)。
2.另外一種是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目錄添加一個(gè)文件b.txt,然后提交肢预。如下:


圖片描述

如上:一般情況下,可以直接在文件目錄中把文件刪了洼哎,或者使用如上rm命令:rm b.txt 烫映,如果我想徹底從版本庫中刪掉了此文件的話沼本,可以再執(zhí)行commit命令 提交掉,現(xiàn)在目錄是這樣的窑邦,

圖片描述

只要沒有commit之前擅威,如果我想在版本庫中恢復(fù)此文件如何操作呢?

可以使用如下命令 git checkout -- b.txt冈钦,如下所示:

圖片描述

再來看看我們testgit目錄,添加了3個(gè)文件了李请。如下所示:

圖片描述

五:遠(yuǎn)程倉庫瞧筛。
在了解之前,先注冊github賬號导盅,由于你的本地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不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支端壳,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來告丢,在以后的推送或者拉取時(shí)就可以簡化命令。推送成功后损谦,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了岖免,上面的要輸入github的用戶名和密碼如下所示:


圖片描述

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

git push origin master

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

  1. 如何從遠(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查看分支咒锻,會列出所有的分支冷冗,當(dāng)前分支前面會添加一個(gè)星號。然后我們在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

如何解決沖突唉擂?
下面我們還是一步一步來,先新建一個(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”模式,在這種模式下弟胀,刪除分支后楷力,會丟掉分支信息,現(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ā)中偎血,會經(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)場 ”隱藏起來”妖爷,等以后恢復(fù)現(xiàn)場后繼續(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)場去哪里呢洛史?我們可以使用命令 git stash list來查看下。如下:

圖片描述

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

1.git stash apply恢復(fù)务热,恢復(fù)后忆嗜,stash內(nèi)容并不刪除,你需要使用命令git stash drop來刪除崎岂。
2.另一種方式是使用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪除了捆毫。
演示如下

圖片描述

八:多人協(xié)作
當(dāng)你從遠(yuǎn)程庫克隆時(shí)候冲甘,實(shí)際上Git自動把本地的master分支和遠(yuǎn)程的master分支對應(yīng)起來了绩卤,并且遠(yuǎn)程庫的默認(rèn)名稱是origin。

要查看遠(yuǎn)程庫的信息 使用 git remote
要查看遠(yuǎn)程庫的詳細(xì)信息 使用 git remote –v
如下演示:

圖片描述

一:推送分支:

  推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫中江醇,推送時(shí)濒憋,要指定本地分支,這樣陶夜,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分支上羽嫡,我們還是那個(gè)命令 git push origin dev

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

master分支是主分支厂僧,因此要時(shí)刻與遠(yuǎn)程同步扣草。
一些修復(fù)bug分支不需要推送到遠(yuǎn)程去,可以先合并到主分支上,然后把主分支master推送到遠(yuǎn)程去辰妙。
二:抓取分支:

多人協(xié)作時(shí)鹰祸,大家都會往master分支上推送各自的修改。現(xiàn)在我們可以模擬另外一個(gè)同事密浑,可以在另一臺電腦上(注意要把SSH key添加到github上)或者同一臺電腦上另外一個(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分支上推送了提交胆剧,而我在我的目錄文件下也對同樣的文件同個(gè)地方作了修改絮姆,也試圖推送到遠(yuǎn)程庫時(shí),如下:


圖片描述

由上面可知:推送失敗秩霍,因?yàn)槲业男』锇樽钚绿峤坏暮臀以噲D推送的有沖突篙悯,解決的辦法也很簡單,上面已經(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推送自己的修改.
如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新早,需要先用git pull試圖合并莹妒。
如果合并有沖突名船,則需要解決沖突,并在本地提交旨怠。再用git push origin branch-name推送渠驼。

感謝龍恩的貢獻(xiàn):http://www.cnblogs.com/tugenhua0707/p/4050072.html



參考阮老師整理的部分命令:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
一鉴腻、新建代碼庫

# 在當(dāng)前目錄新建一個(gè)Git代碼庫
$ git init

# 新建一個(gè)目錄迷扇,將其初始化為Git代碼庫
$ git init [project-name]

# 下載一個(gè)項(xiàng)目和它的整個(gè)代碼歷史
$ git clone [url]

二、配置

# 顯示當(dāng)前的Git配置
$ git config --list

# 編輯Git配置文件
$ git config -e [--global]

# 設(shè)置提交代碼時(shí)的用戶信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

三爽哎、增加/刪除文件

# 添加指定文件到暫存區(qū)
$ git add [file1] [file2] ...

# 添加指定目錄到暫存區(qū)蜓席,包括子目錄
$ git add [dir]

# 添加當(dāng)前目錄的所有文件到暫存區(qū)
$ git add .

# 添加每個(gè)變化前牡直,都會要求確認(rèn)
# 對于同一個(gè)文件的多處變化叙身,可以實(shí)現(xiàn)分次提交
$ git add -p

# 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
$ git rm [file1] [file2] ...

# 停止追蹤指定文件叙量,但該文件會保留在工作區(qū)
$ git rm --cached [file]

# 改名文件产镐,并且將這個(gè)改名放入暫存區(qū)
$ git mv [file-original] [file-renamed]

四隘庄、代碼提交

# 提交暫存區(qū)到倉庫區(qū)
$ git commit -m [message]

# 提交暫存區(qū)的指定文件到倉庫區(qū)
$ git commit [file1] [file2] ... -m [message]

# 提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū)
$ git commit -a

# 提交時(shí)顯示所有diff信息
$ git commit -v

# 使用一次新的commit癣亚,替代上一次提交
# 如果代碼沒有任何新變化丑掺,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新變化
$ git commit --amend [file1] [file2] ...

五述雾、分支

# 列出所有本地分支
$ git branch

# 列出所有遠(yuǎn)程分支
$ git branch -r

# 列出所有本地分支和遠(yuǎn)程分支
$ git branch -a

# 新建一個(gè)分支街州,但依然停留在當(dāng)前分支
$ git branch [branch-name]

# 新建一個(gè)分支,并切換到該分支
$ git checkout -b [branch]

# 新建一個(gè)分支玻孟,指向指定commit
$ git branch [branch] [commit]

# 新建一個(gè)分支唆缴,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
$ git branch --track [branch] [remote-branch]

# 切換到指定分支,并更新工作區(qū)
$ git checkout [branch-name]

# 切換到上一個(gè)分支
$ git checkout -

# 建立追蹤關(guān)系黍翎,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到當(dāng)前分支
$ git merge [branch]

# 選擇一個(gè)commit面徽,合并進(jìn)當(dāng)前分支
$ git cherry-pick [commit]

# 刪除分支
$ git branch -d [branch-name]

# 刪除遠(yuǎn)程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

六、標(biāo)簽

# 列出所有tag
$ git tag

# 新建一個(gè)tag在當(dāng)前commit
$ git tag [tag]

# 新建一個(gè)tag在指定commit
$ git tag [tag] [commit]

# 刪除本地tag
$ git tag -d [tag]

# 刪除遠(yuǎn)程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]

# 提交指定tag
$ git push [remote] [tag]

# 提交所有tag
$ git push [remote] --tags

# 新建一個(gè)分支匣掸,指向某個(gè)tag
$ git checkout -b [branch] [tag]

七趟紊、查看信息

# 顯示有變更的文件
$ git status

# 顯示當(dāng)前分支的版本歷史
$ git log

# 顯示commit歷史,以及每次commit發(fā)生變更的文件
$ git log --stat

# 搜索提交歷史碰酝,根據(jù)關(guān)鍵詞
$ git log -S [keyword]

# 顯示某個(gè)commit之后的所有變動霎匈,每個(gè)commit占據(jù)一行
$ git log [tag] HEAD --pretty=format:%s

# 顯示某個(gè)commit之后的所有變動,其"提交說明"必須符合搜索條件
$ git log [tag] HEAD --grep feature

# 顯示某個(gè)文件的版本歷史送爸,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 顯示指定文件相關(guān)的每一次diff
$ git log -p [file]

# 顯示過去5次提交
$ git log -5 --pretty --oneline

# 顯示所有提交過的用戶铛嘱,按提交次數(shù)排序
$ git shortlog -sn

# 顯示指定文件是什么人在什么時(shí)間修改過
$ git blame [file]

# 顯示暫存區(qū)和工作區(qū)的差異
$ git diff

# 顯示暫存區(qū)和上一個(gè)commit的差異
$ git diff --cached [file]

# 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
$ git diff HEAD

# 顯示兩次提交之間的差異
$ git diff [first-branch]...[second-branch]

# 顯示今天你寫了多少行代碼
$ git diff --shortstat "@{0 day ago}"

# 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
$ git show [commit]

# 顯示某次提交發(fā)生變化的文件
$ git show --name-only [commit]

# 顯示某次提交時(shí)暖释,某個(gè)文件的內(nèi)容
$ git show [commit]:[filename]

# 顯示當(dāng)前分支的最近幾次提交
$ git reflog

八、遠(yuǎn)程同步

# 下載遠(yuǎn)程倉庫的所有變動
$ git fetch [remote]

# 顯示所有遠(yuǎn)程倉庫
$ git remote -v

# 顯示某個(gè)遠(yuǎn)程倉庫的信息
$ git remote show [remote]

# 增加一個(gè)新的遠(yuǎn)程倉庫弄痹,并命名
$ git remote add [shortname] [url]

# 取回遠(yuǎn)程倉庫的變化饭入,并與本地分支合并
$ git pull [remote] [branch]

# 上傳本地指定分支到遠(yuǎn)程倉庫
$ git push [remote] [branch]

# 強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉庫,即使有沖突
$ git push [remote] --force

# 推送所有分支到遠(yuǎn)程倉庫
$ git push [remote] --all

九肛真、撤銷

# 恢復(fù)暫存區(qū)的指定文件到工作區(qū)
$ git checkout [file]

# 恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)
$ git checkout [commit] [file]

# 恢復(fù)暫存區(qū)的所有文件到工作區(qū)
$ git checkout .

# 重置暫存區(qū)的指定文件谐丢,與上一次commit保持一致,但工作區(qū)不變
$ git reset [file]

# 重置暫存區(qū)與工作區(qū)蚓让,與上一次commit保持一致
$ git reset --hard

# 重置當(dāng)前分支的指針為指定commit乾忱,同時(shí)重置暫存區(qū),但工作區(qū)不變
$ git reset [commit]

# 重置當(dāng)前分支的HEAD為指定commit历极,同時(shí)重置暫存區(qū)和工作區(qū)窄瘟,與指定commit一致
$ git reset --hard [commit]

# 重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變
$ git reset --keep [commit]

# 新建一個(gè)commit趟卸,用來撤銷指定commit
# 后者的所有變化都將被前者抵消蹄葱,并且應(yīng)用到當(dāng)前分支
$ git revert [commit]

# 暫時(shí)將未提交的變化移除,稍后再移入
$ git stash
$ git stash pop

@希望能幫助到大家锄列!共同進(jìn)步學(xué)習(xí)图云!https://www.imooc.com/article/20411

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邻邮,隨后出現(xiàn)的幾起案子竣况,更是在濱河造成了極大的恐慌,老刑警劉巖筒严,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丹泉,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸭蛙,警方通過查閱死者的電腦和手機(jī)摹恨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娶视,“玉大人晒哄,你說我怎么就攤上這事⌒颍” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵勋陪,是天一觀的道長贪磺。 經(jīng)常有香客問我,道長诅愚,這世上最難降的妖魔是什么寒锚? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任劫映,我火速辦了婚禮,結(jié)果婚禮上刹前,老公的妹妹穿的比我還像新娘泳赋。我一直安慰自己,他們只是感情好喇喉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布祖今。 她就那樣靜靜地躺著,像睡著了一般拣技。 火紅的嫁衣襯著肌膚如雪千诬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天膏斤,我揣著相機(jī)與錄音徐绑,去河邊找鬼。 笑死莫辨,一個(gè)胖子當(dāng)著我的面吹牛傲茄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沮榜,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盘榨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敞映?” 一聲冷哼從身側(cè)響起较曼,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎振愿,沒想到半個(gè)月后捷犹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冕末,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年萍歉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片档桃。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枪孩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藻肄,到底是詐尸還是另有隱情蔑舞,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布嘹屯,位于F島的核電站攻询,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏州弟。R本人自食惡果不足惜钧栖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一低零、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拯杠,春花似錦掏婶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畔咧,卻和暖如春茎芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誓沸。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工梅桩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拜隧。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓宿百,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洪添。 傳聞我的和親對象是個(gè)殘疾皇子垦页,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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