三、git總結(jié)

1濒生、git init 初始化一個(gè)git倉(cāng)庫(kù),即把這個(gè)文件夾下面所有的文件納入到版本控制之中
2秉撇、添加一個(gè)read.TXT文件甜攀,內(nèi)容如下:


Git is a version control system.
Git is free software.


3、git add read.TXT 可以反復(fù)使用琐馆,添加多個(gè)文件
4规阀、git commit -m "wrote a readme file" 可以一次提交多個(gè)文件
修改文件如下:


Git is a distributed version control system.
Git is free software distributed.


4、git status 查看狀態(tài)瘦麸,下圖是我修改文件谁撼,但是沒(méi)有使用add命令的時(shí)候,調(diào)用該命令出現(xiàn)的結(jié)果

image.png

5滋饲、git diff readme.TXT查看差異厉碟,在4的基礎(chǔ)上,沒(méi)有進(jìn)行add屠缭,此時(shí)查看不同結(jié)果如下:
image.png

6箍鼓、執(zhí)行完git add命令之后,再查看狀態(tài)如下:
image.png

執(zhí)行g(shù)it diff命令結(jié)果如下:
image.png

可以得出結(jié)論:git status是查看工作區(qū)是否有被修改的文件以及被修改文件被提交到哪一步了呵曹,而git diff是用來(lái)比較工作區(qū)與暫存區(qū)的文件的差異
調(diào)用完git commit之后款咖,再調(diào)用git status,結(jié)果如下:
image.png

可以看到此時(shí)工作區(qū)沒(méi)有修改的文件了奄喂,也就是工作區(qū)跟版本庫(kù)保持一致了铐殃。
7、修改readme文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.


8跨新、git add
9富腊、git commit -m "append GPL"
10、

image.png

11域帐、git log查看提交歷史
image.png

當(dāng)使用git log --pretty=oneline的時(shí)候赘被,結(jié)果如下:
image.png

在第一張圖中的commit后面(也就是標(biāo)黃的那部分)的是commit id,是git計(jì)算的一個(gè)數(shù)俯树,用來(lái)區(qū)別每次操作
12帘腹、版本回退
在git中,用HEAD表示當(dāng)前版本许饿,也就是最新的提交阳欲,上一個(gè)版本就是HEAD,上上一個(gè)版本就是HEAD陋率,當(dāng)然往上100個(gè)版本寫100個(gè)比較容易數(shù)不過(guò)來(lái)球化,所以寫成HEAD~100。
git reset --hard HEAD^瓦糟,結(jié)果如下:

image.png

可以看到筒愚,現(xiàn)在版本回退到上一個(gè)版本了。
此時(shí)查看文件內(nèi)容:
image.png

可見(jiàn)菩浙,內(nèi)容確實(shí)回退到上一個(gè)版本了巢掺。


但是此時(shí)調(diào)用git log的時(shí)候句伶,結(jié)果如下:

image.png

最后的那次提交不見(jiàn)了,只剩下了兩次陆淀,此時(shí)如果想要到那個(gè)版本考余,該怎么辦?
如果此時(shí)你沒(méi)有關(guān)掉命令行窗口轧苫,則可以往上翻到最后一次提交楚堤,找到那次提交的commit id,然后調(diào)用命令git reset --hard 58b58含懊,結(jié)果如下:
image.png

查看文件內(nèi)容:
image.png

確實(shí)回來(lái)了身冬。


如果關(guān)掉了命令行窗口,該怎么辦岔乔?因?yàn)橹耙呀?jīng)到最后的版本了酥筝,所以這里先進(jìn)行一次版本回退操作,到 add distributed版本雏门。

image.png

此時(shí)使用git reflog命令查看命令歷史樱哼,結(jié)果如下:

可以看到我所有的提交以及版本回退操作,在這里就能找到最后一次提交的commit id了剿配,然后進(jìn)行版本回退即可:
image.png

13搅幅、工作區(qū)、暫存區(qū)與版本庫(kù)

  • 工作區(qū)可以理解為ide工具寫的代碼放的地方呼胚,比如eclipse每次進(jìn)入的時(shí)候你選的那個(gè)文件夾茄唐。
  • 在工作區(qū)中有一個(gè)隱藏目錄:.git文件,這個(gè)是git的版本庫(kù)蝇更,Git的版本庫(kù)里存了很多東西恃逻,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)闷祥,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD。
  • 暫存區(qū)擁有跟上一個(gè)版本完全一樣的目錄結(jié)構(gòu)和文件


    image.png

