第1章 介紹 1
1.1 背景 1
1.2 Git的誕生 2
1.3 先例 4
1.4 時間綫 5
1.5 名字有何含義 6
第2章 安裝Git 7
2.1 使用Linux上的二進製發行版 7
2.1.1 Debian/Ubuntu 7
2.1.2 其他發行版 8
2.2 獲取源代碼 9
2.3 構建和安裝 10
2.4 在Windows上安裝Git 11
2.4.1 安裝Cygwin版本的Git 12
2.4.2 安裝獨立的Git(msysGit) 13
第3章 起步 16
3.1 Git命令行 16
3.2 Git使用快速入門 18
3.2.1 創建初始版本庫 18
3.2.2 將文件添加到版本庫中 19
3.2.3 配置提交作者 21
3.2.4 再次提交 21
3.2.5 查看提交 21
3.2.6 查看提交差異 23
3.2.7 版本庫內文件的刪除和重命名 23
3.2.8 創建版本庫副本 24
3.3 配置文件 25
3.4 疑問 27
第4章 基本的Git概念 28
4.1 基本概念 28
4.1.1 版本庫 28
4.1.2 Git對象類型 29
4.1.3 索引 30
4.1.4 可尋址內容名稱 30
4.1.5 Git追蹤內容 31
4.1.6 路徑名與內容 31
4.1.7 打包文件 32
4.2 對象庫圖示 33
4.3 Git在工作時的概念 35
4.3.1 進入.git目錄 35
4.3.2 對象、散列和blob 36
4.3.3 文件和樹 37
4.3.4 對Git使用SHA1的一點說明 38
4.3.5 樹層次結構 40
4.3.6 提交 40
4.3.7 標簽 41
第5章 文件管理和索引 43
5.1 關於索引的一切 44
5.2 Git中的文件分類 44
5.3 使用git add 46
5.4 使用git commit的一些注意事項 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中對象模型和文件的詳細視圖 56
第6章 提交 61
6.1 原子變更集 62
6.2 識彆提交 62
6.2.1 絕對提交名 63
6.2.2 引用和符號引用 64
6.2.3 相對提交名 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 創建分支 88
7.5 列齣分支名 89
7.6 查看分支 89
7.7 檢齣分支 91
7.7.1 檢齣分支的一個簡單例子 91
7.7.2 有未提交的更改時進行檢齣 92
7.7.3 閤並變更到不同分支 94
7.7.4 創建並檢齣新分支 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如何産生diff 112
第9章 閤並 114
9.1 閤並的例子 114
9.1.1 為閤並做準備 115
9.1.2 閤並兩個分支 115
9.1.3 有衝突的閤並 117
9.2 處理閤並衝突 121
9.2.1 定位衝突的文件 122
9.2.2 檢查衝突 122
9.2.3 Git是如何追蹤衝突的 126
9.2.4 結束解決衝突 128
9.2.5 中止或重新啓動閤並 129
9.3 閤並策略 130
9.3.1 退化閤並 132
9.3.2 常規閤並 134
9.3.3 特殊提交 135
9.3.4 應用閤並策略 136
9.3.5 閤並驅動程序 137
9.4 Git怎麼看待閤並 138
9.4.1 閤並和Git的對象模型 138
9.4.2 壓製閤並 139
9.4.3 為什麼不一個接一個地閤並每個變更 140
第10章 更改提交 142
10.1 關於修改曆史記錄的注意事項 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章 儲藏和引用日誌 170
11.1 儲藏 170
11.2 引用日誌 178
第12章 遠程版本庫 183
12.1 版本庫概念 184
12.1.1 裸版本庫和開發版本庫 184
12.1.2 版本庫剋隆 185
12.1.3 遠程版本庫 186
12.1.4 追蹤分支 186
12.2 引用其他版本庫 187
12.2.1 引用遠程版本庫 188
12.2.2 refspec 189
12.3 使用遠程版本庫的示例 191
12.3.1 創建權威版本庫 192
12.3.2 製作你自己的origin遠程版本庫 193
12.3.3 在版本庫中進行開發 195
12.3.4 推送變更 196
12.3.5 添加新開發人員 197
12.3.6 獲取版本庫更新 199
12.4 圖解遠程版本庫開發周期 203
12.4.1 剋隆版本庫 204
12.4.2 交替的曆史記錄 205
12.4.3 非快進推送 205
12.4.4 獲取交替曆史記錄 207
12.4.5 閤並曆史記錄 208
12.4.6 閤並衝突 208
12.4.7 推送閤並後的曆史記錄 209
12.5 遠程版本庫配置 209
12.5.1 使用git remote 210
12.5.2 使用git config 211
12.5.3 使用手動編輯 212
12.6 使用追蹤分支 212
12.6.1 創建追蹤分支 212
12.6.2 領先和落後 215
12.7 添加和刪除遠程分支 216
12.8 裸版本庫和git推送 217
第13章 版本庫管理 219
13.1 談談服務器 219
13.2 發布版本庫 220
13.2.1 帶訪問控製的版本庫 220
13.2.2 允許匿名讀取訪問的版本庫 221
13.2.3 允許匿名寫入權限的版本庫 225
13.2.4 在GitHub上發布版本庫 225
13.3 有關發布版本庫的建議 227
13.4 版本庫結構 228
13.4.1 共享的版本庫結構 228
13.4.2 分布式版本庫結構 228
13.4.3 版本庫結構示例 229
13.5 分布式開發指南 231
13.5.1 修改公共曆史記錄 231
13.5.2 分離提交和發布的步驟 232
13.5.3 沒有唯一正確的曆史記錄 232
13.6 清楚你的位置 233
13.6.1 上下遊工作流 233
13.6.2 維護者和開發人員的角色 234
13.6.3 維護者-開發人員的交互 234
13.6.4 角色的兩麵性 235
13.7 多版本庫協作 236
13.7.1 屬於你自己的工作區 236
13.7.2 從哪裏開始你的版本庫 237
13.7.3 轉換到不同的上遊版本庫 238
13.7.4 使用多個上遊版本庫 239
13.7.5 復刻項目 241
第14章 補丁 244
14.1 為什麼要使用補丁 245
14.2 生成補丁 246
14.3 郵遞補丁 254
14.4 應用補丁 256
14.5 壞補丁 264
14.6 補丁與閤並 264
第15章 鈎子 265
15.1 安裝鈎子 267
15.1.1 鈎子示例 267
15.1.2 創建第一個鈎子 268
15.2 可用的鈎子 270
15.2.1 與提交相關的鈎子 270
15.2.2 與補丁相關的鈎子 271
15.2.3 與推送相關的鈎子 272
15.2.4 其他本地版本庫的鈎子 273
第16章 閤並項目 274
16.1 舊解決方案:部分檢齣 275
16.2 顯而易見的解決方案:將代碼導入項目 276
16.2.1 手動復製導入子項目 277
16.2.2 通過git pull -s subtree導入子項目 278
16.2.3 將更改提交到上遊 282
16.3 自動化解決方案:使用自定義腳本檢齣子項目 283
16.4 原生解決方案:gitlink和git submodule 284
16.4.1 gitlink 284
16.4.2 git submodule命令 287
第17章 子模塊最佳實踐 290
17.1 子模塊命令 291
17.2 為什麼要使用子模塊 291
17.3 子模塊準備 292
17.4 為什麼是隻讀的 293
17.5 為什麼不用隻讀的 293
17.6 檢查子模塊提交的散列 293
17.7 憑據重用 294
17.8 用例 295
17.9 版本庫的多級嵌套 296
17.10 子模塊的未來 296
第18章 結閤SVN版本庫使用Git 297
18.1 例子:對單一分支的淺剋隆 297
18.1.1 在Git中進行修改 300
18.1.2 在提交前進行抓取操作 301
18.1.3 通過git svn rebase提交 302
18.2 在git svn中使用推送、拉取、分支和閤並 303
18.2.1 直接使用提交ID 304
18.2.2 剋隆所有分支 305
18.2.3 分享版本庫 307
18.2.4 閤並迴SVN 308
18.3 在和SVN一起使用時的一些注意事項 310
18.3.1 svn:ignore與.gitignore 310
18.3.2 重建git-svn的緩存 310
第19章 高級操作 312
19.1 使用git filter-branch 312
19.1.1 使用git filter-branch的例子 314
19.1.2 filter-branch的誘惑 319
19.2 我如何學會喜歡上git rev-list 320
19.2.1 基於日期的檢齣 320
19.2.2 獲取文件的舊版本 323
19.3 數據塊的交互式暫存 325
19.4 恢復遺失的提交 336
19.4.1 git fsck命令 336
19.4.2 重新連接遺失的提交 340
第20章 提示、技巧和技術 341
20.1 對髒的工作目錄進行交互式變基 341
20.2 刪除剩餘的編輯器文件 342
20.3 垃圾迴收 342
20.4 拆分版本庫 344
20.5 恢復提交的小貼士 345
20.6 轉換Subversion的技巧 346
20.6.1 普適建議 346
20.6.2 刪除SVN導入後的trunk 346
20.6.3 刪除SVN提交ID 347
20.7 操作來自兩個版本庫的分支 348
20.8 從上遊變基中恢復 348
20.9 定製Git命令 349
20.10 快速查看變更 350
20.11 清理 351
20.12 使用git-grep來搜索版本庫 352
20.13 更新和刪除ref 354
20.14 跟蹤移動的文件 354
20.15 保留但不追蹤文件 355
20.16 你來過這裏嗎 356
第21章 Git和GitHub 357
21.1 為開源代碼提供版本庫 358
21.2 創建GitHub的版本庫 360
21.3 開源代碼的社會化編程 362
21.4 關注者 363
21.5 新聞源 363
21.6 復刻 364
21.7 創建閤並請求 365
21.8 管理閤並請求 367
21.9 通知 369
21.10 查找用戶、項目和代碼 371
21.11 維基 373
21.12 GitHub頁麵(用於網站的Git) 373
21.13 頁內代碼編輯器 375
21.14 對接SVN 377
21.15 標簽自動歸檔 378
21.16 組織 379
21.17 REST風格的API 379
21.18 閉源的社會化編程 381
21.19 最終開放源代碼 381
21.20 開發模型 381
21.21 GitHub企業版 383
21.22 關於GitHub的總結 384
· · · · · · (
收起)