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== 命令顯示從最近到最遠的提交日志审磁,最近提交為==append test==,上一次是==wrote a readme file==
commit后面字符串是++conmmit id++(版本號)
HEAD表示當前版本
HEAD^表示上一個版本
HEAD~100表示往上100個版本
git reset 版本回退
==git reset --hard < commit_id>==
git reflog 記錄每一次命令
git 工作區(qū)和暫存區(qū)
電腦中能看到的目錄力麸,learngit就是一個工作區(qū)吨铸,工作區(qū)中隱藏的目錄==.git==不算做工作區(qū)宴霸,而是git的版本庫译断。我們把文件往git版本庫中添加時分為兩步:
==git add==將文件添加到暫存區(qū)萧恕;
==git commit==提交更改漾狼,將暫存區(qū)中的內(nèi)容提交到當前分區(qū)
使用==git status==查看狀態(tài)
管理修改
git只管理修改并不管理文件鸠蚪,使用==git add==命令之后今阳,將工作區(qū)的修改放入暫存區(qū)中,==git commit==只負責(zé)吧暫存區(qū)的修改提交茅信。
撤銷修改
撤銷修改分為3種情況:
工作區(qū)的文件已被修改酣栈,想要直接丟棄工作區(qū)的修改,使用命令:==git checkout -- file==
文件已修改并且添加到了暫存區(qū)汹押,需要丟棄修改矿筝。第一步:使用==git reset HEAD < file>==,回到場景1,按照場景1操作棚贾。
文件已經(jīng)被提交可以使用==git reset -hard < commit id>==版本回退撤銷修改窖维。
刪除文件
在git中刪除文件也是一種修改榆综,使用==git add==添加文件,在文件管理器中使用==rm==命令刪除文件,此時該文件在工作區(qū)和版本庫中不一致,使用==git status==命令會告訴你哪些文件被刪除
由上圖可知test.txt文件被刪除这吻,此時有兩種選擇:
確實需要從版本庫中刪除該文件,使用==git rm==命令刪除判沟,并且使用==git commit==命令提交
誤刪了該文件,因為版本庫中該文件仍然存在則可以恢復(fù)該文件==git checkout -- test.txt==
==git checkout==實質(zhì)使用版本庫中的版本替換工作區(qū)的版本
git 遠程倉庫
創(chuàng)建并連接遠程倉庫
git是分布式版本控制系統(tǒng)崭篡,同一個git倉庫可以分布到不同機器上挪哄。最早只有一臺機器有一個原始版本庫,此后別的機器可以克隆這個原始版本庫琉闪,而且每臺機器的版本庫沒有主次之分迹炼,使用gitlab網(wǎng)站當做服務(wù)器。本地git倉庫與gitlab倉庫之間的傳輸是通過SSH加密的颠毙,所以需要先進行設(shè)置:
- 創(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==是公鑰橙依。
-
登錄==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é)作刷喜。
- 登錄并新建遠程倉庫
==https://gitlab.ynuosa.org/users/sign_in==新建一個project
- 關(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的默認叫法颗祝,也可以換成其他名稱浊闪。
- 將本地倉庫中的所有內(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)容一模一樣:
從現(xiàn)在之后的每一次提交奸忽,就可以通過命令:==git push origin master==
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是沒有聯(lián)網(wǎng)都可以正常工作
從遠程倉庫克隆
先創(chuàng)建遠程庫揖庄。然后從遠程庫克隆栗菜。:
- 登錄Gitlab,創(chuàng)建一個新的倉庫蹄梢,明教gitskills:
-
現(xiàn)在遠程倉庫已經(jīng)準備好疙筹,使用==git clone==命令克隆遠程倉庫到本地庫
第一次克隆新的倉庫.PNG
<center>分支管理</center>
每次提交,Git都把它們串成一條時間線禁炒,這條時間線就是一個分支而咆。到目前為止git中只有一條主分支,即==master==分支幕袱。開始時Git使用==master==指向最新的提交暴备,再用==HEAD==指向==master==。就能確定當前分支们豌,以及當前分支的提交點:
創(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>== 切換分支
當前分支為dev分支
合并分支:假如我們在==dev==上的工作完成了蝗拿,就可以吧==dev==合并到==master==上晾捏。git直接把==master==指向==dev==當前的提交。
==git merge < name>==將name分區(qū)合并到當前分區(qū)上
刪除分支:刪除分支就是刪除分支的指針哀托。
==git branch -d < name>==刪除name分區(qū)
沖突解決
當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.==提交文件
git會告訴我們readme.txt文件存在沖突,我們直接查看txt文件內(nèi)容
Git用==<<<<<<<==嗽冒,========呀伙,==>>>>>>>==標記出不同分支的內(nèi)容。我們修改文件后再次提交并刪除分支
分支管理策略
通常添坊,合并分支時剿另,Git有限使用==Fast forward==模式,但這種模式贬蛙,刪除分支后雨女,會丟失分支信息。如果強制禁用==Fast forward==模式阳准,Git就會在合并分支時生成一個新的commit氛堕,這樣在分支歷史上可以看出分支信息.使用命令==git merge --no-ff < name>==強制禁止Fast forward
可以看出不適用==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é)作工作模式
試圖使用==git push origin < branch-name>==推送自己的修改
如果推送失敗嗡髓,因為遠程分支比你的本地更新更高操漠,需要先用==git pull==試圖合并
如果合并有沖突,則解決沖突,并在本地提交浊伙;
沒有沖突或者解決掉沖突后撞秋,再用==git push origin < branch-name>推動就能成功
如果==git pull==提示==no tracking information==,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建嚣鄙,用命令==git branch --set-upstream-to < branch-name> origin/< branch-name>==