前面講了我們把文件往Git版本庫(kù)里添加的時(shí)候赁豆,是分兩步執(zhí)行的:

第一步是用git add把文件添加進(jìn)去姨裸,實(shí)際上就是把文件修改添加到暫存區(qū)蹄溉;

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

因?yàn)槲覀儎?chuàng)建Git版本庫(kù)時(shí)况脆,Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master分支饭宾,所以,現(xiàn)在格了,git commit就是往master分支上提交更改看铆。

你可以簡(jiǎn)單理解為,需要提交的文件修改通通放到暫存區(qū)盛末,然后弹惦,一次性提交暫存區(qū)的所有修改否淤。
14、接13
修改readme文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.


新增一個(gè)LICENSE文本文件(內(nèi)容隨便寫)棠隐。


This is LICENSE file.


然后查看狀態(tài)如下:

image.png

Git非常清楚地告訴我們叹括,readme.txt被修改了,而LICENSE還從來(lái)沒(méi)有被添加過(guò)宵荒,所以它的狀態(tài)是Untracked。
調(diào)用兩次add命令再查看狀態(tài)如下:
image.png

下面這個(gè)圖中stage中沒(méi)有完全把目錄結(jié)構(gòu)寫出來(lái)
image.png

提交之后如下:
image.png

這個(gè)版本控制有點(diǎn)厲害啊净嘀,應(yīng)該是我操作的時(shí)候復(fù)制粘貼刪除等报咳,雖然內(nèi)容一樣,但是這都能整出來(lái)挖藏。暑刃。
15、針對(duì)暫存區(qū)再做一次測(cè)試:
現(xiàn)在版本庫(kù)和工作區(qū)中的文件是:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.


修改文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1


此時(shí)未執(zhí)行add命令膜眠,調(diào)用git diff readme.TXT岩臣,結(jié)果如下:

image.png

再一次修改文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
2


結(jié)果如下:


image.png

因?yàn)闀捍鎱^(qū)中有完整的上一個(gè)版本的內(nèi)容,所以git diff比較的就是工作區(qū)跟暫存區(qū)之間的差異宵膨。
此時(shí)調(diào)用git diff --cached readme.TXT架谎,結(jié)果如下:

image.png

說(shuō)明該命令是比較版本庫(kù)與暫存區(qū)的差異。
此時(shí)調(diào)用git diff HEAD辟躏,結(jié)果如下:
image.png

跟git diff的結(jié)果完全一致谷扣,說(shuō)明:確實(shí)是跟版本庫(kù)做對(duì)比,查看當(dāng)前工作區(qū)修改的內(nèi)容捎琐。
16会涎、接15
執(zhí)行一次add命令,
修改readme文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
2
3


此時(shí)分別執(zhí)行g(shù)it diff和gitdiff head和git diff --cached readme.TXT瑞凑,如下:


image.png

image.png

image.png

可以看到末秃,git diff比較的是工作區(qū)與暫存區(qū)的差異,git diff head比較的是上一個(gè)版本與工作區(qū)的差異籽御。
綜上:git diff在沒(méi)有add之前比較的是上一個(gè)版本跟當(dāng)前工作區(qū)的差異练慕,在add之后比較的是工作區(qū)與暫存區(qū)的差異;git diff HEAD 一直比較的是上一個(gè)版本跟當(dāng)前工作區(qū)的差異技掏,git diff caches比較的是暫存區(qū)與上一個(gè)版本的差異贺待。
這樣理解是錯(cuò)的,git diff一直比較的是工作區(qū)跟暫存區(qū)的差異零截,只是因?yàn)闀捍鎱^(qū)中有上一個(gè)版本而已麸塞,所以在沒(méi)add之前,跟add之后會(huì)出現(xiàn)差異涧衙。
git diff 本身只顯示尚未暫存的改動(dòng)哪工,而不是自上次提交以來(lái)所做的所有改動(dòng)奥此。尚未暫存的改動(dòng),用詞真的是精辟

image.png

image.png

17雁比、修改的撤銷
首先將文件恢復(fù)至原始狀態(tài):


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.


修改文件:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1


image.png

