Git基礎知識詳解

GIT基礎知識

    1. 什麼是git?

      <!--more-->html

      分佈式版本控制系統,它是由Linux(全球比較大的服務器系統)創始人花兩週使用C語言編寫的,(在GIT命令窗口中通常是執行Linux命令)node

      1. 什麼是版本控制系統?git

        可以把以前操做的具體信息記錄下來,方便往後的更改。github

        • 備份文件
        • 記錄歷史
        • 回到過去
        • 多端共享
        • 團隊協做
      2. 經常使用的版本控制系統web

        • git:分佈式版本控制系統
        • svn:集中式版本控制系統

        面試題:分佈式和集中式的區別?面試

        [集中式]:圖片描述npm

        • 想要作歷史記錄的查看或者備份,必須鏈接到中央服務器才能夠(須要聯網)
        • 處理速度沒有git快

        [分佈式]:圖片描述bash

        • 每一個開發者本地都是一個單獨的倉庫,在本身的倉庫中就能夠完成歷史版本記錄和查看(不須要聯網)
        • git處理的速度更快(git是按照數據存儲的)

Linux操做系統中經常使用的命令

  • ls:查看當前目錄下的文件(或文件夾)服務器

    • -l :查看詳細信息
    • -a:查看隱藏文件
    • -la:同時具有以上特色
  • clear:清屏
  • cd: 目錄切換分佈式

    • cd ../ 返回上級目錄
    • cd ./ 返回當前目錄
    • cd / 返回根目錄
    • cd xxx 進入到指定文件夾
    • cd E 進入到指定的磁盤
  • mkdir 建立文件夾
  • touch 建立一個空文件

    • 能夠建立無文件名的文件,例如:touch .gitignore
    • 在電腦隱藏文件後綴名的狀況下,咱們也不至於建立出1.txt.txt這樣重複後綴名的文件
  • vi 向指定文件中插入內容 例如:vi.txt

    • 首先進入命令窗口模式
    • 咱們先按i,進入到插入內容模式
    • 編輯須要寫的內容
    • 按ESC鍵,再按英文下的 : 鍵,再按wq(保存並退出)
    • 按 q!(強制退出,新輸入的內容不保存)
  • echo xxx > 1.txt 把xxx內容放到1.txt文件中,若是沒有這個文件則建立這個文件(新存放的內容會替換原有文件的內容)
  • echo xxx >> 1.txt 新的內容會追加到原有內容的後面
  • cat 查看文件中的內容
  • cp 拷貝文件
  • rm 刪除文件

    • -r 遞歸刪除(把當前文件夾中全部的後代元素都遍歷到刪除)
    • -f 強制刪除
    • -rf 上面兩種合併到一塊兒,沒有辦法還原回來,使用要慎重

Git的工做原理和流程

安裝完成git後,咱們應該先把基礎信息配置一下(本身須要配置一次便可)

$ git config -l 查看當前本機的配置清單
$ git config --global user.name xxx 
$ git config --global user.email xxx
(xxx寫github/coding等平臺的帳號和郵箱)

Git的工做流程

Git是分佈式版本控制系統,每一臺客戶端都是一個獨立的git倉庫(有git工做的全套機制)

一個git倉庫分爲三個區域;

  1. 工做區:平時寫代碼的地方
  2. 暫存區:寫好的一些代碼暫時存儲的地方
  3. 歷史區:生成一個個版本記錄得地方

git的工做流程

1.建立GIT倉庫
在指定目錄中,打開git bash命令行,執行 git init ,至關於以當前目錄做爲基礎,建立了一個本地git倉庫

建立完成後,會在項目的根目錄中展現 .git 這個隱藏文件:有這個.git文件的才叫作git倉庫,沒有則不能被稱爲git倉庫(由於暫存區和歷史區都是存在 .git 文件夾中的)

2.把工做區的內容提交到暫存區
$ git add xxx  把某個文件提交到暫存區
$ git add . 把全部修改的文件(修改和新增的包含,刪除的不包含)提交到暫存區
$ git add -u 把全部修改的文件(包含修改和刪除的,不包含新增的)
$ git add -A 是點和u的集合體,(全部修改,新增,刪除的信息都會提交到暫存區),可是真實效果中二者都差很少,用哪一個均可以


$ git status 查看當前文件的狀態
紅色:在工做區中,尚未提交到暫存區
綠色:在暫存區中,尚未提交到歷史區
  • 若是在提交的時候,有些內容不想提交,咱們能夠增長git提交的忽略文件: .gitignore (沒有文件名只有後綴名)
  • .gitignore 中的信息:

    .idea // 使用WS打開項目或者編輯項目,自動會生成的文件

    node_modules // 使用npm安裝模塊的時候,當前安裝在項目中的第三方模塊都在這個文件夾中(之因此忽略是由於文件太大了)

    .DS_Store (mac本中的文件)等等

