使用补丁堆栈快速参考

在处理 Firefox 时,我们强烈建议使用补丁堆栈。补丁应该很小,并且可以按推送它们的顺序进行合并。这也有助于为不同的审阅者分解工作。

由于这对新手来说可能很复杂,因此本文档解释了各种命令。

在 Phabricator 中,可以在“修订内容”部分查看堆栈。堆栈顶部(最近的更改)位于列表的开头。

这有时也称为“修订堆栈”、“提交堆栈”或“提交序列”。

示例

../_images/example-stack.png

有关整体快速参考指南,请参阅 Firefox 贡献者快速参考

可视化堆栈

# Mercurial
$ hg wip

# Git
$ git log

合并两个补丁

可能会发生这种情况,而不是更新补丁,在 Phabricator 上创建了一个新的修订版。为此,请在本地合并补丁

# Mercurial
# Mark the patch to be merged with "roll" (key: "r")
# or "fold" (key: "f")
$ hg histedit

# Git
# Replace "pick" by "squash" or "fixup"
$ git rebase -i

然后,推送到 Phabricator 并放弃旧的更改。

提交堆栈中的第一个补丁

有时您正在处理多个补丁,并且只想提交第一个补丁。为此,您可以使用

$ moz-phab submit .

重新排序堆栈

有时,我们希望更改堆栈中补丁的顺序。幸运的是,VCS 很容易支持这一点。

# Mercurial
# Just change the order of the patches. The tool should highlight
# potential risks of conflicts.
# Note that ctrl+c works well if used.
$ hg histedit

# Git
# In the editor, just move the patches to the line below/above to
# reorder commits.
# Remove everything if you want to cancel the operation.
$ git rebase -i

在堆栈开头的补丁上进行更改

在某些情况下,审阅者要求对堆栈底部进行更改(即不在顶部)。因此,简单的“hg/git commit –amend”将不起作用。

在这种情况下,可以使用以下方法

# Mercurial
# hg will try to guess in which an unambiguous prior commit
$ hg absorb

# if this doesn't work, create a temporary commit
# and merge it using "fold" or "roll"
$ hg histedit

# Git
$ git commit --fixup <hash of the commit>

删除堆栈中的补丁

要删除堆栈中的补丁

# Mercurial
# select "drop" (letter "d")
$ hg histedit

# Git
# Replace "pick" by "drop"
# Or simply remove the line for this commit
$ git rebase -i

重新基准堆栈

由于代码库发展迅速,因此在合并更改之前,可能需要从 mozilla-central 中提取更改。

# Mercurial
# First, see where your patches are in the stack
$ hg wip
# Then, rebase it:
# If you are a beginner, don't hesitate to add "--dry-run"
$ hg pull
$ hg rebase -b . -d central


# Git
$ git remote update
$ git rebase mozilla/central

在 Phabricator 中重新组织堆栈

$ moz-phab reorg [start_rev] [end_rev]

允许您在 Phabricator 中重新组织堆栈。

如果您通过添加、删除或移动提交来更改本地堆栈,则需要更改 Phabricator 中修订版的父子关系。

$ moz-phab reorg

命令将比较堆栈,显示将要更改的内容,并在采取任何操作之前请求权限。

注意

请注意,reviewbot 不会重新启动分析。