我对 git 还很陌生,甚至对 Phabricator 也很陌生,我正试图在我的项目早期建立一个干净的工作流程。据我了解,使用 git 的正确做法是为每个功能创建一个新分支,在分支中实现它,然后将分支合并到 master 中。效果很好,没问题。
进入 Phabricator 并预推代码审查。我创建了一个分支,我们称它为“B”,实现一些东西,运行“arc diff”将其放入 Phabricator 的差异审查系统,等待批准,最后运行“arc land”推送到主存储库。到目前为止,一切都很好。但是,我不想在等待审阅者回复我时暂停进一步的开发。
所以,我有我的提交审查,我想开始研究一个细化或依赖的特性。我创建了一个子分支,我们称之为“SB”,然后开始工作。我让 SB 准备发送审核,但 B 尚未获得批准。“arc diff”看起来会将现有提交与我不想要的新更改结合起来 - 这是一个新更改,而不是对旧更改的更新。我尝试使用“arc diff B”,它可以工作,我在差分中获得了一个新版本,其中仅包含新更改。B 获得批准,我在 B 上运行“arc land”以提交它。这行得通。
SB 获得批准,我在 SB 上运行“arc land”来提交它。我得到一个用法异常 - Arcanist 将这两个版本都视为在 SB 而不是在 master 中。我尝试切换到 master 并运行更新,然后再试一次。同样的错误。我尝试使用 --revision 标志来实现这两个更改(即使其中一个确实已经实现了)。我得到合并冲突。我解决并提交合并冲突,然后重试。我再次得到完全相同的合并冲突。
我最终想到在 SB 上尝试变基,最终让“弧地”正常工作。所以,我有一个技术上可行的解决方案,但这对我来说似乎很笨拙和尴尬。有没有更好的方法来避免手动变基的需要,只是为了让 Arcanist 认识到不,我已经登陆的修订版不是我现在登陆的内容的一部分?