Git的基礎概念及使用

Git的基礎概念css

  1. 什麼是Git
    Git 是一個開源的分佈式版本控制系統,是目前世界上最早進最流行的版本控制系統。能夠快速高效地處理從很小到很是大的項目版本管理。
    特色:項目越大越複雜,協同開發者越多,越能體現出 Git 的高性能高可用性
  2. Git的特性
    Git之因此快速和高效,主要依賴於它的以下兩個特性:html

    ① 直接記錄快照,而非差別比較
    
    ② 近乎全部操做都是本地執行
  3. SVN 的差別比較
    傳統的版本控制系統(例如 SVN)是基於差別的版本控制,它們存儲的是一組基本文件每一個文件隨時間逐步累積的差別
    SVN的好處 節省磁盤空間
    SVN缺點 耗時、效率低在每次切換版本的時候,都須要在基本文件的基礎上,應用每一個差別,從而生成目標版本對應的文件
  4. Git 的記錄快照
    Git 快照是在原有文件版本的基礎上從新生成一份新的文件,相似於備份。爲了效率,若是文件沒有修改,Git再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。
    Git快照缺點 佔用磁盤空間較大
    Git快照優勢 版本切換時很是快,由於每一個版本都是完整的文件快照,切換版本時直接恢復目標版本的快照便可。
    特色 空間換時間,近乎全部的操做都只需訪問本地文件和資源通常不須要來自網上 其餘計算機的信息
    特性git

    • 斷網後依舊能夠在本地對項目進行版本管理
    • 聯網後,把本地修改的記錄同步到雲端服務器便可
  5. Git 中的三個區域
    使用 Git 管理的項目,擁有三個區域,分別是工做區暫存區Git 倉庫
  6. Git 中的三種狀態正則表達式

    • 已修改 modified
      表示修改了文件,但還沒將修改的結果放到暫存區
    • 已暫存 staged
      表示對已修改文件的當前版本作了標記,使之包含在下次提交的列表中
    • 已提交 committed
      表示文件已經安全地保存在本地的 Git 倉庫中
      注意:shell

      • 工做區的文件被修改了,但尚未放到暫存區,就是已修改狀態。
      • 若是文件已修改並放入暫存區,就屬於已暫存狀態。
      • 若是 Git 倉庫中保存着特定版本的文件,就屬於已提交狀態。
  7. 基本的 Git 工做流程以下緩存

    ① 在工做區中修改文件
    
       ② 將你想要下次提交的更改進行暫存
    
       ③ 提交更新,找到暫存區的文件,將快照永久性存儲到 Git 倉庫
  8. Git基礎
    安裝並配置 Git 點擊下載相關的Git版本
  9. 配置用戶信息
    安裝完 Git 以後,要作的第一件事就是設置本身的用戶名郵件地址。由於經過 Git 對項目進行版本管理的時候,Git 須要使用這些基本信息,來記錄是誰對項目進行了操做:安全

    git config --global user.name "yourname"
    git config --global user.email "yourname@qq.com"

    注意 若是使用了 --global 選項,那麼該命令只須要運行一次,便可永久生效。服務器

  10. 檢查配置信息
    按如此終端命令,快速的查看 Git 的全局配置信息:分佈式

    # 查看全部的全局配置項
    git config --list --global
    # 查看指定的全局配置項
    git config user.name
    git config user.email
  11. 獲取幫助信息性能

    # 想要獲取 git config 命令的快速參考
    git config -h
  12. 獲取 Git 倉庫的兩種方式
    ① 將還沒有進行版本控制的本地目錄轉換Git 倉庫
    ​ ② 從其它服務器克隆一個已存在的 Git 倉庫
    以上兩種方式都可以在本身的電腦上獲得一個可用的 Git 倉庫
  13. 在現有目錄中初始化倉庫
    1. 在項目文件所在目錄下打開終端
    2. 執行 git init 命令初始化文件 (會生成.git隱藏文件夾 本機是看不到的)
    3. 工做區中的文件的4種狀態 ,這四種狀態共分爲兩大類(被Git管理和未跟蹤兩種)

    1.初始的文件是未跟蹤狀態 使用 git status 能夠查看到文件出如今 `Untracked files`(未跟蹤的文件) 下面
    2.以精簡的方式顯示文件狀態
    ` git status -s //未跟蹤狀態 精簡的方式是以兩個紅色?開頭
      git status // 文件的顏色是 紅色的
    `
    3.須要被Git託管的話 使用命令 `git add '圖書管理.html'`
    4.使用 git status 能夠查看狀態 ,會看到 `圖書管理.html` 文件在 `Changes to be committed` 這行的下面,說明已被跟蹤,並處於暫存狀態
    `
    git status \-s //精簡的方式是以 一個綠色A?開頭,這裏是新提交的 也就是第一次提交
    git status  // 文件的顏色是 綠色的
    `
    5.此時文件再暫存區域 須要使用 git commit -m 命令將文件提交到Git倉庫
    6.`-m` 選項後面是本次的提交消息,用來對提交的內容作進一步的描述
    `git commit \-m "新建了index.html 文件"`
    7.提交以後查看狀態 git status
    `
    On branch master
    nothing to commit working tree clean
    //證實工做區中全部的文件都處於‘未修改的’的狀態 沒有文件須要提交
    `
    8.對已提交的文件進行修改  目前,`圖書管理.html` 文件已經被 `Git` 跟蹤,而且工做區和 `Git` 倉庫中的 `圖書理.html` 文件內容保持一致。當咱們修改了工做區中 `圖書管理.html` 的內容以後,再次運行 `git status` 和 `git status -s` 命令
    `文件 `圖書管理.html` 出如今 `Changes not staged for commit` 這行下面, 說明已跟蹤文件的內容發生了變化,但尚未放到暫存區。`
    **注意** 修改過的、沒有放入暫存區的文件前面有紅色的 **M** 標記。
    9.暫存已修改的文件目前,
    工做區中的 `圖書管理.html` 文件已被修改,若是要暫存此次修改,須要再次運行 `git add` 命令,這個命令是個多功能的命令,主要有以下 3 個功效:
    ① 能夠用它開始跟蹤新
    ② 把已跟蹤的、且已修改的文件放到暫存區
    ③ 把有衝突的文件標記爲已解決狀態
    `查看狀態 文件\`圖書管理.html\`出如今\`changes to be commited\` 說明已經被修改的文件存儲在緩存中 顏色是綠色 若是是精簡的話 前面是綠色的M`
    10.提交已暫存的文件
    `再次運行 \`git commit \-m "提交消息"\` 命令, 便可將暫存區中記錄的 \`圖書管理.html\` 的快照, 提交到 \`Git\` 倉庫中進行保存:`
    11.撤銷修改的內容
    `git checkout \-- 圖書管理.html // 此時文件尚未進入暫存 // 若是進入緩存 這個命令是起不了做用的`
    12.撤銷緩存中內容
    `git reset HEAD 圖書管理.html. //撤銷暫存中的某一個文件 git reset HEAD . //將緩存中的全部的文件都撤銷下來`
    13.跳過使用暫存區域
    ``Git` 標準的工做流程是`工做區 → 暫存區 → Git 倉庫`,但有時候這麼作略顯繁瑣,此時能夠跳過暫存區,直接將工做區中的修改提交到 `Git` 倉庫,這時候 `Git` 工做的流程簡化爲了`工做區 → Git 倉庫`  `Git` 提供了一個跳過使用暫存區域的方式, 只要在提交的時候,給 `git commit` 加上 `-a` 選項,`Git` 就會自動把全部已經跟蹤過的文件暫存起來一併提交,從而跳過 `git add` 步驟:`
    `git commit \-a \-m "日誌信息"`
  14. 移除文件
    從 Git 倉庫中移除文件的方式有兩種:

    • 從 Git 倉庫和工做區中同時移除對應的文件
    • 只從 Git 倉庫中移除指定的文件,但保留工做區中對應的文件
    # 從 Git倉庫和工做區中同時移除 圖書管理.js 文件
    git rm -f index.js
    # 只從 Git 倉庫中移除 index.css,但保留工做區中的 圖書管理.css 文件
    git rm --cached 圖書管理.css
  15. 忽略文件

    • 通常咱們總會有些文件無需歸入 Git 的管理,也不但願它們總出如今未跟蹤文件列表。 在這種狀況下,咱們能夠建立一個名爲 .gitignore 的配置文件,列出要忽略的文件的匹配模式。
    • 文件 .gitignore 的格式規範以下:

      ① 以 **# 開頭**的是註釋
      
      ② 以 **/ 結尾**的是目錄
      
      ③ 以 **/ 開頭**防止遞歸
      
      ④ 以 **! 開頭**表示取反
      
      ⑤ 可使用 **glob 模式**進行文件和文件夾的匹配(glob 指簡化了的正則表達式)
    • 星號 * 匹配零個或多個任意字符
    • [abc] 匹配任何一個列在方括號中的字符 (此案例匹配一個 a 或匹配一個 b 或匹配一個 c)
    • 問號 ? 只匹配一個任意字符
    • 兩個星號 ** 表示匹配任意中間目錄(好比 a/**/z 能夠匹配 a/z 、 a/b/z 或 a/b/c/z 等)
    • 在方括號中使用短劃線分隔兩個字符, 表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)
  16. .gitignore 文件的例子

    #忽略全部的.a文件
    *.a
    # 即便前面忽略了 .a文件 但跟蹤全部的lib.a
    !lib.a
    # 只忽略當前目錄下的TODO文件 而不忽略subdir/TODO
    /TODO
    #忽略任何目錄下的名爲bulid的文件夾
    bulid/
    #忽略doc/notes.txt 但不忽略doc/server/arr.txt
    doc/*.txt
    # 忽略doc/目錄及其全部子目錄的 .pdf 文件
    doc/**/*.pdf
  17. 查看提交的歷史

    # 按時間前後順序列出全部的提交歷史,最近的提交在最上面
    git log
    
    # 只展現最新的兩條提交歷史,數字能夠按需進行填寫
    git log -2
    
    # 在一行上展現最近兩條提交歷史的信息
    git log -2 --pretty=oneline
    
    # 在一行上展現最近兩條提交歷史信息,並自定義輸出的格式
    # &h 提交的簡寫哈希值  %an 做者名字  %ar 做者修訂日誌  %s 提交說明
    git log -2 --pretty=format:"%h | %an | %ar | %s"
  18. 回退到指定的版本

    # 在一行上展現全部的提交歷史
    git log --pretty=oneline
    
    # 使用 git reset --hard 命令,根據指定的提交 ID 回退到指定版本
    git reset --hard <CommitID>
    
    # 在舊版本中使用 git reflog --pretty=oneline 命令,查看命令操做的歷史
    git reflog --pretty=oneline
    
    # 再次根據最新的提交 ID,跳轉到最新的版本
    git reset --hard <CommitID>
相關文章
相關標籤/搜索