看書ing 《Git版本控制管理(第二版)》,記錄下筆記
包括快捷鍵,章節等git
git config -l //查看配置
git config -l --global //查看全局配置
git config 名字 值 //設置字段
git config 名字 值 --blobal //設置全局字段
git config --unset 名字 //刪除字段
git config --unset 名字 --global //刪除全局字段
git config alias.別名 指令 --global //全局設置別名
複製代碼
git對象庫裏只有四類數據:markdown
git建立對象的時候,git不關心文件名,只對元數據進行sha1計算出散列值,把散列值的十六進制表示做爲文件名放進對象庫中,在.git/objects目錄下,並用第一個字節作目錄名分割開編輯器
能夠用
find .
查看倉庫目錄
而後對objects目錄下的某個bolb,使用git cat- file -p 散列值
來查看該塊的原始內容(若是是引用樹的話,會打印引用的樹的信息)
散列值太長很差記,能夠用git rev-parse 散列值前幾位/tag名
打印完整的散列值
能夠用git ls-files -s
打印暫存的文件fetch
原git狀態:
本地兩個文件,已提交,索引(暫存區)樹與提交樹指向相同 spa
本地編輯了file1:
此時索引與提交樹是乾淨的,可是本地髒了,git status顯示unstagedfile 命令行
執行git add file1:
把file1提交到了暫存區,本地變乾淨了,可是暫存區髒了(跟對象庫中最新的提交不一致了),git status顯示add file,git會根據修改後的file1建立新的bold,而後將索引樹從file1 bolb指向新的bolb,file2由於沒變,因此仍舊指向file2 bolb。 版本控制
執行git commit:
把索引內容提交到分支,索引跟對象庫中內容一致,倉庫從新干淨。
執行commit時,git會先根據暫存區的樹建立新的提交對象樹(雙線三角),而後建立提交對象(雙線圓)指向該樹,同時新的提交對象指向舊的提交對象,master指向新提交對象,此時最新的提交對象的樹,與索引的樹指向的內容一致 指針
示意圖:
HEAD指代當前分支最新的提交日誌
gitk 指令顯示提交圖 強烈建議查看提交圖使用sublime merge,直觀方便,敲命令行太痛苦了code
git bisect 定位錯誤用,具體沒用過,待研究
git blame 也是定位錯誤用,也沒用過。。。
參數: --stat:顯示統計差別,不顯示具體內容差別 --color:試用多顏色輸出 -w或者--ignore-all-space:比較時忽略空白字符 -S"搜索字符串":能夠展現包含字符串的提交的不一樣
git merge碰到有衝突時,會終止合併,並提示衝突文件在哪兒
處理完衝突文件後,直接執行git commit(不帶參數),會繼續merge,提示輸入merge commit的文案,保存後merge完成
能夠把HEAD指針指向任意一個提交,有三個參數:
git commit --amend 會打開編輯器,修改上次提交信息後,把此次的索引裏的內容提交到上次提交的內容中
後面能夠加參數--author [做者名 <郵箱>], 直接修改本次提交的做者,郵箱
前向移植:
git rebase [目標分支]:把當前分支的依賴,改到目標分支的HEAD
git rebase [目標分支] [遷移分支分支]:等同於上面
例子: git rebase master topic
遷移提交: git rebase --onto [目標分支] [遷移起點] [遷移分支]
例子:git rebase --onto master maint~ feature
注意,變基操做一次會遷移一個提交,每次遷移均可能會有衝突,出現了就要處理衝突:
交互式變基操做: git rebase -i [交互終止提交]:會打開一個文本編輯器來讓你變動如何處理到[交互終止提交]之間的變基處理
- git pull = git fetch + git merge
- git pull --rebase = git fetch + git rebase
區別:merge會把兩個分支合併成一個提交,提交圖會是兩根線,而rebase會吧當前分支變基到目標分支的最新節點上,提交圖會是一直線,更好看
更新ing