git筆記

Git

分布式版本控制系統(tǒng)

linux安裝git

使用命令:==sudo apt-get git==

git創(chuàng)建倉庫

mkdir learngit:創(chuàng)建一個learngit文件夾

cd learngit:移動到該文件夾下

pwd:可以顯示該文件的路徑

git init:把當前目錄變成git可以管理的目錄

所有需要git管理的文件都需要放到learngit目錄文件下

git添加文件到倉庫

將文件添加到倉庫:==git add < file>==

提交文件到倉庫:==git commit -m < message>==

-m后為本次提交

git版本回退

git log 查看歷史記錄

gitlog.PNG

==gitlog== 命令顯示從最近到最遠的提交日志审磁,最近提交為==append test==,上一次是==wrote a readme file==

commit后面字符串是++conmmit id++(版本號)

HEAD表示當前版本

HEAD^表示上一個版本

HEAD~100表示往上100個版本

git reset 版本回退

==git reset --hard < commit_id>==

git reflog 記錄每一次命令

git reflog.PNG

git 工作區(qū)和暫存區(qū)

電腦中能看到的目錄力麸,learngit就是一個工作區(qū)吨铸,工作區(qū)中隱藏的目錄==.git==不算做工作區(qū)宴霸,而是git的版本庫译断。我們把文件往git版本庫中添加時分為兩步:

  1. ==git add==將文件添加到暫存區(qū)萧恕;

  2. ==git commit==提交更改漾狼,將暫存區(qū)中的內(nèi)容提交到當前分區(qū)

使用==git status==查看狀態(tài)

管理修改

git只管理修改并不管理文件鸠蚪,使用==git add==命令之后今阳,將工作區(qū)的修改放入暫存區(qū)中,==git commit==只負責(zé)吧暫存區(qū)的修改提交茅信。

撤銷修改

撤銷修改分為3種情況:

  1. 工作區(qū)的文件已被修改酣栈,想要直接丟棄工作區(qū)的修改,使用命令:==git checkout -- file==

  2. 文件已修改并且添加到了暫存區(qū)汹押,需要丟棄修改矿筝。第一步:使用==git reset HEAD < file>==,回到場景1,按照場景1操作棚贾。

  3. 文件已經(jīng)被提交可以使用==git reset -hard < commit id>==版本回退撤銷修改窖维。

刪除文件

在git中刪除文件也是一種修改榆综,使用==git add==添加文件,在文件管理器中使用==rm==命令刪除文件,此時該文件在工作區(qū)和版本庫中不一致,使用==git status==命令會告訴你哪些文件被刪除

rm.PNG

由上圖可知test.txt文件被刪除这吻,此時有兩種選擇:

  1. 確實需要從版本庫中刪除該文件,使用==git rm==命令刪除判沟,并且使用==git commit==命令提交

  2. 誤刪了該文件,因為版本庫中該文件仍然存在則可以恢復(fù)該文件==git checkout -- test.txt==

==git checkout==實質(zhì)使用版本庫中的版本替換工作區(qū)的版本

git 遠程倉庫

創(chuàng)建并連接遠程倉庫

git是分布式版本控制系統(tǒng)崭篡,同一個git倉庫可以分布到不同機器上挪哄。最早只有一臺機器有一個原始版本庫,此后別的機器可以克隆這個原始版本庫琉闪,而且每臺機器的版本庫沒有主次之分迹炼,使用gitlab網(wǎng)站當做服務(wù)器。本地git倉庫與gitlab倉庫之間的傳輸是通過SSH加密的颠毙,所以需要先進行設(shè)置:

  1. 創(chuàng)建SSH Key斯入。在用戶主目錄下,查看是否有.SSH目錄蛀蜜,如果有刻两,再看看這個目錄下是否有id_rsa和id_rsa.pub,如果有則可以直接跳到下一步滴某,如果沒有磅摹,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:==ssh-keygen -t rsa -C "youremail@example.comn"==需要把郵箱地址換成自己的郵箱地址壮池,一路回車設(shè)置為默認值,密碼設(shè)置為空

[圖片上傳中...(SSHkey.PNG-a831f0-1539505494951-0)]

