Scott Chacon 序 Ben Straub 序 献辞 贡献者 引言 起步 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 简史 Git 基础 直接记录快照,而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 命令行 安装 Git 在 Linux 上安装 在 Mac 上安装 在 Windows 上安装 从源代码安装 初次运行 Git 前的配置 用户信息 文本编辑器 检查配置信息 获取帮助 总结 Git 基础 获取 Git 仓库 在现有目录中初始化仓库 克隆现有的仓库 记录每次更新到仓库 检查当前文件状态 跟踪新文件 暂存已修改文件 状态简览 忽略文件 查看已暂存和未暂存的修改 提交更新 跳过使用暂存区域 移除文件 移动文件 查看提交历史 限制输出长度 撤消操作 取消暂存的文件 撤消对文件的修改 远程仓库的使用 查看远程仓库 添加远程仓库 从远程仓库中抓取与拉取 推送到远程仓库 查看远程仓库 远程仓库的移除与重命名 打标签 列出标签 创建标签 附注标签 轻量标签 后期打标签 共享标签 检出标签 Git 别名 总结 Git 分支 分支简介 分支创建 分支切换 分支的新建与合并 新建分支 分支的合并 遇到冲突时的分支合并 分支管理 分支开发工作流 长期分支 特性分支 远程分支 推送 跟踪分支 拉取 删除远程分支 变基 变基的基本操作 更有趣的变基例子 变基的风险 用变基解决变基 变基 vs. 合并 总结 服务器上的 Git 协议 本地协议 HTTP 协议 SSH 协议 Git 协议 在服务器上搭建 Git 把裸仓库放到服务器上 小型安装 生成 SSH 公钥 配置服务器 Git 守护进程 Smart HTTP GitWeb GitLab 安装 管理 基本用途 一起工作 第三方托管的选择 总结 分布式 Git 分布式工作流程 集中式工作流 集成管理者工作流 司令官与副官工作流 工作流程总结 向一个项目贡献 提交准则 私有小型团队 私有管理团队 派生的公开项目 通过邮件的公开项目 总结 维护项目 在特性分支中工作 应用来自邮件的补丁 检出远程分支 确定引入了哪些东西 将贡献的工作整合进来 为发布打标签 生成一个构建号 准备一次发布 制作提交简报 总结 GitHub 账户的创建和配置 SSH 访问 头像 邮件地址 两步验证 对项目做出贡献 派生(Fork)项目 GitHub 流程 合并请求的进阶用法 Markdown 维护项目 创建新的版本库 添加合作者 管理合并请求 提醒和通知 通知页面 网页通知 邮件通知 特殊文件 README 贡献 CONTRIBUTING 项目管理 管理组织 组织的基本知识 团队 审计日志 脚本 GitHub 钩子 GitHub API 基本用途 在一个问题上评论 修改 Pull Request 的状态 Octokit 总结 Git 工具 选择修订版本 单个修订版本 简短的 SHA-1 分支引用 引用日志 祖先引用 提交区间 交互式暂存 暂存与取消暂存文件 暂存补丁 储藏与清理 储藏工作 创造性的储藏 从储藏创建一个分支 清理工作目录 签署工作 GPG 介绍 签署标签 验证标签 签署提交 每个人必须签署 搜索 Git Grep Git 日志搜索 重写历史 修改最后一次提交 修改多个提交信息 重新排序提交 压缩提交 拆分提交 核武器级选项:filter-branch 重置揭密 三棵树 工作流程 重置的作用 通过路径来重置 压缩 检出 总结 高级合并 合并冲突 撤消合并 其他类型的合并 Rerere 使用 Git 调试 文件标注 二分查找 子模块 开始使用子模块 克隆含有子模块的项目 在包含子模块的项目上工作 子模块技巧 子模块的问题 打包 替换 凭证存储 底层实现 自定义凭证缓存 总结 自定义 Git 配置 Git 客户端基本配置 Git 中的着色 外部的合并与比较工具 格式化与多余的空白字符 服务器端配置 Git 属性 二进制文件 关键字展开 导出版本库 合并策略 Git 钩子 安装一个钩子 客户端钩子 服务器端钩子 使用强制策略的一个例子 服务器端钩子 客户端钩子 总结 Git 与其他系统 作为客户端的 Git Git 与 Subversion Git 与 Mercurial Git 与 Perforce Git 与 TFS 迁移到 Git Subversion Mercurial Perforce TFS 一个自定义的导入器 总结 Git 内部原理 底层命令和高层命令 Git 对象 树对象 提交对象 对象存储 Git 引用 HEAD 引用 标签引用 远程引用 包文件 引用规格 引用规格推送 删除引用 传输协议 哑协议 智能协议 协议总结 维护与数据恢复 维护 数据恢复 移除对象 环境变量 全局行为 版本库位置 路径规则 提交 网络 比较和合并 调试 其它 总结 其它环境中的 Git 图形界面 gitk 和 git-gui Mac 和 Windows 上的 GitHub 客户端 其它图形界面 Visual Studio 中的 Git Eclipse 中的 Git Bash 中的 Git Zsh 中的 Git Powershell 中的 Git 总结 将 Git 嵌入你的应用 命令行 Git 方式 Libgit2 高级功能 其它绑定 扩展阅读 JGit 起步 底层命令 高层命令 拓展阅读 Git 命令 设置与配置 git config git help 获取与创建项目 git init git clone 快照基础 git add git status git diff git difftool git commit git reset git rm git mv git clean 分支与合并 git branch git checkout git merge git mergetool git log git stash git tag 项目分享与更新 git fetch git pull git push git remote git archive git submodule 检查与比较 git show git shortlog git describe 调试 git bisect git blame git grep 补丁 git cherry-pick git rebase git revert 邮件 git apply git am git format-patch git imap-send git send-email git request-pull 外部系统 git svn git fast-import 管理 git gc git fsck git reflog git filter-branch 底层命令 Index