3.把暫存區提交到歷史區
$ git commit

$ git commit -m'註釋內容'

$ git commit -a -m'註釋內容'  
把提交到暫存區和提交到歷史區合併到一塊兒完成。可是隻適合已經提交過一次的文件,被修改後能夠快速提交。可是對於新增的文件,一次都沒有提交過的,是不容許這樣操做的。

【root-commit】根提交:

  • 簡單理解爲:第一次提交到歷史區域,若是咱們建立一個新的倉庫。可是沒有作根提交,此時咱們倉庫中沒有任何分支(哪怕是master),也就不存在所謂的分支切換(當前倉庫還不完整,只有一個工做流程走完一遍纔算完整)
4.工做流中的一些細節知識:
不論是從工做區提交到暫存區,仍是從暫存區提交到歷史區,每個區域當前的內容是已知保存下來的不會消失。
$ git log
或
$ git reflog
都是查看歷史提交記錄的(也至關於查看歷史版本號),在沒有歷史版本回滾的時候,咱們用哪一個均可以。若是有歷史版本回滾, git log 只能查看當前回退版本之前的版本
$ git rm --cached . -r
能夠把 . 替換爲具體的文件名,這條命令的意思是:

從暫存區把全部內容(或者是你指定的具體文件)都撤回到工做區(無論暫存區中的內容是否已經提交到歷史版本上了,也不論是你第幾回放到暫存區的,通通撤回到工做區)

這種方式太暴力,咱們用的不多,不推薦使用

$ git checkout .

這條命令的意思是:

把暫存區內容撤回工做去(覆蓋現有工做區中的內容沒法找回)。

也能夠理解爲:用上一個暫存區存儲的內容覆蓋現有工做區的內容,工做區內容變爲和上一個暫存區同樣的內容,暫存區內容還在。

存在問題:只能限制當前代碼尚未提交的狀況,當前代碼沒提交回滾的是上一次提交到暫存區的內容(和工做區內容不同);若是當前此次也提交了,暫存區和工做區同樣,回滾回來也是同樣的,這個方式就解決不了了。

解決問題:

  1. 輸入命令 $ git reset HEAD . : 在暫存區中,回滾到上一次暫存區中記錄的內容(暫存區先回滾一次)
  2. 輸入命令 $ git checkout . : 把最新暫存區的內容回滾到工做區,替換工做區中的內容
$ git diff
工做區 VS 暫存區 : git diff

工做區 VS 歷史區 : git diff master

暫存區 VS 歷史區 : git diff --cached

查看不一樣區域之間代碼的不一樣,咱們通常都是基於可視化的頁面來查看不同的

最重要的代碼回滾技巧:

$ git reset --hard 版本號
git log 能夠查看版本號

回滾的時候指定的版本號不必定很是全,有七八位便可

當咱們回滾到某一個歷史版本以後,暫存區和工做區的內容都將被這個版本內容所代替

$ history > xxx.txt    //(把歷史操做步驟輸出)

團隊協做開發下的git操做

  • 前面講的都是單獨開發,在本身本地創建git倉庫的一系列操做流程,在團隊寫做開發下,流程仍是有所區別的

1. 建立中央倉庫

  • 通常是由團隊技術LEADER或者指派人完成的,倉庫中默認是有一些初始化文件的
  • 中央倉庫多是在:gitHub,Coding,本身公司的git倉庫服務平臺,本身公司的服務器等...
    1. 基於gitHub建立遠程倉庫,建立完成後會生成一個遠程地址,例如: https//github.com/username/Repository name.git
    2. 做爲LEADER,還須要把項目中一些基礎的信息提交到遠程倉庫上:

      1. 在本身本地建立一個倉庫,把一些基礎內容都放在倉庫中
      2. 把新增長的內容提交到本地倉庫歷史區中
      3. 讓本地倉庫和遠程倉庫保持關聯
      4. 把本地倉庫歷史區中的信息同步(推送)到遠程倉庫上
  • 讓本地倉庫和遠程倉庫保持關聯:
$ git remote add 名字(通常都叫作origin) 遠程倉庫地址

$ git remote rm 名字  // 移除關聯

