I'm fairly new to git, and even newer to Phabricator, and I'm trying to get a clean workflow set up early in my project. As I understand it, the proper thing to do with git is create a new branch for each feature, implement it in the branch, and then merge the branch into master. Works great, no problem.
Enter Phabricator and pre-push code reviews. I create a branch, let's call it "B", implement something, run "arc diff" to get it into Phabricator's Differential review system, wait for approval, and finally run "arc land" to push to the main repository. So far so good. But, I don't want to pause further development while waiting for a reviewer to get back to me.
So, I have my commit in review, and I want to start working on a refinement or dependent feature. I create a subbranch, let's call it "SB", and begin working. I get SB ready to send for review, and B is not yet approved. "arc diff" looks like it would combine the existing commit with my new changes, which I don't want - this is a new change, not an update to the old. I try "arc diff B" instead and it works, I get a new revision in Differential that includes only the new changes. B gets approved, and I run "arc land" on B to submit it. This works.
SB gets approved, and I run "arc land" on SB to submit it. I get a Usage Exception - Arcanist sees both revisions as being in SB and not in master. I try switching to master and running an update, then trying again. Same error. I try the --revision flag to land both changes (even though one of them really has been landed already). I get merge conflicts. I resolve and commit the merge conflicts and try again. I get exactly the same merge conflicts all over again.
I eventually get the idea of trying a rebase on SB, and that finally gets "arc land" to work properly. So, I have a technically working solution, but this seems kludgy and awkward to me. Is there a better way to do it that avoids the need for manual rebasing just to get Arcanist to recognize that no, the revision that I already landed is not part of what I'm landing now?