此時(shí)沒(méi)有add操作稚虎,調(diào)用git checkout -- readme.TXT命令之后,結(jié)果如下:
image.png

可以看到修改被撤銷了偎捎。
然后再進(jìn)行如下操作:
修改文件:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1


add之后再修改文件:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1
2


調(diào)用git checkout 命令結(jié)果如下:

image.png

說(shuō)明git checkout -- readme.TXT命令是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)蠢终。
這個(gè)時(shí)候文件已經(jīng)進(jìn)暫存區(qū)了,還沒(méi)有提交茴她,要想撤銷暫存區(qū)的修改寻拂,可以使用git reset HEAD readme.TXT命令,結(jié)果如下:
image.png

此時(shí)調(diào)用git status和gitdiff結(jié)果如下:
image.png

可以看到文件恢復(fù)至未add的狀態(tài)丈牢,此時(shí)再調(diào)用checkout命令祭钉,結(jié)果如下:
image.png

可以看到修改被完全撤銷了。
如果已經(jīng)commit了己沛,則可以使用版本回退功能慌核。

18、刪除
執(zhí)行rm命令申尼,刪除文件垮卓,如下所示:

image.png

這個(gè)時(shí)候,Git知道你刪除了文件师幕,因此扒接,工作區(qū)和版本庫(kù)就不一致了,git status命令會(huì)立刻告訴你哪些文件被刪除了∶茄茫現(xiàn)在你有兩個(gè)選擇钾怔,一是確實(shí)要從版本庫(kù)中刪除該文件,那就用命令git rm刪掉蒙挑,并且git commit宗侦。
image.png

另一種情況是刪錯(cuò)了,因?yàn)榘姹編?kù)里還有呢忆蚀,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:
image.png

image.png

此時(shí)文件就恢復(fù)了矾利。
19、遠(yuǎn)程倉(cāng)庫(kù)
首先注冊(cè)github'賬號(hào)馋袜,因?yàn)檫@里是使用ssh加密男旗,所以要先進(jìn)行一些設(shè)置:
第1步:創(chuàng)建SSH Key。在用戶主目錄下欣鳖,看看有沒(méi)有.ssh目錄察皇,如果有,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了什荣,可直接跳到下一步矾缓。如果沒(méi)有,打開(kāi)Shell(Windows下打開(kāi)Git Bash)稻爬,創(chuàng)建SSH Key:ssh-keygen -t rsa -C "431370446@qq.com"嗜闻,然后一路回車,使用默認(rèn)值即可桅锄。如果一切順利的話琉雳,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個(gè)文件友瘤,這兩個(gè)就是SSH Key的秘鑰對(duì)翠肘,id_rsa是私鑰,不能泄露出去商佑,id_rsa.pub是公鑰,可以放心地告訴任何人厢塘。
image.png

第2步:登陸GitHub茶没,打開(kāi)“Account settings”,“SSH Keys”頁(yè)面:
然后晚碾,點(diǎn)“Add SSH Key”抓半,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:
為什么GitHub需要SSH Key呢格嘁?因?yàn)镚itHub需要識(shí)別出你推送的提交確實(shí)是你推送的笛求,而不是別人冒充的,而Git支持SSH協(xié)議糕簿,所以探入,GitHub只要知道了你的公鑰,就可以確認(rèn)只有你自己才能推送懂诗。

當(dāng)然蜂嗽,GitHub允許你添加多個(gè)Key。假定你有若干電腦殃恒,你一會(huì)兒在公司提交植旧,一會(huì)兒在家里提交,只要把每臺(tái)電腦的Key都添加到GitHub离唐,就可以在每臺(tái)電腦上往GitHub推送了病附。
第三步:具體推送

image.png

20、分支基礎(chǔ)知識(shí)
版本回退里亥鬓,你已經(jīng)知道完沪,每次提交,Git都把它們串成一條時(shí)間線嵌戈,這條時(shí)間線就是一個(gè)分支丽焊。截止到目前较剃,只有一條時(shí)間線,在Git里技健,這個(gè)分支叫主分支写穴,即master分支。HEAD嚴(yán)格來(lái)說(shuō)不是指向提交雌贱,而是指向master啊送,master才是指向提交的,所以欣孤,HEAD指向的就是當(dāng)前分支馋没。
一開(kāi)始的時(shí)候,master分支是一條線降传,Git用master指向最新的提交篷朵,再用HEAD指向master,就能確定當(dāng)前分支婆排,以及當(dāng)前分支的提交點(diǎn):
image.png

