Git學習筆記

簡介

看書ing 《Git版本控制管理(第二版)》,記錄下筆記
包括快捷鍵,章節等git


筆記

第三章

指令:config配置

git config -l //查看配置
git config -l --global //查看全局配置

git config 名字 值 //設置字段
git config 名字 值 --blobal //設置全局字段

git config --unset 名字 //刪除字段
git config --unset 名字 --global //刪除全局字段

git config alias.別名 指令 --global //全局設置別名
複製代碼

第四章 對象庫圖示

4.1.2 git數據類型

git對象庫裏只有四類數據:markdown

  1. 塊(bolb):二進制大對象,只儲存元數據,不帶有任何其餘信息
  2. 目錄樹(tree):表明一層目錄信息,記錄bolb標識符,路徑名,目錄下文件的全部元數據,也能夠遞歸引用其餘tree
  3. 提交(commit):保存每次提交變化的元數據,包括做者等相信信息,每次commit指向一個tree
  4. 標籤(tag):給提交打tag

4.3.2 對象、散列、bolb

git建立對象的時候,git不關心文件名,只對元數據進行sha1計算出散列值,把散列值的十六進制表示做爲文件名放進對象庫中,在.git/objects目錄下,並用第一個字節作目錄名分割開編輯器

能夠用find .查看倉庫目錄
而後對objects目錄下的某個bolb,使用git cat- file -p 散列值來查看該塊的原始內容(若是是引用樹的話,會打印引用的樹的信息)
散列值太長很差記,能夠用git rev-parse 散列值前幾位/tag名打印完整的散列值
能夠用git ls-files -s打印暫存的文件fetch

第五章 文件管理和索引

5.9 git中對象模型和文件的詳細視圖

示意圖:

image.png

修改本地文件並提交時git變化示意圖

  1. 原git狀態:
    本地兩個文件,已提交,索引(暫存區)樹與提交樹指向相同 image.pngspa

  2. 本地編輯了file1:
    此時索引與提交樹是乾淨的,可是本地髒了,git status顯示unstagedfile image.png命令行

  3. 執行git add file1:
    把file1提交到了暫存區,本地變乾淨了,可是暫存區髒了(跟對象庫中最新的提交不一致了),git status顯示add file,git會根據修改後的file1建立新的bold,而後將索引樹從file1 bolb指向新的bolb,file2由於沒變,因此仍舊指向file2 bolb。 image.png版本控制

  4. 執行git commit:
    把索引內容提交到分支,索引跟對象庫中內容一致,倉庫從新干淨。
    執行commit時,git會先根據暫存區的樹建立新的提交對象樹(雙線三角),而後建立提交對象(雙線圓)指向該樹,同時新的提交對象指向舊的提交對象,master指向新提交對象,此時最新的提交對象的樹,與索引的樹指向的內容一致 image.png指針

第六章 提交

6.2.3 相對提交名

示意圖:
image.png
HEAD指代當前分支最新的提交日誌

  1. ^指代不一樣分支的父提交(不一樣分支),~指代父提交的父提交(同一個分支)
  2. ^1 == ~1 由於都是指代當前提交的第一個父提交
  3. ^2 != ~2 由於^2指代的是第二個分支上的父提交,~2指代的是父提交的父提交
  4. ^^ == ~~ == ~2 由於^^指代的的是當前的第一個分支上的父提交(~)的第一個分支上的父提交(~~)
  5. 注意^2 != ^^詳情請上面示意圖

6.3 查看提交記錄

  1. git log == git log HEAD 緣由:若是git log後面跟了某個提交名,就會從該提交開始回溯顯示歷史
  2. git log HEAD .. HEAD~2 會打印從當前提交到前兩個分支的提交,區間打印法能夠使用since .. until這樣來打印某一段提交記錄
  3. 經常使用--pretty=short 顯示簡略信息
  4. 經常使用--abbrev-commit 顯示簡寫的散列ID
  5. 經常使用-p 顯示提交的變動內容
  6. 經常使用-n (n爲數值)顯示打印的行數
  7. 經常使用--graph顯示提交記錄的線圖

6.3.2 提交圖

gitk 指令顯示提交圖 強烈建議查看提交圖使用sublime merge,直觀方便,敲命令行太痛苦了code

