Git的基礎概念css
Git
是一個開源的分佈式版本控制系統,是目前世界上最早進、最流行的版本控制系統。能夠快速高效地處理從很小到很是大的項目版本管理。 Git的特性 Git
之因此快速和高效,主要依賴於它的以下兩個特性:html
① 直接記錄快照,而非差別比較 ② 近乎全部操做都是本地執行
SVN
的差別比較 SVN
)是基於差別的版本控制,它們存儲的是一組基本文件和每一個文件隨時間逐步累積的差別 SVN的好處
節省磁盤空間 SVN缺點
耗時、效率低在每次切換版本的時候,都須要在基本文件的基礎上,應用每一個差別,從而生成目標版本對應的文件Git
的記錄快照
Git 快照是在原有文件版本的基礎上從新生成一份新的文件,相似於備份。爲了效率,若是文件沒有修改,Git再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。 Git快照缺點
佔用磁盤空間較大 Git快照優勢
版本切換時很是快,由於每一個版本都是完整的文件快照,切換版本時直接恢復目標版本的快照便可。 特色
空間換時間,近乎全部的操做都只需訪問本地文件和資源通常不須要來自網上 其餘計算機的信息 特性
git
Git
中的三個區域 Git
管理的項目,擁有三個區域,分別是工做區、暫存區、Git
倉庫Git
中的三種狀態正則表達式
modified
staged
已提交 committed
表示文件已經安全地保存在本地的 Git 倉庫中
注意:shell
基本的 Git 工做流程以下:緩存
① 在工做區中修改文件 ② 將你想要下次提交的更改進行暫存 ③ 提交更新,找到暫存區的文件,將快照永久性存儲到 Git 倉庫
Git
基礎 配置用戶信息
安裝完 Git
以後,要作的第一件事就是設置本身的用戶名和郵件地址。由於經過 Git
對項目進行版本管理的時候,Git
須要使用這些基本信息,來記錄是誰對項目進行了操做:安全
git config --global user.name "yourname" git config --global user.email "yourname@qq.com"
注意 若是使用了 --global 選項,那麼該命令只須要運行一次,便可永久生效。服務器
檢查配置信息
按如此終端命令,快速的查看 Git 的全局配置信息:分佈式
# 查看全部的全局配置項 git config --list --global # 查看指定的全局配置項 git config user.name git config user.email
獲取幫助信息性能
# 想要獲取 git config 命令的快速參考 git config -h
Git
倉庫的兩種方式 Git
倉庫 Git
倉庫 在現有目錄中初始化倉庫
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 "日誌信息"`
移除文件
從 Git 倉庫中移除文件的方式有兩種:
# 從 Git倉庫和工做區中同時移除 圖書管理.js 文件 git rm -f index.js # 只從 Git 倉庫中移除 index.css,但保留工做區中的 圖書管理.css 文件 git rm --cached 圖書管理.css
忽略文件
Git
的管理,也不但願它們總出如今未跟蹤文件列表。 在這種狀況下,咱們能夠建立一個名爲 .gitignore
的配置文件,列出要忽略的文件的匹配模式。文件 .gitignore
的格式規範以下:
① 以 **# 開頭**的是註釋 ② 以 **/ 結尾**的是目錄 ③ 以 **/ 開頭**防止遞歸 ④ 以 **! 開頭**表示取反 ⑤ 可使用 **glob 模式**進行文件和文件夾的匹配(glob 指簡化了的正則表達式)
[abc]
匹配任何一個列在方括號中的字符 (此案例匹配一個 a 或匹配一個 b 或匹配一個 c).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
查看提交的歷史
# 按時間前後順序列出全部的提交歷史,最近的提交在最上面 git log # 只展現最新的兩條提交歷史,數字能夠按需進行填寫 git log -2 # 在一行上展現最近兩條提交歷史的信息 git log -2 --pretty=oneline # 在一行上展現最近兩條提交歷史信息,並自定義輸出的格式 # &h 提交的簡寫哈希值 %an 做者名字 %ar 做者修訂日誌 %s 提交說明 git log -2 --pretty=format:"%h | %an | %ar | %s"
回退到指定的版本
# 在一行上展現全部的提交歷史 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>