穿件完畢后可以在用戶主目錄下找到.ssh目錄杀怠,里面有==id_rsa==和==id_rsa.pub==兩個文件椰憋,這兩個就是SSH Key的秘鑰對,==id_rsa==是私鑰赔退,==id_rsa.pub==是公鑰橙依。

  1. 登錄==ynuosa.org==進入到其中的Gitlab并登錄,在用戶下點擊==seeting==硕旗,找到左側(cè)欄==SSH Key==窗骑,將公鑰中的內(nèi)容粘貼到==Key==中,==Title==部分任意即可漆枚,最后點擊==Add Key==添加公鑰创译。


    SSHkey.PNG

添加遠程庫

本地倉庫已經(jīng)創(chuàng)建完畢,此時需要在GitLab上創(chuàng)建一個Git倉庫墙基,并且需要讓兩個倉庫進行遠程同步软族,這樣GitLab上的倉庫既可以用作本分又可以讓其他人通過該倉庫來協(xié)作刷喜。

  1. 登錄并新建遠程倉庫

==https://gitlab.ynuosa.org/users/sign_in==新建一個project

新建Git倉庫.PNG
  1. 關(guān)聯(lián)本地倉庫

創(chuàng)建好后LearnGit倉庫仍然是一個空倉庫,可以將已有的本地倉庫與之關(guān)聯(lián)立砸,然后將本地倉庫的內(nèi)容添加到GitLab的倉庫中掖疮,在本地==learngit==倉庫運行下面命令:==git remote add origin git@gitlab.ynuosa.org:Baolingyan/LearnGit.git==

其中==origin==是遠程庫的名字,這是Git的默認叫法颗祝,也可以換成其他名稱浊闪。

  1. 將本地倉庫中的所有內(nèi)容推送到遠程倉庫上:==git push -u origin master==

將本地庫的內(nèi)容推送到遠程,使用==git push==命令螺戳,實際是吧當前分時==master==推送到遠程搁宾。由于遠程庫是空的,第一次推送是加上==-u==參數(shù)温峭,Git不但會把本地的==mater==分支內(nèi)容推送的遠程新的==master==分支猛铅,還會把本地的==master==分支和遠程的==master==分支關(guān)聯(lián)起來,在以后的推送或拉去值就可以簡化命令凤藏。推送成功后遠程庫的內(nèi)容和本地庫的內(nèi)容一模一樣:


第一次遠程庫內(nèi)容.PNG

從現(xiàn)在之后的每一次提交奸忽,就可以通過命令:==git push origin master==

分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是沒有聯(lián)網(wǎng)都可以正常工作

從遠程倉庫克隆

先創(chuàng)建遠程庫揖庄。然后從遠程庫克隆栗菜。:

  1. 登錄Gitlab,創(chuàng)建一個新的倉庫蹄梢,明教gitskills:
創(chuàng)建gitskills倉庫.PNG
  1. 現(xiàn)在遠程倉庫已經(jīng)準備好疙筹,使用==git clone==命令克隆遠程倉庫到本地庫


    第一次克隆新的倉庫.PNG

<center>分支管理</center>

每次提交,Git都把它們串成一條時間線禁炒,這條時間線就是一個分支而咆。到目前為止git中只有一條主分支,即==master==分支幕袱。開始時Git使用==master==指向最新的提交暴备,再用==HEAD==指向==master==。就能確定當前分支们豌,以及當前分支的提交點:

master.PNG

創(chuàng)建與合并分支

創(chuàng)建新分支:例如==dev==時涯捻,git新建一個叫做==dev==的指針,指向==master==相同的提交望迎,再把==HEAD==指向==dev==,就表示當前分支在==dev==上障癌。此時針對工作區(qū)的修改和提交就是針對==dev==分支了,比如新提交一次后辩尊,==dev==指針就往前移動一步涛浙,而==master==指針不變。

==git checkout -b < name>== 創(chuàng)建并切換分支;

==git branch== 查看當前分支

==git checkout < name>== 切換分支

創(chuàng)建查看分支.PNG

當前分支為dev分支

合并分支:假如我們在==dev==上的工作完成了蝗拿,就可以吧==dev==合并到==master==上晾捏。git直接把==master==指向==dev==當前的提交。

==git merge < name>==將name分區(qū)合并到當前分區(qū)上


快速合并分區(qū).PNG

刪除分支:刪除分支就是刪除分支的指針哀托。

==git branch -d < name>==刪除name分區(qū)

刪除分支.PNG

沖突解決

當git無法自動合并分支時惦辛,必須先解決沖突再提交

使用命令==git checkout -b feature1==創(chuàng)建新分支:修改==readme.txt==文件的最后一行,改為:==

Creating a new branch is quick AND simple.再該分支上提交文件


切換到==master==分支仓手,git會自動提示當前分支比遠程分支超前1個提交胖齐,將==master==分支上的==readme.txt最后一行修改為==Creating a new branch is quick & simple.==提交文件


master分支提交.PNG

git會告訴我們readme.txt文件存在沖突,我們直接查看txt文件內(nèi)容


合并沖突.PNG

Git用==<<<<<<<==嗽冒,========呀伙,==>>>>>>>==標記出不同分支的內(nèi)容。我們修改文件后再次提交并刪除分支


修改后提交.PNG

分支管理策略

通常添坊,合并分支時剿另,Git有限使用==Fast forward==模式,但這種模式贬蛙,刪除分支后雨女,會丟失分支信息。如果強制禁用==Fast forward==模式阳准,Git就會在合并分支時生成一個新的commit氛堕,這樣在分支歷史上可以看出分支信息.使用命令==git merge --no-ff < name>==強制禁止Fast forward


with no-ff.PNG

可以看出不適用==Fast forward==模式merge時將會創(chuàng)建一個新提交。

bug分支

假設(shè)當前任務(wù)正在進行野蝇,但是必須先修改另一個任務(wù)的bug讼稚,這時需要新建一個分支修復(fù)bug,當前dev的工作不能提交绕沈。

git stash會把當前工作現(xiàn)場暫時存儲锐想,等恢復(fù)現(xiàn)場后繼續(xù)工作。

修復(fù)工作場乍狐,使用==git stash apply==恢復(fù)赠摇,但是恢復(fù)后,stash內(nèi)容并不刪除澜躺,你需要用==git stash drop==來刪除蝉稳;另一種方式使用==git stash pop==抒蚜,恢復(fù)同時刪除stash內(nèi)容掘鄙。使用==git stash list==查看stash中的內(nèi)容。

多人協(xié)作工作模式

  1. 試圖使用==git push origin < branch-name>==推送自己的修改

  2. 如果推送失敗嗡髓,因為遠程分支比你的本地更新更高操漠,需要先用==git pull==試圖合并

  3. 如果合并有沖突,則解決沖突,并在本地提交浊伙;

  4. 沒有沖突或者解決掉沖突后撞秋,再用==git push origin < branch-name>推動就能成功

  5. 如果==git pull==提示==no tracking information==,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建嚣鄙,用命令==git branch --set-upstream-to < branch-name> origin/< branch-name>==

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吻贿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哑子,更是在濱河造成了極大的恐慌舅列,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卧蜓,死亡現(xiàn)場離奇詭異帐要,居然都是意外死亡,警方通過查閱死者的電腦和手機弥奸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門榨惠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盛霎,你說我怎么就攤上這事赠橙。” “怎么了摩渺?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵简烤,是天一觀的道長。 經(jīng)常有香客問我摇幻,道長横侦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任绰姻,我火速辦了婚禮枉侧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狂芋。我一直安慰自己榨馁,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布帜矾。 她就那樣靜靜地躺著翼虫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屡萤。 梳的紋絲不亂的頭發(fā)上珍剑,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音死陆,去河邊找鬼招拙。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的别凤。 我是一名探鬼主播饰序,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼规哪!你這毒婦竟也來了求豫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诉稍,失蹤者是張志新(化名)和其女友劉穎注祖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體均唉,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡是晨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舔箭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩缴。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖层扶,靈堂內(nèi)的尸體忽然破棺而出箫章,到底是詐尸還是另有隱情,我是刑警寧澤镜会,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布檬寂,位于F島的核電站,受9級特大地震影響戳表,放射性物質(zhì)發(fā)生泄漏桶至。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一匾旭、第九天 我趴在偏房一處隱蔽的房頂上張望镣屹。 院中可真熱鬧,春花似錦价涝、人聲如沸女蜈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伪窖。三九已至,卻和暖如春居兆,著一層夾襖步出監(jiān)牢的瞬間覆山,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工史辙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汹买,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓聊倔,卻偏偏與公主長得像晦毙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耙蔑,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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