-
1. 起步
-
2. Git 基础
-
3. Git 分支
-
4. 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上部署 Git
- 4.3 生成 SSH 公钥
- 4.4 架设服务器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管服务
- 4.10 小结
-
5. 分布式 Git
-
A1. 附录 A: Git 在其他环境
- A1.1 图形界面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 小结
-
A2. 附录 B: 在应用程序中嵌入 Git
-
A3. 附录 C: Git 命令
A3.4 附录 C: Git 命令 - 分支与合并
分支与合并
Git 中实现大多数分支和合并功能的命令只有少数几个。
git branch
git branch 命令实际上是一个分支管理工具。它可以列出你拥有的分支,创建一个新分支,删除分支和重命名分支。
在跟踪分支中,我们使用 git branch -u 选项来设置一个跟踪分支。
最后,我们在Git 引用中介绍它在后台所做的一些事情。
git checkout
git checkout 命令用于切换分支并将内容检出到你的工作目录中。
我们首先在切换分支中遇到这个命令,以及 git branch 命令。
我们看到如何在跟踪分支中使用带有 --track 标志的它来开始跟踪分支。
我们在检查冲突中使用 --conflict=diff3 来重新引入文件冲突。
我们在Reset 解惑中更详细地介绍了它与 git reset 的关系。
最后,我们在HEAD中介绍了一些实现细节。
git merge
git merge 工具用于将一个或多个分支合并到你已检出的分支中。然后它会将当前分支推进到合并的结果。
git merge 命令首次在基本分支中介绍。虽然它在本书的各个地方都有使用,但 merge 命令的变化很少——通常只是 git merge <branch>,其中 <branch> 是你想要合并的单个分支的名称。
我们在分叉公共项目的最后部分介绍了如何进行压缩合并(Git 合并工作,但假装它只是一个新提交,而不记录你正在合并的分支的历史)。
我们在高级合并中详细介绍了合并过程和命令,包括 -Xignore-space-change 命令和 --abort 标志以中止有问题的合并。
如果你的项目使用 GPG 签名,我们在签名提交中学习了如何在合并前验证签名。
最后,我们在子树合并中学习了子树合并。
git mergetool
git mergetool 命令只是在你在 Git 中遇到合并问题时启动一个外部合并助手。
git log
git log 命令用于从最近的提交快照向后显示项目可达的记录历史。默认情况下,它只会显示你当前所在分支的历史,但可以给定不同甚至多个头或分支来遍历。它也经常用于在提交级别显示两个或更多分支之间的差异。
本书几乎每个章节都使用此命令来演示项目的历史。
我们在查看提交历史中介绍了该命令并对其进行了深入讨论。在那里,我们查看了 -p 和 --stat 选项以了解每个提交中引入了什么,以及 --pretty 和 --oneline 选项以更简洁地查看历史,以及一些简单的日期和作者筛选选项。
在创建新分支中,我们使用带有 --decorate 选项的它来轻松可视化我们的分支指针的位置,我们还使用 --graph 选项来查看发散历史的样子。
在小型私有团队和提交范围中,我们介绍了 branchA..branchB 语法,以使用 git log 命令查看相对于另一个分支而言,哪些提交是特定于某个分支的。在提交范围中,我们对此进行了相当广泛的讨论。
在合并日志和三点符中,我们介绍了使用 branchA...branchB 格式和 --left-right 语法来查看一个分支或另一个分支中存在但不同时存在的内容。在合并日志中,我们还研究了如何使用 --merge 选项来帮助调试合并冲突,以及使用 --cc 选项来查看历史记录中的合并提交冲突。
在引用日志短名称中,我们使用 -g 选项通过此工具查看 Git 引用日志,而不是进行分支遍历。
在搜索中,我们研究了使用 -S 和 -L 选项进行相当复杂的搜索,以查找代码中历史上发生的事情,例如查看函数的历史。
在签名提交中,我们看到如何使用 --show-signature 向 git log 输出中的每个提交添加验证字符串,具体取决于它是否有效签名。