Git入門基礎

Git 入門指南-基礎

本章要點

-[ ] Git中關於文件的幾個相關概念

    • [ ] 文件的四種狀態

      • [ ] 已提交
      • [ ] 已修改
      • [ ] 已暫存
      • [ ] 未跟蹤
    • [ ] 文件的三個區域

      • [ ] 工作目錄
      • [ ] 暫存區
      • [ ] 本地倉庫
    • [ ] 安裝Git
    • [ ] 配置Git
    • [ ] 使用Git
    • [ ] Git使用的幾個基礎場景
    • [ ] Git的協作分支實踐

    文件相關概念

    文件的四種狀態

    對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。還有一種不在Git中的狀態,未跟蹤(untracked)。

    • 已修改

      已修改表示修改了某個文件,但還沒有提交保存;

    • 已暫存

      已暫存表示把已修改的文件放在下次提交時要保存的清單中

    • 已提交

      已提交表示該文件已經被安全地保存在本地數據庫中了

    • 未跟蹤

      文件在Git工作區中,但是未被添加到Git版本中。

    文件流轉的三個工作區域

    工作目錄

    git版本控制的項目中除了本地倉庫目錄以外的,你能操作的其他目錄。

    暫存區域

    暫存區是Git倉庫中的一個概念位置

    本地倉庫

    每個項目都有一個 Git 目錄;如果 git clone 出來的話,就是其中 .git 的目錄;如果 git clone --bare 的話,新建的目錄本身就是 Git 目錄。

    遠程倉庫

    一個遠程倉庫通常只是一個裸倉庫(bare repository)— 即一個沒有當前工作目錄的倉庫。 因爲該倉庫僅僅作爲合作媒介,不需要從磁碟檢查快照;存放的只有 Git 的資料。 簡單的說,裸倉庫就是你工程目錄內的 .git 子目錄內容,不包含其他資料,遠程倉庫是一個獨立的倉庫。

    一個本地git項目中的三個區域關係可用下圖來表示。

    clipboard.png

    安裝

    https://git-scm.com/downloads)

    clipboard.png

    配置GIT

    GIT的配置信息存放於三個位置

    • `/etc/gitconfig 文件:系統中對所有用戶都普遍適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個文件。
    • ~/.gitconfig 文件:用戶目錄下的配置文件只適用於該用戶。若使用 git config 時用 --global 選項,讀寫的就是這個文件。
    • 當前項目的 Git 目錄中的配置文件(也就是工作目錄中的 .git/config 文件):這裏的配置僅僅針對當前項目有效。每一個級別的配置都會覆蓋上層的相同配置,所以 .git/config 裏的配置會覆蓋 /etc/gitconfig 中的同名變量。

    在 Windows 系統上,Git 會找尋用戶主目錄下的 .gitconfig 文件。主目錄即 $HOME 變量指定的目錄,一般都是 C:\Documents and Settings\$USER。此外,Git 還會嘗試找尋 /etc/gitconfig 文件,只不過看當初 Git 裝在什麼目錄,就以此作爲根目錄來定位。

    git config

    使用git config命令來配置或查看一些配置,包括全局配置和項目配置。

    常用命令

    全局配置用戶信息

    git congit --global user.name “username”

    git config --global user.email “[email protected]

    git help

    顯示git的幫助信息;學會使用這個命令,基本上git就會了一半,全掌握的話還需要理解git的所有術語概念。

    git命令都可以使用git help [COMMAND]的方式顯示對應 COMMAND的用法信息

    常用命令

    git help help 顯示git幫助信息主頁

    git help branch 顯示init命令的幫助信息

    使用GIT

    以下通過常用的git命令來簡單的說明下這些命令。

    【添加用的】

    git init

    git init 創建新的版本庫或者重新初始化倉庫

    clipboard.png

    clipboard.png

    clipboard.png

    clipboard.png

    運行過上述命令後share目錄中的.git已經不再是一個目錄而是下面這樣一個文件了

    clipboard.png

    git add

    git add 添加內容到暫存區

    常用命令

    git add [<pathspec>]

    git add -n [<pathspec>] 查看add的內容,不會將文件添加進暫存區

    擴展閱讀

    一些簡單的匹配

    Glob 含義
    . 當前目錄
    ./src/*.js 當前目錄中的src子目錄下的js擴展名文件
    ./src/**/*.js 當前目錄中的src子目錄下的,以及嵌套目錄中的js擴展名文件
    !src 不匹配src文件也不匹配src目錄

    <pathspec> 支持Glob匹配。

    匹配模式有下面幾種:

    Glob(匹配模式)) 、正則表達式Wildcard character(通配符)

    通用的三個匹配符, *、?、[...]

    通配符 描述 模式舉例 匹配項 不匹配項
    * 匹配任意數量的字符 Law* Law, Laws or Lawyer GrokLaw, La or aw
    *Law* Law, GrokLaw or Lawyer. La or aw
    ? 匹配任意單個字符 ?at Cat, cat, Bat or bat at
    [abc] 匹配集合中的一個字符 [CB]at Cat or Bat cat or bat
    [a-z] 匹配區間內的一個字符 a[0-9] a0, a1 ... a9 ab, a or a10

    git commit

    給倉庫中寫入改變,或者說進行一次提交,給倉庫中寫入一條歷史記錄(歷史中記錄了改變的內容)。

    常用命令

    git commit -m “message”

    注意:commit命令默認需要添加提交日誌,如果沒有該命令使用-m參數, 會進入我們通過core.editor指定的編輯器中, 默認vim編輯器,這個編輯器可能大家不太熟悉,所以進入這個界面可能會有點不知所措,請參考下面文檔,想使用Git?你不得不瞭解的vim編輯器

    git clone

    克隆一個版本庫到一個新的目錄。

    常用命令

    git clone <repository> [path-to-dir] 克隆倉庫到指定位置

    git clone -b <branchname> <repository> 克隆倉庫指定分支

    git clone --recurse <repository> 克隆倉庫及關聯子項

    注意: 這個倉庫可以是本地的一個項目

    擴展閱讀

    <repository> 支持[GIT URLS](),有以下幾種格式

    ​ 遠程

    • ssh://[user@]host.xz[:port]/path/to/repo.git/
    • git://host.xz[:port]/path/to/repo.git/
    • http[s]://host.xz[:port]/path/to/repo.git/
    • ftp[s]://host.xz[:port]/path/to/repo.git/

      本地

    • /path/to/repo.git/
    • file:///path/to/repo.git/

    【反悔用的】

    git reset

    重置當前HEAD到指定狀態

    常用命令

    git reset --hard HEAD 重置當前工作目錄中未提交已暫存和已修改文件的內容

    注意上述命令不會處理 untracked 狀態的文件

    擴展閱讀

    HEAD

    • HEAD 指向一個提交歷史, 指向離當前index最近的一次提交,通過很多命令可以改變HEAD的指向。

    比如:

    git checkout exist-branch-name 切換分支,HEAD就會指向切換後分支的最後一次提交

    git reset --hard <commit-hash> 重置當前工作目錄到commit-hash的狀態,HEAD就會指向該提交

    git rm

    刪除存在於倉庫中的文件或者刪除存在於暫存區和工作目錄中的文件

    要刪除僅僅在工作目錄中的文件需要使用 rm 命令

    常用命令

    git rm file 刪除已經暫存的工作目錄和暫存區中的文件

    git rm --cached file 刪除暫存區文件

    git mv

    移動或重命名一個文件,一個目錄,或一個符號鏈接。

    【查閱用的】

    git status

    git status 查看版本庫狀態

    常用命令

    git status 查看當前狀態

    git status -s -b 簡短輸出日誌信息

    image-20181010161819094.png

    clipboard.png
    clipboard.png

    git diff

    顯示提交和提交之間的改動,提交和工作目錄的改動等

    常用命令

    比較工作區與暫存區

    git diff 不加參數即默認比較工作區與暫存區

    比較暫存區與最新本地版本庫(本地庫中最近一次commit的內容

    git diff --cached [<path>...]

    比較工作區與最新本地版本庫

    git diff HEAD [<path>...] 如果HEAD指向的是master分支,那麼HEAD還可以換成master

    比較工作區與指定commit-id的差異

    git diff commit-id [<path>...]

    比較暫存區與指定commit-id的差異

    git diff --cached [<commit-id>][...]

    比較兩個commit-id之間的差異

    git diff [<commit-id>][<commit-id>]

    使用git diff打補丁

    git diff > patch

    注意:patch的命名是隨意的,不加其他參數時作用是當我們希望將我們本倉庫工作區的修改輸出到patch文件中,適合修改的文件比較多,我們可以在一個單獨的文件中查看修改的內容

    git log

    顯示提交的日誌

    擴展閱讀

    格式化log, 官網

    git config --global alias.lg "log --graph --all --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(white)- %an, %ar%Creset'"

    git lg 美化版輸出

    git branch

    列出,創建和刪除分支

    常用命令

    git branch <branchname> 創建一個新的分支

    git branch --list git branch 列出本地分支

    git branch -a 列出全部分支包括遠程分支

    git branch -d <branchname> 刪除分支

    git checkout

    切換分支或者恢復工作目錄文件

    操作文件常用命令

    git checkout filename 放棄單個文件的修改

    git checkout . 放棄當前目錄下的修改

    操作分支常用命令

    git checkout master 將分支切換到master

    git checkout -b master 如果分支存在則只切換分支,若不存在則創建並切換到master分支

    git merge

    合併一個或者多個分支到你已經檢出的分支中。 然後它將當前分支指針移動到合併結果上.

    git merge <not-current-branch> 將非當前分支獨有的內容合併到當前分支並生成一個新的合併提交,並HEAD指向當前分支的這個合併提交位置。

    git push

    將本地分支的更新,推送到遠程主機

    git push origin dev 將dev分支推送到origin主機的dev分支

    git push -u origin dev 同上,附加主機分支跟蹤功能,下次推送,可以使用git push命令默認會推送到origin主機的dev分支

    git push origin :dev

    git push origin --delete dev 刪除遠程dev分支

    git pull

    從另一倉庫拉去代碼併合併到本地分支中

    常用命令

    git pull <遠程主機名> <遠程分支名>:<本地分支名> 從遠程主機的遠程分支拉去代碼併合併到本地分支中

    如果之前設置過跟蹤分支,可以直接使用 git pull

    Git 使用的幾個場景

    場景需要代碼演練,請參考

    • [ ] 添加提交

      • [ ] 獲取一個倉庫
      • [ ] 新建一個文件或者修改倉庫的內容
      • [ ] 添加文件進index
      • [ ] commit文件到倉庫
    • [ ] 撤銷

      • [ ] 從暫存區撤銷
      • [ ] 從版本庫回退
    • [ ] 代碼合併,

      • [ ] 合併不同分支代碼
      • [ ] 同分支本地提交和遠程代碼合併
    • [ ] 解決衝突

    Git協作分支實踐

    在實際開發中,我們應該按照幾個基本原則進行分支管理:

    • master 穩定性應該最高,用來發布新版,不在master分支開發;
    • dev 穩定次於master,用來合併功能,也不建議在該分支開發;
    • 個人分支 協作者自己個人分支,所有自己寫的功能都在這個分支,經常需要和dev分支同步代碼。

    所以,團隊合作的分支看起來應該就像下圖這樣:

    clipboard.png

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章