DOM事件
Git是什麼?
git是一個版本控制系統。其它的版本控制系統:CVS、Subversion (SVN)或 Perforce。
git的三種狀態
已提交(committed)、已修改(modified)和已暫存(staged)。
-
已修改表示修改了檔案,但還沒儲存到資料庫中。
-
已暫存表示對一個已修改檔案的當前版本做了標記,使之包含在下次提交的快照中。
-
已提交表示資料已經安全地儲存在本地資料庫中。
這會讓我們的 Git 專案擁有三個階段:工作區、暫存區以及 Git 目錄。
工作區是對專案的某個版本獨立提取出來的內容。 這些從 Git 倉庫的壓縮資料庫中提取出來的檔案,放在磁碟上供你使用或修改。
暫存區是一個檔案,儲存了下次將要提交的檔案列表資訊,一般在 Git 倉庫目錄中。 按照 Git 的術語叫做“索引”,不過一般說法還是叫“暫存區”。
Git 倉庫目錄是 Git 用來儲存專案的元資料和物件資料庫的地方。 這是 Git 中最重要的部分,從其它計算機克隆倉庫時,複製的就是這裡的資料。
基本的 Git 工作流程如下:
-
在工作區中修改檔案。
-
將你想要下次提交的更改選擇性地暫存,這樣只會將更改的部分新增到暫存區。
-
提交更新,找到暫存區的檔案,將快照永久性儲存到 Git 目錄。
如果 Git 目錄中儲存著特定版本的檔案,就屬於已提交狀態。 如果檔案已修改並放入暫存區,就屬於已暫存
初次執行Git前的配置
Git 自帶一個git config
的工具來幫助設定控制 Git 外觀和行為的配置變數。 這些變數儲存在三個不同的位置:
/etc/gitconfig
檔案: 包含系統上每一個使用者及他們倉庫的通用配置。 如果在執行git config
時帶上--system
選項,那麼它就會讀寫該檔案中的配置變數。 (由於它是系統配置檔案,因此你需要管理員或超級使用者許可權來修改它。)~/.gitconfig
或~/.config/git/config
檔案:只針對當前使用者。 你可以傳遞--global
選項讓 Git 讀寫此檔案,這會對你係統上所有- 當前使用倉庫的 Git 目錄中的
config
檔案(即.git/config
):針對該倉庫。 你可以傳遞--local
選項讓 Git 強制讀寫此檔案,雖然預設情況下用的就是它。。 (當然,你需要進入某個 Git 倉庫中才能讓該選項生效。)
.git/config
的配置變數會覆蓋/etc/gitconfig
中的配置變數。檢視所用配置及他們所在的資料夾
git config --list --show-origin
git config --list(檢查配置資訊)
使用者資訊
安裝完 Git 之後,要做的第一件事就是設定你的使用者名稱和郵件地址。 這一點很重要,因為每一個 Git 提交都會使用這些資訊,它們會寫入到你的每一次提交中,不可更改:
git config --global user.name
git config --global user.email
如果使用了--global
選項,那麼該命令只需要執行一次,因為之後無論你在該系統上做任何事情,Git 都會使用那些資訊。當你想針對特定專案使用不同的使用者名稱稱與郵件地址時,可以在那個專案目錄下執行沒有--global
選項的命令來配置。
文字編輯器
如果想使用不同的文字編輯器,例如Emacs:
git config --global core.editor emacs
git config<key> :檢查Git的某一項配置
獲取幫助
git help <verb>
git <verb> --help
man git-<verb>
獲得git config
命令的手冊,執行:
git help config
獲取Git
獲取Git倉庫:
-
將尚未進行版本控制的本地目錄轉換為 Git 倉庫;
-
從其它伺服器克隆一個已存在的 Git 倉庫。
在已存在目錄中初始化倉庫
如果有一個尚未進行版本控制的專案目錄,想要用Git來控制它,首先要進入該專案目錄
在Linux上:
cd /home/user/my_project
在macOs上:
cd /Users/user/my_project
在windows上:
cd /c/user/my_project
之後執行:
git init
該命令將建立一個名為.git
的子目錄,這個子目錄含有你初始化的 Git 倉庫中所有的必須檔案,這些檔案是 Git 倉庫的骨幹。 但是,在這個時候,我們僅僅是做了一個初始化的操作,你的專案裡的檔案還沒有被跟蹤。
如果在一個已存在檔案的資料夾(而非空資料夾)中進行版本控制,你應該開始追蹤這些檔案並進行初始提交。 可以通過
git add
命令來指定所需的檔案來進行追蹤,然後執行git commit
git add *.c
git add LICENSE
git commit -m 'initial project version'
克隆現有的倉庫
git clone https://github.com/libgit2/libgit2
記錄每次更新到倉庫
每一個檔案的兩種狀態:已跟蹤或未跟蹤。
檢查當前檔案狀態
git status
如果顯示為
則所有已跟蹤檔案在上次提交後都未被更改過,也說明當前目錄下沒有出現任何處於未跟蹤狀態的新檔案,否則 Git 會在這裡列出來。
跟蹤新檔案
git add
只要在Changes to be committed
這行下面的,就說明是已暫存狀態。 如果此時提交,那麼該檔案在你執行git add
時的版本將被留存在後續的歷史記錄中。
暫存已修改的檔案
如果修改了一個的已被跟蹤的檔案,然後執行git status
命令,會看到下面內容
只要在Changes not staged commit
這行下面的,說明已跟蹤檔案的內容發生了變化,但還沒有放到暫存區。 要暫存這次更新,需要執行git add
命令。這是個多功能命令:可以用它開始跟蹤新檔案,或者把
已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等。
狀態簡覽
git status -s
git status --short
??
:新新增的未跟蹤檔案
A
:新新增到暫存區中的檔案
M
:修改過的檔案前面有標記
忽略檔案
建立一個名為.gitignore
的檔案,列出要忽略的檔案的模式。
*. Git 忽略所有以.o
或.a
結尾的檔案。一般這類物件檔案和存檔檔案都是編譯過程中出現的。*~ Git 忽略所有名字以波浪符(~)結尾的檔案,許多文字編輯軟體(比如 Emacs)都用這樣的檔名儲存副本。 此外,你
可能還需要忽略 log,tmp 或者 pid 目錄,以及自動生成的文件等等。
檔案.gitignore
的格式規範:
-
所有空行或者以
#
開頭的行都會被 Git 忽略。 -
可以使用標準的 glob 模式匹配,它會遞迴地應用在整個工作區中。
-
匹配模式可以以(
/
)開頭防止遞迴。 -
匹配模式可以以(
/
)結尾指定目錄。 -
要忽略指定模式以外的檔案或目錄,可以在模式前加上歎號(
!
)取反。
檢視已暫存和未暫存的修改
git diff
此命令比較的是工作目錄中當前檔案和暫存區域快照之間的差異。 也就是修改之後還沒有暫存起來的變化內容
git diff --staged
此命令是檢視已暫存的將要新增到下次提交裡的內容,這條命令將比對已暫存檔案與最後一次提交的檔案差異
提交更新
每次準備提交前,先用git status
看下,你所需要的檔案是不是都已暫存起來了, 然後再執行提交命令
git commit
這樣會啟動你選擇的文字編輯器來輸入提交說明,編輯器會顯示類似下面的文字資訊:
更詳細的內容修改提示可以用git commit-v
選項檢視,這會將你所作的更改的 diff 輸出呈現在編輯器中,以便讓你知道本次提交具體作出哪些修改。
你也可以在commit
命令後新增-m
選項,將提交資訊與命令放在同一行,如下所示
跳過使用暫存區域
git commit
-a
Git 就會自動把所有已經跟蹤過的檔案暫存起來一併提交,從而跳過git add
步驟
移除檔案
git rm
要從 Git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除),然後提交。 可以用git rm
命令完成此項工作,並連帶從工作目錄中刪除指定的檔案,這樣以後就不會出現在未跟蹤檔案清單中了。
如果只是簡單地從工作目錄中手工刪除檔案,執行git status
時就會在 “Changes not staged for commit” 部分(也就是未暫存清單)看到:
然後再執行git rm
記錄此次移除檔案的操作:
刪除之前修改過或已經放到暫存區的檔案
git rm
-f
讓檔案保留在磁碟,但是並不想讓 Git 繼續跟蹤
git rm --cached
移動檔案
git mv
其實,執行git mv
就相當於運行了下面三條命令:
檢視提交歷史
git log
不傳入任何引數的預設情況下,git log
會按時間先後順序列出所有的提交,最近的更新排在最上面。 正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明。
git log -p
或--patch
顯示每次提交所引入的差異(按補丁的格式輸出)
git log -p-2(顯示最近的兩次提交)
git log --stat提交的簡略統計資訊
git log --pretty
=format:"%h - %an, %ar : %s" 可以定製記錄的顯示格式。 這樣的輸出對後期提取分析格外有用——因為你知道輸出的格式不會隨著 Git 的更新而發生改變:
當oneline
或format
與另一個log
選項--graph
結合使用時尤其有用 這個選項添加了一些 ASCII 字串來形象地展示你的分支、合併歷史
限制輸出長度
git log --since=2.weeks
還可以過濾出匹配指定條件的提交。 用--author
選項顯示指定作者的提交,用--grep
選項搜尋提交說明中的關鍵字。
git log -S 它接受一個字串引數,並且只會顯示那些新增或刪除了該字串的提交
撤消操作
有時候我們提交完了才發現漏掉了幾個檔案沒有新增,或者提交資訊寫錯了。 此時,可以執行帶有--amend
選項的提交命令來重新提交:
git commit --amend將暫存區中的檔案提交。 如果自上次提交以來你還未做任何修改(例如,在上次提交後馬上執行了此命令),那麼快照會保持不變,而你所修改的只是提交資訊。
取消暫存的檔案
git reset
撤消對檔案的修改
git checkout
遠端倉庫的使用
檢視遠端倉庫
git remote
git remote -v顯示需要讀寫遠端倉庫使用的 Git 儲存的簡寫與其對應的 URL如果你的遠端倉庫不止一個,該命令會將它們全部列出。
新增遠端倉庫
git remote add <shortname> <url>
從遠端倉庫中抓取與拉取
git fetch <remote>
推送到遠端倉庫
git push origin master
檢視某個遠端倉庫
git remote show origin
遠端倉庫的重新命名與移除
git remote rename
git remote remove paul