私は git にかなり慣れていませんが、Phabricator にはさらに慣れていないため、プロジェクトの早い段階でクリーンなワークフローをセットアップしようとしています。私が理解しているように、git を使用する適切な方法は、機能ごとに新しいブランチを作成し、ブランチに実装してから、ブランチをマスターにマージすることです。問題なく動作します。
Phabricator に入り、コードレビューを事前にプッシュします。ブランチを作成し、それを「B」と呼び、何かを実装し、「arc diff」を実行して Phabricator の差分レビュー システムに取り込み、承認を待ち、最後に「arc land」を実行してメイン リポジトリにプッシュします。ここまでは順調ですね。しかし、レビュアーからの返事を待っている間、さらなる開発を中断したくありません。
そのため、コミットのレビューがあり、改良または依存機能の作業を開始したいと考えています。サブブランチを作成し、それを「SB」と呼び、作業を開始します。SB を審査に送る準備ができましたが、B はまだ承認されていません。「arc diff」は、既存のコミットと新しい変更を組み合わせたように見えますが、これは望ましくありません。これは新しい変更であり、古い変更ではありません。代わりに「arc diff B」を試してみましたが、うまくいきました。新しい変更のみを含む新しいリビジョンが Differential に取得されました。Bが承認され、Bに「アークランド」を実行して提出します。これは機能します。
SBが承認され、SBで「アークランド」を実行して提出します。Usage Exception が発生します - Arcanist は、両方のリビジョンが SB にあり、master にないと見なします。マスターに切り替えて更新を実行してから、再試行します。同じエラー。--revision フラグを使用して、両方の変更を適用しようとしました (実際には、そのうちの 1 つが既に適用されています)。マージの競合が発生します。マージの競合を解決してコミットし、再試行します。まったく同じマージの競合が何度も発生します。
私は最終的に SB でリベースを試みることを思いつき、最終的に「アークランド」が適切に機能するようになりました。だから、私は技術的に機能する解決策を持っていますが、これは不格好で扱いにくいようです。Arcanist に、いいえ、私が既に着陸したリビジョンは、私が今着陸しようとしているものの一部ではないことを認識させるためだけに手動でリベースする必要を回避する、より良い方法はありますか?