6.4 查找提交

git bisect 定位錯誤用,具體沒用過,待研究
git blame 也是定位錯誤用,也沒用過。。。

第八章 diff

8.1 git diff 格式

  • git diff:顯示工做目錄和索引之間的差別,本地目錄是髒的時候使用
  • gif diff commit:顯示工做目錄與制定提交之間的差別,經常使用HEAD或者某個分支做爲commit
  • git diff --cached commit:顯示索引中的變動和給定提交之間的差別,省略commit的話會默認比對HEAD
  • git diff commit1 commit2:顯示任意兩個提交之間的差別,會忽略索引和工做目錄,比較對象庫中的兩個樹
  • git diff commit1 commit [目錄名/文件名]能夠顯示某目錄下或者文件的差別
  • git diff commit1 .. commit2:等同於上面,比較兩個提交之間的差別

參數: --stat:顯示統計差別,不顯示具體內容差別 --color:試用多顏色輸出 -w或者--ignore-all-space:比較時忽略空白字符 -S"搜索字符串":能夠展現包含字符串的提交的不一樣

第九章 merge

9.1.3 有衝突的合併

git merge碰到有衝突時,會終止合併,並提示衝突文件在哪兒
處理完衝突文件後,直接執行git commit(不帶參數),會繼續merge,提示輸入merge commit的文案,保存後merge完成

第十章 更改提交

10.2 使用git reset

能夠把HEAD指針指向任意一個提交,有三個參數:

  • --soft 索引工做目錄不變,git status會發現索引有內容(索引跟HEAD內容不一樣),工做目錄無內容(工做目錄與索引內容相同)
  • --mixed 索引跟着HEAD一塊兒改變指向新的提交,git status會發現索引無內容(索引跟HEAD相同),工做目錄顯示有內容(工做目錄與索引內容不一樣)
  • --hard HEAD,索引,工做目錄一塊兒改變,git status看不到任何內容

10.6 修改最新提交

git commit --amend 會打開編輯器,修改上次提交信息後,把此次的索引裏的內容提交到上次提交的內容中
後面能夠加參數--author [做者名 <郵箱>], 直接修改本次提交的做者,郵箱

10.7 變基提交

前向移植:

git rebase [目標分支]:把當前分支的依賴,改到目標分支的HEAD
git rebase [目標分支] [遷移分支分支]:等同於上面

例子: git rebase master topic image.png

遷移提交: git rebase --onto [目標分支] [遷移起點] [遷移分支]

例子:git rebase --onto master maint~ feature

image.png

注意,變基操做一次會遷移一個提交,每次遷移均可能會有衝突,出現了就要處理衝突:

  1. 處理衝突後,使用git rebase --continue繼續變基操做,
  2. 使用git rebase --skip跳過當前提交,繼續遷移下一個,但可能會致使滾雪球般的錯誤
  3. 使用git rebase --abort來終止變基,版本庫會恢復成變基前的狀態

交互式變基操做: git rebase -i [交互終止提交]:會打開一個文本編輯器來讓你變動如何處理到[交互終止提交]之間的變基處理

image.png

10.7.2 變基與合併

image.png

  • git pull = git fetch + git merge
  • git pull --rebase = git fetch + git rebase

區別:merge會把兩個分支合併成一個提交,提交圖會是兩根線,而rebase會吧當前分支變基到目標分支的最新節點上,提交圖會是一直線,更好看

image.png

第十一章 儲藏和引用日誌

11.1 儲藏

  • git stash save [文字消息]:暫存工做區,會順序入棧
  • git stash:等同於git stash save,會直接儲存當前工做區,而且不會增長文字消息
  • git stash pop [stash名字/index]:取出指定的暫存,沒指定名字的話會取出最新的,名字/index能夠爲:
    1. stash名字:stash@{0}
    2. stash的索引:直接0,1,2,用git stash list能夠獲取
  • git stash list:查看全部暫存
  • git stash show [stash名字/index]:查看某個暫存所變化的內容,參數- p 能夠查看具體的文件內容
  • git stash drop [stash名字/index]:丟棄某個暫存

更新ing

相關文章
相關標籤/搜索