master其實(shí)是一個(gè)分支名而已声旺,指向這個(gè)分支下的最新的版本,head指向當(dāng)前分支段只。
image.png

image.png

21腮猖、分支測(cè)試
目前文件內(nèi)容如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.


首先,創(chuàng)建dev分支:


image.png

查看分支:


image.png

此時(shí)修改文件為:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1


在dev分支上進(jìn)行提交:


image.png

切換回master分支查看文件:


image.png

因?yàn)槟莻€(gè)提交是在dev分支上赞枕,而master分支此刻的提交點(diǎn)并沒(méi)有變澈缺。
合并分支之后再查看:
image.png

image.png

image.png

22、解決沖突
首先先建立一個(gè)分支然后feature1然后再回到master分支炕婶,則會(huì)提示比遠(yuǎn)程多一次提交:



然后轉(zhuǎn)到feature1分支上姐赡,在該分支上修改文件如下:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1
featrue1


然后提交,再轉(zhuǎn)到master分支上:
修改文件如下柠掂,然后提交:


Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1
master


image.png

這種情況下雏吭,Git無(wú)法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來(lái)陪踩,但這種合并就可能會(huì)有沖突杖们,我們?cè)囋嚳矗?/p>

image.png

這時(shí)候再去看工作區(qū)的readme文件會(huì)發(fā)現(xiàn):變成了這個(gè)樣子:


image.png

我們修改為以下,然后保存提交:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
1
master
featrue1


image.png

image.png

可以查看合并沖突的記錄:


image.png

最后刪除分支:


image.png

23肩狂、分支管理策略
通常摘完,合并分支時(shí),如果可能傻谁,Git會(huì)用Fast forward模式孝治,但這種模式下,刪除分支后,會(huì)丟掉分支信息谈飒。

如果要強(qiáng)制禁用Fast forward模式岂座,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣杭措,從分支歷史上就可以看出分支信息费什。
測(cè)試:
在dev分支上岸原來(lái)的模式提交,在dev3上不用Fast forward模式模式提交:

image.png

image.png

可以看到保留了dev3的分支歷史手素。
image.png

24鸳址、bug分支
image.png

首先在dev3分支干活,但是做的修改沒(méi)add泉懦,這時(shí)候調(diào)用git stash來(lái)保修現(xiàn)場(chǎng)稿黍,然后轉(zhuǎn)到maste分支,生成dev4分支崩哩,在該分支上干完活病提交之后巡球,在返回dev3分支,調(diào)用git stash apply來(lái)恢復(fù)現(xiàn)場(chǎng)
image.png

image.png

25邓嘹、遠(yuǎn)程推送
image.png

image.png

image.png

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酣栈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吴超,更是在濱河造成了極大的恐慌钉嘹,老刑警劉巖鸯乃,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲸阻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缨睡,警方通過(guò)查閱死者的電腦和手機(jī)鸟悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奖年,“玉大人细诸,你說(shuō)我怎么就攤上這事÷兀” “怎么了震贵?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)水评。 經(jīng)常有香客問(wèn)我猩系,道長(zhǎng),這世上最難降的妖魔是什么中燥? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任寇甸,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拿霉。我一直安慰自己吟秩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布绽淘。 她就那樣靜靜地躺著涵防,像睡著了一般。 火紅的嫁衣襯著肌膚如雪收恢。 梳的紋絲不亂的頭發(fā)上武学,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音伦意,去河邊找鬼火窒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驮肉,可吹牛的內(nèi)容都是我干的熏矿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼离钝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼票编!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起卵渴,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慧域,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浪读,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體昔榴,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年碘橘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了互订。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痘拆,死狀恐怖仰禽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纺蛆,我是刑警寧澤吐葵,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站桥氏,受9級(jí)特大地震影響温峭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜识颊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一诚镰、第九天 我趴在偏房一處隱蔽的房頂上張望奕坟。 院中可真熱鬧,春花似錦清笨、人聲如沸月杉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苛萎。三九已至,卻和暖如春检号,著一層夾襖步出監(jiān)牢的瞬間腌歉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工齐苛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翘盖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓凹蜂,卻偏偏與公主長(zhǎng)得像馍驯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玛痊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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