-[ ] Git中關於文件的幾個相關概念html
[ ] 文件的四種狀態git
[ ] 文件的三個區域正則表達式
對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。還有一種不在Git中的狀態,未跟蹤(untracked)。數據庫
已修改表示修改了某個文件,但尚未提交保存;express
已暫存表示把已修改的文件放在下次提交時要保存的清單中vim
已提交表示該文件已經被安全地保存在本地數據庫中了segmentfault
文件在Git工做區中,可是未被添加到Git版本中。安全
git版本控制的項目中除了本地倉庫目錄之外的,你能操做的其餘目錄。ssh
暫存區是Git倉庫中的一個概念位置編輯器
每一個項目都有一個 Git 目錄;若是 git clone
出來的話,就是其中 .git
的目錄;若是 git clone --bare
的話,新建的目錄自己就是 Git 目錄。
一個遠程倉庫一般只是一個裸倉庫(bare repository)— 即一個沒有當前工做目錄的倉庫。 由於該倉庫僅僅做爲合做媒介,不須要從磁碟檢查快照;存放的只有 Git 的資料。 簡單的說,裸倉庫就是你工程目錄內的 .git
子目錄內容,不包含其餘資料,遠程倉庫是一個獨立的倉庫。
一個本地git項目中的三個區域關係可用下圖來表示。
https://git-scm.com/downloads)
GIT的配置信息存放於三個位置
`/etc/gitconfig
文件:系統中對全部用戶都廣泛適用的配置。若使用 git config
時用 --system
選項,讀寫的就是這個文件。~/.gitconfig
文件:用戶目錄下的配置文件只適用於該用戶。若使用 git config
時用 --global
選項,讀寫的就是這個文件。.git/config
文件):這裏的配置僅僅針對當前項目有效。每個級別的配置都會覆蓋上層的相同配置,因此 .git/config
裏的配置會覆蓋 /etc/gitconfig
中的同名變量。在 Windows 系統上,Git 會找尋用戶主目錄下的 .gitconfig
文件。主目錄即 $HOME
變量指定的目錄,通常都是 C:\Documents and Settings\$USER
。此外,Git 還會嘗試找尋 /etc/gitconfig
文件,只不過看當初 Git 裝在什麼目錄,就以此做爲根目錄來定位。
使用git config命令來配置或查看一些配置,包括全局配置和項目配置。
全局配置用戶信息
git congit --global user.name 「username」
git config --global user.email 「email@email.com」
顯示git的幫助信息;學會使用這個命令,基本上git就會了一半,全掌握的話還須要理解git的全部術語概念。
git命令均可以使用git help [COMMAND]的方式顯示對應 COMMAND的用法信息
經常使用命令
git help help
顯示git幫助信息主頁
git help branch
顯示init命令的幫助信息
如下經過經常使用的git命令來簡單的說明下這些命令。
【添加用的】
git init
建立新的版本庫或者從新初始化倉庫
運行過上述命令後share目錄中的.git已經再也不是一個目錄而是下面這樣一個文件了
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 -m 「message」
注意:commit命令默認須要添加提交日誌,若是沒有該命令使用-m
參數, 會進入咱們經過core.editor指定的編輯器中, 默認vim編輯器,這個編輯器可能你們不太熟悉,因此進入這個界面可能會有點不知所措,請參考下面文檔,想使用Git?你不得不瞭解的vim編輯器
克隆一個版本庫到一個新的目錄。
git clone <repository> [path-to-dir]
克隆倉庫到指定位置
git clone -b <branchname> <repository>
克隆倉庫指定分支
git clone --recurse <repository>
克隆倉庫及關聯子項
注意: 這個倉庫能夠是本地的一個項目
<repository> 支持[GIT URLS](),有如下幾種格式
遠程
本地
【反悔用的】
重置當前HEAD到指定狀態
git reset --hard HEAD
重置當前工做目錄中未提交已暫存和已修改文件的內容
注意上述命令不會處理 untracked
狀態的文件
擴展閱讀
好比:
git checkout exist-branch-name
切換分支,HEAD就會指向切換後分支的最後一次提交
git reset --hard <commit-hash>
重置當前工做目錄到commit-hash的狀態,HEAD就會指向該提交
刪除存在於倉庫中的文件或者刪除存在於暫存區和工做目錄中的文件
要刪除僅僅在工做目錄中的文件須要使用 rm
命令
經常使用命令
git rm file
刪除已經暫存的工做目錄和暫存區中的文件
git rm --cached file
刪除暫存區文件
移動或重命名一個文件,一個目錄,或一個符號連接。
【查閱用的】
git status 查看版本庫狀態
git status
查看當前狀態
git status -s -b
簡短輸出日誌信息
image-20181010161819094.png
顯示提交和提交之間的改動,提交和工做目錄的改動等
經常使用命令
比較工做區與暫存區
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 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 <branchname>
建立一個新的分支
git branch --list
git branch
列出本地分支
git branch -a
列出所有分支包括遠程分支
git branch -d <branchname>
刪除分支
切換分支或者恢復工做目錄文件
git checkout filename
放棄單個文件的修改
git checkout .
放棄當前目錄下的修改
git checkout master
將分支切換到master
git checkout -b master
若是分支存在則只切換分支,若不存在則建立並切換到master分支
合併一個或者多個分支到你已經檢出的分支中。 而後它將當前分支指針移動到合併結果上.
git merge <not-current-branch>
將非當前分支獨有的內容合併到當前分支並生成一個新的合併提交,並HEAD指向當前分支的這個合併提交位置。
將本地分支的更新,推送到遠程主機
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
場景須要代碼演練,請參考
[ ] 添加提交
[ ] 撤銷
[ ] 代碼合併,
在實際開發中,咱們應該按照幾個基本原則進行分支管理:
master
穩定性應該最高,用來發布新版,不在master分支開發;dev
穩定次於master
,用來合併功能,也不建議在該分支開發;我的分支
協做者本身我的分支,全部本身寫的功能都在這個分支,常常須要和dev分支同步代碼。因此,團隊合做的分支看起來應該就像下圖這樣: