章节 ▾ 第二版

A3.4 附录 C:Git 命令 - 分支与合并

分支与合并

Git 中只有少数几个命令实现了大部分分支与合并功能。

git branch

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 命令用于从最新的提交快照开始向后显示项目可达的记录历史。默认情况下,它只显示你当前所在分支的历史,但可以给定不同的甚至多个 HEAD 或分支来进行遍历。它也常用于在提交层面显示两个或多个分支之间的差异。

本书几乎每一章都使用此命令来演示项目的历史。

我们在查看提交历史中介绍了此命令并深入讲解。在那里,我们查看了 -p--stat 选项以了解每个提交中引入了什么,以及 --pretty--oneline 选项以更简洁地查看历史,以及一些简单的日期和作者过滤选项。

创建新分支中,我们使用 --decorate 选项来轻松可视化分支指针的位置,并且还使用 --graph 选项来查看发散历史的样貌。

私有小型团队提交范围中,我们介绍了 branchA..branchB 语法,用于使用 git log 命令查看相对于另一个分支,哪些提交是特定于某个分支的。在提交范围中,我们相当详细地介绍了这一点。

合并日志三点语法中,我们介绍了使用 branchA…​branchB 格式和 --left-right 语法来查看在一个分支中而不在另一个分支中的内容。在合并日志中,我们还研究了如何使用 --merge 选项来帮助调试合并冲突,以及使用 --cc 选项来查看历史中的合并提交冲突。

RefLog 简写中,我们使用 -g 选项通过此工具查看 Git reflog,而不是进行分支遍历。

搜索中,我们研究了如何使用 -S-L 选项进行相当复杂的历史代码搜索,例如查看函数历史。

签署提交中,我们看到如何使用 --show-signature 根据提交是否有效签名,在 git log 输出中为每个提交添加一个验证字符串。

git stash

git stash 命令用于临时存储未提交的工作,以便在不提交分支上未完成工作的情况下清理你的工作目录。

这部分内容在暂存和清理中基本完全覆盖。

git tag

git tag 命令用于为代码历史中的特定点添加永久书签。通常这用于发布等情况。

此命令在标签中介绍并详细讲解,我们还在标记你的发布中实际使用了它。

我们还在签署你的工作中介绍了如何使用 -s 标志创建 GPG 签名标签并使用 -v 标志验证标签。

scroll-to-top