第Ⅰ部分 理解Git相关概念 3
第1章 什么是Git 3
1.1Git的历史 4
1.2行业标准工具 4
1.3Git生态系统 5
1.3.1核心的Git 5
1.3.2Git托管站点 6
1.3.3自托管软件包 7
1.3.4易用的包 7
1.3.5插件 9
1.3.6包含Git的工具 9
1.3.7Git库 9
1.4Git的优势和挑战 10
1.4.1优势 10
1.4.2挑战 12
1.5本章小结 15
第2章 关键概念 17
2.1设计概念:面向用户的 17
2.1.1集中式模型 17
2.1.2分布式模型 18
2.2设计概念:内部的 19
2.2.1差异增量存储 20
2.2.2快照存储 20
2.2.3Git的存储需求 21
2.3仓库设计注意事项 22
2.3.1仓库范围 23
2.3.2文件范围 24
2.3.3共享代码 25
2.4本章小结 26
第3章 Git升级模型 27
3.1Git的级别 27
3.1.1开发-测试-生产和Git 27
3.1.2移动内容的核心Git命令 34
3.2本章小结 36
3.3关于连接实验课程1:安装Git 36
连接实验课程1:安装Git 37
第Ⅱ部分 使用Git 43
第4章 配置和设置 43
4.1在Git中执行命令 43
4.1.1操作数类型 44
4.1.2高层命令和底层命令的对比 45
4.1.3指定参数 47
4.1.4自动完成 47
4.2配置Git 48
4.2.1告知Git你的身份 49
4.2.2配置范围 50
4.2.3默认的编辑器 53
4.2.4设置行结束符 54
4.2.5别名 55
4.2.6Windows文件系统缓存 56
4.3初始化仓库 56
4.3.1git init 56
4.3.2git clone 57
4.4高级主题 58
4.4.1git init揭秘 58
4.4.2进一步深入了解Git仓库 59
4.4.3将config命令映射到配置文件 60
4.4.4创建参数化别名 61
4.5本章小结 63
第5章 变得高效 65
5.1获得帮助 65
5.2多仓库模型 67
5.3添加内容以便追踪——add 69
5.4完成变更——提交 77
5.4.1先决条件 78
5.4.2提交范围 79
5.5将一切结合在一起 79
5.5.1修正提交 80
5.5.2提交的结果 82
5.6高级主题 84
5.6.1使用-verbose选项 85
5.6.2完整的消息提交过程 85
5.6.3自动更正和自动执行 86
5.7本章小结 87
5.8关于连接实验课程2:创建和探究Git仓库并且管理内容 87
连接实验课程2:创建和探究Git仓库并且管理内容 89
第6章 追踪变更 95
6.1git status 95
6.1.1具有状态的工作流示例 96
6.1.2status命令的简要形式 100
6.2git diff 102
6.2.1Git中的重要符号名称 102
6.2.2如何思考Git进行对比的方法 102
6.2.3仅显示有差异的文件名称 107
6.2.4word-diff 107
6.2.5忽略非关键变更 107
6.2.6对比两次提交 109
6.2.7可视化对比 111
6.2.8其他的对比技巧 114
6.3本章小结 115
6.4连接实验课程3:通过文件状态生命周期追踪内容 116
连接实验课程3:通过文件状态生命周期追踪内容 117
第7章 处理随时间推移而出现的变更以及使用标签 121
7.1log命令 121
7.1.1常用的显示和过滤选项 122
7.1.2时间限制选项 123
7.1.3按文件和路径显示历史 124
7.1.4日志输出格式 125
7.1.5搜索历史 126
7.2git blame 127
7.3可视化地查看历史 130
7.4标签 131
7.4.1查看标签详情 132
7.4.2修改标签 132
7.4.3简单的标签示例 133
7.5撤消历史中的变更 134
7.5.1reset——回滚变更 134
7.5.2完全重置本地环境 135
7.5.3revert——消除变更 136
7.6高级主题 139
7.6.1签署提交和标签 139
7.6.2引用日志 141
7.7本章小结 143
7.8关于连接实验课程4:使用Git历史、标签和别名 143
连接实验课程4:使用Git历史、标签和别名 145
第8章 处理本地分支 149
8.1什么是分支? 149
8.1.1来自另一个源管理系统的示例 150
8.1.2分支的Git模型 150
8.1.3创建一个分支 151
8.1.4签出一个分支 152
8.1.5将内容添加到分支 153
8.1.6一个工作目录——多个分支 154
8.1.7获得关于分支的信息 157
8.1.8删除或重命名一个分支 158
8.1.9使用分支进行开发 161
8.2高级主题 167
8.2.1签出非分支提交 168
8.2.2签出单独的文件 173
8.3本章小结 174
8.4连接实验课程5:处理分支 174
连接实验课程5:处理分支 175
第9章 合并内容 177
9.1合并的基础 177
9.1.1merge命令 178
9.1.2为合并做准备 178
9.1.3合并的类型 178
9.1.4变基——合并历史 182
9.1.5樱桃拣选 185
9.1.6樱桃拣选和变基之间的差异 188
9.1.7合并操作 189
9.2处理冲突 192
9.2.1合并处理是一种状态 192
9.2.2冲突的错误消息 193
9.2.3终止操作 194
9.2.4处理冲突——工作流 194
9.2.5解决选项和策略 198
9.3可视化合并 203
9.3.1选择一款合并工具 205
9.3.2让合并工具可供Git使用 206
9.4高级主题 206
9.4.1用于冲突标记的可选样式 207
9.4.2高级变基场景 208
9.4.3交互式变基 213
9.5本章小结 220
9.6连接实验课程6:合并实践 220
连接实验课程6:合并实践 221
第10章 Git中的支持文件 223
10.1Git属性文件 224
10.1.1Git属性文件的作用 224
10.1.2Git属性的范围 224
10.1.3文件格式 226
10.1.4常见用例 226
10.1.5获取文件的属性信息 232
10.2Git忽略文件 233
10.2.1Git忽略的范围 233
10.2.2文件格式 234
10.2.3获取文件的忽略信息 236
10.3本章小结 236
第11章 用Git做更多的事情 239
11.1修改本地环境中文件和目录的布局 239
11.1.1储藏 240
11.1.2暂存命令 246
11.1.3mv 246
11.1.4rm 247
11.2用于搜索的命令 248
11.2.1grep 248
11.2.2Git日志搜索 251
11.3为变更处理补丁和存档 253
11.3.1archive 254
11.3.2bundle 254
11.3.3通过电子邮件共享补丁 256
11.3.4apply 257
11.3.5am 257
11.3.6用邮件发送补丁文件 258
11.4用于清理的命令 260
11.4.1clean 260
11.4.2gc 262
11.4.3notes 263
11.5高级主题 265
11.5.1fiilter-branch 265
11.5.2rev-list 265
11.5.3bisect 272
11.5.4rerere 279
11.6本章小结 287
11.7连接实验课程7:删除、重命名和储藏 287
连接实验课程7:删除、重命名和储藏 289
第12章 理解远程——分支和操作 293
12.1远程 293
12.1.1远程访问协议 295
12.1.2remote命令 297
12.1.3Git如何与远程环境交互 299
12.1.4远程追踪分支 299
12.1.5gitclone 300
12.1.6查看关于远程分支的信息 303
12.1.7push 307
12.1.8fetch 315
12.1.9pull 317
12.2本章小结 320
12.3连接实验课程8:设置GitHub账户并且克隆仓库 320
连接实验课程8:设置GitHub账户并且克隆仓库 321
第13章 理解远程——变更工作流 323
13.1Git中基本的冲突以及合并解决工作流 324
13.2托管仓库 336
13.2.1用于使用Git进行协作的模型 336
13.2.2对所有内容进行汇总 340
13.3本章小结 341
13.4连接实验课程9:对远程仓库使用整体工作流 342
连接实验课程9:对远程仓库使用整体工作流 343
第14章 处理Git中的树和模块 347
14.1工作树 347
14.1.1添加一棵工作树 348
14.1.2列出工作树 350
14.1.3精简工作树 351
14.2子模块 352
14.2.1理解子模块如何工作 353
14.2.2添加子模块 353
14.2.3判定子模块状态 355
14.2.4处理多个子模块 359
14.2.5从子模块的远程更新子模块 359
14.2.6查看子模块差异 361
14.2.7超级项目与子模块对比 362
14.2.8子模块的问题 364
14.2.9更新子模块引用 365
14.2.10在超级项目被更新后更新子模块 366
14.2.11推送来自子模块的变更 368
14.2.12子模块与合并 369
14.2.13注销一个子模块 370
14.3子树 370
14.3.1添加一个项目作为子树 371
14.3.2更新子树 374
14.3.3使用子树分隔功能 374
14.3.4从分隔内容中创建一个新的项目 375
14.3.5子树推送 376
14.4本章小结 376
14.5连接实验课程 376
14.5.1连接实验课程10:使用工作树 376
14.5.2连接实验课程11:使用子模块 376
14.5.3连接实验课程12:使用子树 377
连接实验课程10:使用工作树 379
连接实验课程11:使用子模块 381
连接实验课程12:使用子树 385
第15章 使用Git挂钩程序扩展Git功能 389
15.1安装挂钩 389
15.2更新挂钩 390
15.3常用挂钩属性 391
15.3.1挂钩域 391
15.3.2控制工作流的返回码 391
15.3.3工作目录访问 392
15.3.4环境变量 392
15.4挂钩描述 392
15.4.1applypatch-msg 393
15.4.2pre-applypatch 393
15.4.3post-applypatch 393
15.4.4pre-commit 393
15.4.5prepare-commit-msg 395
15.4.6commit-message 396
15.4.7post-commit 398
15.4.8pre-rebase 399
15.4.9post-checkout 399
15.4.10post-merge 399
15.4.11pre-push 400
15.4.12pre-receive 400
15.4.13update 401
15.4.14post-receive 401
15.4.15post-update 402
15.5其他挂钩 403
15.5.1push-to-checkout 403
15.5.2pre-auto-gc 403
15.5.3post-rewrite 403
15.6挂钩快速参考 403
15.7本章小结 405