第1章 介紹 1
1.1 背景 1
1.2 Git的誕生 2
1.3 先例 4
1.4 時(shí)間線 5
1.5 名字有何含義 6
第2章 安裝Git 7
2.1 使用Linux上的二進(jìn)制發(fā)行版 7
2.1.1 Debian/Ubuntu 7
2.1.2 其他發(fā)行版 8
2.2 獲取源代碼 9
2.3 構(gòu)建和安裝 10
2.4 在Windows上安裝Git 11
2.4.1 安裝Cygwin版本的Git 12
2.4.2 安裝獨(dú)立的Git(msysGit) 13
第3章 起步 16
3.1 Git命令行 16
3.2 Git使用快速入門 18
3.2.1 創(chuàng)建初始版本庫 18
3.2.2 將文件添加到版本庫中 19
3.2.3 配置提交作者 21
3.2.4 再次提交 21
3.2.5 查看提交 21
3.2.6 查看提交差異 23
3.2.7 版本庫內(nèi)文件的刪除和重命名 23
3.2.8 創(chuàng)建版本庫副本 24
3.3 配置文件 25
3.4 疑問 27
第4章 基本的Git概念 28
4.1 基本概念 28
4.1.1 版本庫 28
4.1.2 Git對(duì)象類型 29
4.1.3 索引 30
4.1.4 可尋址內(nèi)容名稱 30
4.1.5 Git追蹤內(nèi)容 31
4.1.6 路徑名與內(nèi)容 31
4.1.7 打包文件 32
4.2 對(duì)象庫圖示 33
4.3 Git在工作時(shí)的概念 35
4.3.1 進(jìn)入.git目錄 35
4.3.2 對(duì)象、散列和blob 36
4.3.3 文件和樹 37
4.3.4 對(duì)Git使用SHA1的一點(diǎn)說明 38
4.3.5 樹層次結(jié)構(gòu) 40
4.3.6 提交 40
4.3.7 標(biāo)簽 41
第5章 文件管理和索引 43
5.1 關(guān)于索引的一切 44
5.2 Git中的文件分類 44
5.3 使用git add 46
5.4 使用git commit的一些注意事項(xiàng) 48
5.4.1 使用git commit --all 48
5.4.2 編寫提交日志消息 50
5.5 使用git rm 50
5.6 使用git mv 52
5.7追蹤重命名注解 54
5.8 .gitignore文件 55
5.9 Git中對(duì)象模型和文件的詳細(xì)視圖 56
第6章 提交 61
6.1 原子變更集 62
6.2 識(shí)別提交 62
6.2.1 絕對(duì)提交名 63
6.2.2 引用和符號(hào)引用 64
6.2.3 相對(duì)提交名 65
6.3 提交歷史記錄 67
6.3.1 查看舊提交 67
6.3.2 提交圖 70
6.3.3 提交范圍 73
6.4 查找提交 77
6.4.1 使用git bisect 78
6.4.2 使用git blame 82
6.4.3 使用Pickaxe 83
第7章 分支 84
7.1 使用分支的原因 84
7.2 分支名 85
7.3 使用分支 86
7.4 創(chuàng)建分支 88
7.5 列出分支名 89
7.6 查看分支 89
7.7 檢出分支 91
7.7.1 檢出分支的一個(gè)簡單例子 91
7.7.2 有未提交的更改時(shí)進(jìn)行檢出 92
7.7.3 合并變更到不同分支 94
7.7.4 創(chuàng)建并檢出新分支 95
7.7.5 分離HEAD分支 96
7.8 刪除分支 97
第8章 diff 100
8.1 git diff命令的格式 101
8.2 簡單的git diff例子 104
8.3 git diff和提交范圍 108
8.4 路徑限制的git diff 110
8.5 比較SVN和Git如何產(chǎn)生diff 112
第9章 合并 114
9.1 合并的例子 114
9.1.1 為合并做準(zhǔn)備 115
9.1.2 合并兩個(gè)分支 115
9.1.3 有沖突的合并 117
9.2 處理合并沖突 121
9.2.1 定位沖突的文件 122
9.2.2 檢查沖突 122
9.2.3 Git是如何追蹤沖突的 126
9.2.4 結(jié)束解決沖突 128
9.2.5 中止或重新啟動(dòng)合并 129
9.3 合并策略 130
9.3.1 退化合并 132
9.3.2 常規(guī)合并 134
9.3.3 特殊提交 135
9.3.4 應(yīng)用合并策略 136
9.3.5 合并驅(qū)動(dòng)程序 137
9.4 Git怎么看待合并 138
9.4.1 合并和Git的對(duì)象模型 138
9.4.2 壓制合并 139
9.4.3 為什么不一個(gè)接一個(gè)地合并每個(gè)變更 140
第10章 更改提交 142
10.1 關(guān)于修改歷史記錄的注意事項(xiàng) 143
10.2 使用git reset 144
10.3 使用git cherry-pick 152
10.4 使用git revert 154
10.5 reset、revert和checkout 154
10.6 修改最新提交 155
10.7 變基提交 158
10.7.1 使用git rebase -i 160
10.7.2 變基與合并 164
第11章 儲(chǔ)藏和引用日志 170
11.1 儲(chǔ)藏 170
11.2 引用日志 178
第12章 遠(yuǎn)程版本庫 183
12.1 版本庫概念 184
12.1.1 裸版本庫和開發(fā)版本庫 184
12.1.2 版本庫克隆 185
12.1.3 遠(yuǎn)程版本庫 186
12.1.4 追蹤分支 186
12.2 引用其他版本庫 187
12.2.1 引用遠(yuǎn)程版本庫 188
12.2.2 refspec 189
12.3 使用遠(yuǎn)程版本庫的示例 191
12.3.1 創(chuàng)建權(quán)威版本庫 192
12.3.2 制作你自己的origin遠(yuǎn)程版本庫 193
12.3.3 在版本庫中進(jìn)行開發(fā) 195
12.3.4 推送變更 196
12.3.5 添加新開發(fā)人員 197
12.3.6 獲取版本庫更新 199
12.4 圖解遠(yuǎn)程版本庫開發(fā)周期 203
12.4.1 克隆版本庫 204
12.4.2 交替的歷史記錄 205
12.4.3 非快進(jìn)推送 205
12.4.4 獲取交替歷史記錄 207
12.4.5 合并歷史記錄 208
12.4.6 合并沖突 208
12.4.7 推送合并后的歷史記錄 209
12.5 遠(yuǎn)程版本庫配置 209
12.5.1 使用git remote 210
12.5.2 使用git config 211
12.5.3 使用手動(dòng)編輯 212
12.6 使用追蹤分支 212
12.6.1 創(chuàng)建追蹤分支 212
12.6.2 領(lǐng)先和落后 215
12.7 添加和刪除遠(yuǎn)程分支 216
12.8 裸版本庫和git推送 217
第13章 版本庫管理 219
13.1 談?wù)劮⻊?wù)器 219
13.2 發(fā)布版本庫 220
13.2.1 帶訪問控制的版本庫 220
13.2.2 允許匿名讀取訪問的版本庫 221
13.2.3 允許匿名寫入權(quán)限的版本庫 225
13.2.4 在GitHub上發(fā)布版本庫 225
13.3 有關(guān)發(fā)布版本庫的建議 227
13.4 版本庫結(jié)構(gòu) 228
13.4.1 共享的版本庫結(jié)構(gòu) 228
13.4.2 分布式版本庫結(jié)構(gòu) 228
13.4.3 版本庫結(jié)構(gòu)示例 229
13.5 分布式開發(fā)指南 231
13.5.1 修改公共歷史記錄 231
13.5.2 分離提交和發(fā)布的步驟 232
13.5.3 沒有唯一正確的歷史記錄 232
13.6 清楚你的位置 233
13.6.1 上下游工作流 233
13.6.2 維護(hù)者和開發(fā)人員的角色 234
13.6.3 維護(hù)者-開發(fā)人員的交互 234
13.6.4 角色的兩面性 235
13.7 多版本庫協(xié)作 236
13.7.1 屬于你自己的工作區(qū) 236
13.7.2 從哪里開始你的版本庫 237
13.7.3 轉(zhuǎn)換到不同的上游版本庫 238
13.7.4 使用多個(gè)上游版本庫 239
13.7.5 復(fù)刻項(xiàng)目 241
第14章 補(bǔ)丁 244
14.1 為什么要使用補(bǔ)丁 245
14.2 生成補(bǔ)丁 246
14.3 郵遞補(bǔ)丁 254
14.4 應(yīng)用補(bǔ)丁 256
14.5 壞補(bǔ)丁 264
14.6 補(bǔ)丁與合并 264
第15章 鉤子 265
15.1 安裝鉤子 267
15.1.1 鉤子示例 267
15.1.2 創(chuàng)建第一個(gè)鉤子 268
15.2 可用的鉤子 270
15.2.1 與提交相關(guān)的鉤子 270
15.2.2 與補(bǔ)丁相關(guān)的鉤子 271
15.2.3 與推送相關(guān)的鉤子 272
15.2.4 其他本地版本庫的鉤子 273
第16章 合并項(xiàng)目 274
16.1 舊解決方案:部分檢出 275
16.2 顯而易見的解決方案:將代碼導(dǎo)入項(xiàng)目 276
16.2.1 手動(dòng)復(fù)制導(dǎo)入子項(xiàng)目 277
16.2.2 通過gi