一篇文章,教你學會Git

git 基礎

  • git是目前最流行的版本控制工具;另外一個就是歷史悠久的svn;

版本是什麼

  • 版本:代碼變動後,添加到版本庫,此次變動就成爲一個版本;
  • 版本庫:記錄全部的版本

當出現問題時,咱們能夠快速的經過版本和版本庫讓代碼回到沒有問題的版本而不用一行一行的撤銷回去;此外,版本還會記錄是誰改動的,改動了哪裏,方便比對和管理;linux

git和svn的區別

  • git 分佈式版本控制工具git

  • svn 集中式版本控制工具github

  • 集中式:bash

有一個遠程服務器,用來存儲全部成員的代碼和代碼版本庫,用戶全部的版本都直接提交到遠程服務器;服務器

  • 分佈式:

分佈式也有一個遠程服務器,可是項目成員本地也有一個服務器,用於記錄版本;若是想要提交版本到遠程服務器,須要先將變動添加到本地版本,而後再把本地版本庫同步給遠程服務器。網絡

  • svn必須經由網絡把變動推送到服務器才能生成版本;並且通常svn服務器都是部署在內網的;運維

  • git能夠不用網絡生成本地版本,可是把本地版本庫同步到遠程服務器是須要網絡的;ssh

  • git用的linux的命令行;分佈式

git的使用

本地倉庫和遠程倉庫

  • 本地倉庫:有.git文件夾的目錄,在這個目錄中git將會收集全部的變動,文件的修改、新增、刪除等都會被git記錄;
  • 遠程倉庫:在遠程服務器上的git倉庫,通常常見的有github託管、coding託管、公司本身搭建的gitlab服務器;
  • 建立遠程倉庫:登陸github建立遠程倉庫:
  • 克隆遠程倉庫到本地:git clone 倉庫地址 此時通過咱們克隆到達咱們本地的這一份就是本地倉庫,在倉庫中有一個.git 文件夾,這個文件夾是版本庫;
git config --list : 查看當前的配置信息
    git remote -v : 查看當前倉庫和哪一個遠程倉庫關聯
複製代碼

git的三個區

git有三個區:工做區、暫存區、歷史區。其中暫存區和歷史區都是在版本庫中;svn

  • 工做區:本地的目錄,能夠對目錄中的文件進行修改;
  • 暫存區:準備生成版本的修改;
  • 歷史區:已經成爲版本的修改;

生成一個版本

1.檢查本地倉庫文件狀態

git status
複製代碼

若是有紅色文件,表示這些文件的更改處於工做區中;
若是爲綠色,說明文件以及進入了暫存區;

  1. 對比
git diff 工做區和暫存區比較
複製代碼
  • 其餘對比
git diff -cached 暫存區和歷史區比較
    git diff master 工做區和歷史區比較
複製代碼

3.通過diff後,確認這些修改都要保留後將工做區添加到暫存區

git add . | 文件名
複製代碼

4.若是添加後後悔了,能夠刪除暫存區中的文件

git rm --cached + 文件名
複製代碼

或者:拉取暫存區中的文件覆蓋當前工做區中的內容(一般用來作放棄修改當前工做區中的修改,可是至於暫存區中有這個文件才能生效)

5.暫存區添加到歷史區

git commit -m'提交版本註釋'
複製代碼

把暫存區的修改添加到歷史區;添加到歷史區就會生成一個版本,這個版本有一個版本號;註釋必定要寫,描述本次你改了什麼,方便有一天你要回退到這個時間點

6.把本地的修改提交到遠程倉庫:

git pull origin master 同步遠程倉庫中的版本庫  
    git push origin master 把本地的版本庫同步到遠程倉庫  
複製代碼

版本回退(回滾)

1.查看版本庫中的歷史記錄,會有提交註釋和版本號,經過版本號能夠回退到任意版本;

git log
複製代碼

2.回退到某一個版本 (回滾,若是上線出現問題就須要回滾到上一個)

git reset --hard 版本號
複製代碼

git分支

master分支

git的遠程倉庫在創立之初存在一個默認分支master,這個分支稱爲主幹;這個分支上保存着線上運行的代碼,是通過測試的沒有問題的代碼;

基於master的開發分支

真實項目開發中咱們咱們通常不在master上作開發,都是基於master新開一個分支做爲開發分支;每一個分支都有本身的版本庫,記錄在不一樣的分支上的變動;

分支是在開分支一刻master的一個快照,master裏面的代碼當時長什麼樣子,分支裏面的代碼就會長什麼樣子;接下來全部的開發都是在分支上完成的;

合併分支

當開發完成後再把分支合併到master上;在合併以前要同步master上的代碼到分支上,而後再把分支合併到master,此時master就有了本次分支開發的內容,
最後再把本地master的版本庫同步到遠程的master,能夠push,通常使用merge request;

建立一個分支

  • 新建而且切換到新分支
git checkout -b 分支名
複製代碼
  • 或者
git branch 分支名
    // 這種方式創建的分支並不會自動切換到分支
複製代碼
  • 切換分支
git checkout 目標分支名
複製代碼
  • 刪除分支
git branch -D 分支名
複製代碼
  • 合併分支
git merge 分支1
    // 把分支1上的修改合併到當前分支
複製代碼

注意每一個分支有本身的獨立的版本庫,在分支a上的修改,若是不作合併,b分支上是不會有的;

分支開發流程:

1.首先克隆遠程倉庫到本地:git clone xxx.xxxx.xxxx,此時本地倉庫的分支處於master

2.在遠程開一個分支,在github或者gitlab上操做,這個分支稱爲遠程分支,例如分支名feature_0711

3.在本地開一個和遠程分支名字相同的本地分支:git checkout -b feature_0711
4.同步本地分支和遠程分支,git pull origin feature_0711

5.在本地開發,開始修改本地目錄中的文件;

6.適時的add commit,而後同步遠程分支,具體操做以下:(防止丟失或者本地誤刪)

  • 6.1 add commit 生成本地版本,而後pull 遠程分支,意義在於把其餘同事的代碼同步到本地;
  • 6.2 若是同步遠程分支時出現衝突,那就要解決衝突(誰發現衝突誰解決,必要時把和你衝突的同事叫來問他哪些要哪些不要);
  • 6.3 解決完衝突後,把本地分支同步到遠程分支 git push origin feature_0711;

分支提測:

1.當開發結束後用分支提測,feature_0711
2.通常會要同步master上的代碼,就是把master代碼合併到當前分支,具體操做以下:
3.從當前分支feature_0711 切換到master
4.切換到master後執行 git pull origin master 同步遠程master代碼到本地
5.而後再切換回分支feature_0711,在分支上把master的代碼合併到分支;
6.若是有衝突,就解決衝突;解決完衝突 add commit 而後push到遠程分支;

測試階段若是修改bug只須要在分支上修改,而後add commit,而後再push到遠程分支;

上線發版:

1.同步master上的代碼,而後push到遠程分支;
2.把分支合併到master,若是你是項目全部人你能夠push到master;可是通常人須要提交merge request(github上pull request);
3.提交merge request後,找有權限的人合併;
4.合併後通知上線人員發版(通常是運維的人);

多人協做時:

1.若是使用github,把項目成員添加到 settings -> collaborators -> add collaborators
2.若是使用gitlab,你入職的時候找領導給你開帳號,而後讓他把你加到項目中就能夠了;

SSH-KEY

  • 項目中不是每次都輸入密碼,這樣作效率很低下,真實項目中使用的都是ssh-key;
  • ssh-key是創建ssh時須要的公鑰;這個東西在你的機器上,經過命令行生成,生成後把這個祕鑰放到github或者gitlab上;
  • 而後創建ssh鏈接時,會自動從本地讀取祕鑰,github會比對以前存儲的祕鑰和本次鏈接攜帶的是否同樣,若是同樣就連上了,從而擺脫輸入密碼的困擾;

使用步驟SSH-KEY:

1.生成ssh-key:進入到家目錄;在git bash中輸入:cd ~
2.進入 家目錄中的 .ssh/ 目錄:cd .ssh/,若是沒有能夠新建:mkdir .ssh
3.執行: ssh-keygen 一路回車便可
4.cat id_rsa.pub 文件
5.複製上一步cat出來的結果
6.打開github或者gitlab,進入我的設置 settings -> SSH and GPG keys -> new SSHKey
7.title是對這個key的描述,把複製的key粘貼到key中,點擊 Add SSH key;
8.後面再clone項目時改用SSH協議,之後全部的操做都不須要密碼;

注意SSH只對當前的設備有效,由於ssh-key是存在設備上的,換電腦就沒戲了;

相關文章
相關標籤/搜索