$ git remote -v   // 查看當前倉庫和哪些遠程倉庫保持關聯
  • 讓本地歷史區信息和遠程倉庫信息保持同步:

    第一種方法:

    $ git push origin master
    // 把本地信息推送到遠程倉庫上
    
    $ git pull origin master
    // 把遠程的拉取到本地倉庫
    
    (origin 是本地和遠程倉庫關聯的那個名字,master 是遠程倉庫的主分支)

    第二種方法:(推薦使用)

    咱們建立完成後遠程倉庫後,能夠直接經過 git clone 倉庫地址 倉庫別名(能夠不寫) 的方式把遠程倉庫克隆到本地:

    至關於在本地建立了一個倉庫

    也讓本地這個倉庫和遠程倉庫保持了鏈接(名字:origin)

    也把遠程倉庫現有的內容克隆到了本地

2. 無分支模式下的團隊協做

做爲開發者天天來的第一件事情或者提交代碼以前,都要先pull一下

  1. 【若是遠程倉庫和本地倉庫不是同一個文件同一行代碼衝突】
git 會自動依賴於 Fast-forward 模式進行合併

自動合併後,咱們從新提交便可 git add/commit/push

  1. 【同一個文件的同一行代碼衝突】

    找到衝突的文件,留下本身想要的代碼

    無論以前是否commit過,都要從新的commit,而後push便可

2.單獨分支管理

  1. 天天第一件事情,就是建立一個dev分支並切換到這個分支上
  2. 正常的開發代碼,把天天開發的任務都先提交到本身的分支上
  3. 提交到遠程倉庫上:

    把本地本身分支DEV中的內容,合併到本地本身的MASTER 分支下

    把本身本地建立的分支刪除(能夠不刪除,可是有的公司不但願遠程中出現分支,或者避免開發人員的分支衝突,提交以前都要把本身建立的分支刪除掉)

  4. 和第一種只使用MASTER分支同樣了,把本地最新合併的MASTER分支代碼,提交到遠程倉庫的MADTER下,(衝突合併便可)
  • 操做分支的基礎命令:

    $ git branch  //查看現有的分支
    $ git branch xxx  //建立一個新的分支(當切換到某個分支上的時候,會把當前MASTER分支中的新信息同步到這個分支上)
    $ git checkout xxx  //切換到某個分支上
    $ git checkout -b xxx  //建立一個新的分支而且切換到這個分支上
    $ git branch -D xxx  //刪除某個分支(必定要切換到其餘分支上才能夠刪除當前分支)
    $ git merge xxx  //合併分支內容
    $ git log --graph / --oneline  //再有分支的狀況下,能夠更清楚地查看分支的提交和合並內容(瞭解就好)

GitHub界面操做

給別的倉庫提交代碼修改或建議

  1. 首先fork別人的倉庫

    • 把別人的倉庫克隆一份如出一轍的,放到本身的帳號下,變爲本身的倉庫(咱們平時能夠修改本身倉庫的源碼)
    • fork的倉庫和別人的原始的倉庫會默認創建一些關係,咱們能夠把本身倉庫中和別人不同的地方,提交給別人,用(pull-request)
  2. 把本身fork的倉庫,克隆到本地

    • 之後本身有一些新的代碼心得,能夠本身嘗試去修改,而後同步到本身fork的倉庫中
  3. 在github中點擊 new pull request

GitHub還能夠發佈非後臺項目

GitHub只提供了web站點的發佈,後臺項目沒有提供必要的環境

  • 把整個倉庫做爲一個項目發佈(這種模式不經常使用)
  • master是項目代碼,gh-pages分支下存儲的是項目預覽頁面的代碼

    其餘人克隆研究的是master分支下的代碼

    看介紹頁面,看的是gh-pages分支下的代碼

    1. 建立一個倉庫
    2. 把倉庫克隆到本地
    3. 把源碼傳到master分支上
    4. 在本地倉庫中建立gh-pages分支
    5. 把介紹頁面放在gh-pages分支下
    6. 把介紹頁面的內容上傳到github的gh-pages分之下

    訪問頁面:http://用戶名.github.io/倉庫... (若是頁面是index能夠忽略不寫)

把本身寫的純靜態頁面項目經過github地址能夠看到頁面效果

第一步,在github上新建一個倉庫,把遠程倉庫經過 git clone xxx克隆到本地

第二步,把本身寫好的做品放在本地倉庫中

第三步,經過git add -A , git commit -m, git push origin master 三步操做,把本身的項目同步到遠程倉庫github中

  • 之後修改後,從新執行這三步推送便可

在投簡歷的時候,把網址 https://用戶名.github.io/倉庫名 寫到簡歷上就能夠訪問到頁面效果。若是以爲地址太長很差記,也能夠經過草料二維碼 ,來製做本身喜歡的二維碼

相關文章
相關標籤/搜索