Git

本文介绍了一些可能会帮到你的实用 Git 特性。

注解

参阅“如何使用 Git/GitHub”一文获得更多关于 Git、分支及变基命令的信息。请务必遵守“压缩与变基”一文中的有关说明。

变基

有时候,你预计完成项目的计划赶不上变化,然后你的分支相比于目标分支落后了几笔提交,你需要在合并之前测试你的新提交与这些上游的新提交是否能和平相处。只需要使用 git rebase 命令即可让上游的新提交“合并”入你的特性分支中。

执行该命令前,请确认你的本地仓库已经执行了 git pull 命令(或者 git fetch + git merge 这对命令组合)。在确认已从上游拉取更新后:

  1. 确认你当前位于项目分支中
  2. 执行 git rebase <目标分支>

例如,假设你的项目分支名叫 feature,目标分支叫 bleeding。你在从上游拉取所有更新到你本地的的 bleeding 分支后,检出到 feature 分支,然后执行 git rebase bleeding。你的 feature 分支将会包含所有上游变更,此时你便可以测试你的更新是否引入了新的问题了。

查找某笔提交

定位某一笔提交也许有助于调试。有不止一种定位特定提交的方法,下面列出了其中一部分:

  1. Git 日志

    在命令行中执行 git log 可令 Git 打印仓库中的所有变更。

    在 IDE 中则推荐使用 IDE 自带的版本控制工具来查阅日志。请参阅你使用的 IDE 的文档来了解具体操作方式。

  2. MANIFEST.MF 文件

    如果你面对的是一个 Sponge 的 jar,你可以查阅它的 MANIFEST.MF 文件以获取它对应的最近一笔提交。这个文件位于 jar 中的 META-INF 目录下,包含大量键值对。你要找的是一个名叫 Git-Commit 的键,它的值是这个 jar 创建时包含的最近一笔推送到 GitHub 仓库上的提交的 hash。

  3. Sponge 下载页

    另一种确定某个文件所包含的最近提交的方法是通过 Sponge 的下载页上的信息确定。在某一构建的标题下可以找到提交的信息,点击第一条提交信息即可跳转到 GitHub 仓库中对应的提交页面,在那里你可以找到相关信息。

小技巧

可用 git log --oneline -x 来只显示变更的概要以快速定位某笔提交,其中 x 代表要显示的提交的数量。

检出特定分支

在准备调试时使用一个新分支并使用与之有关的 issue ticket 命名是个好习惯。在你的提交合并入上游后你可以删除这个分支,但它的命名会帮你想起来这个分支是干什么的。

注解

要注意的是,你的新分支应当基于合适的目标分支创建。参阅“仓库分支布局策略”一文了解更多信息。

在取好新分支名,并检出合适的目标分支后,你可以使用 git checkout --recurse-submodules -B <新分支名> 来新建分支。Git 会自动创建分支并检出到新分支上去。现在你可以在 IDE 设置中进行任意必要的修改了。

小技巧

--recurse-submodules 参数将确保 SpongeCommon 和 SpongeAPI 两个子模块也被检出到合适的分支上去。