38

我对 Arcanist 和 git 都很陌生。我希望能够针对我当前正在签出/工作的 git 分支(并且我有一个本地未推送的提交)而不是主分支创建一个 arc diff(使用 Arcanist 的 Phabricator 差异实例)。对我来说,弧文档对此并不清楚。可能吗?如何?如果答案也适用于 2-3 个本地未推送的提交,那就太好了。

“arc help diff”还给出:

      diff [paths] (svn)
      diff [commit] (git, hg)
          Supports: git, svn, hg
          Generate a Differential diff or revision from local changes.

          Under git, you can specify a commit (like HEAD^^^ or master)
          and Differential will generate a diff against the merge base of that
          commit and HEAD.

也许我只需要做“arc diff [commit]”,其中 [commit] 是目标分支的尖端?但我想确定一下,因为我不想污染我们的 Phabricator 实例。

此外,如果答案解释了如何正确做,我很高兴收到“你做错了”的答案。

4

2 回答 2

53

一般来说,arc diff <branch>会做你想做的事。(如果您已经在分支上,而不是本地主题分支上,请尝试arc diff origin/<branch>。)

当像这样调用时,arc实际上会merge-base与分支的提示和工作副本中的当前提交不同,但通常这是您想要的。如果您真的想针对您可以使用的分支提示生成差异arc diff --base git:<branch>,但是此差异将包括撤消对分支点后代的任何提交的更改branch,就像这样做一样git diff <branch>..HEAD

在所有情况下,您都可以使用arc which <commit>来预览arc diff将要做什么。这将解释将选择哪个修订范围,向您显示命令以准确查看包含哪些更改,并解释为什么选择该范围。

您还可以使用arc diff --preview仅生成差异,而不将其发送以供审核。这将让您在将更改提交给其他人之前预览更改。

也可以看看:

https://secure.phabricator.com/book/phabricator/article/arcanist_commit_ranges/

于 2013-11-09T17:29:28.653 回答
4

Evan 的回答通常更可取,因为它更能反映最佳 git 工作流程实践。如果可以的话,我建议遵循。

如果您需要快速修复并且正在(签出)您想要推送到的同一分支中工作,您也可以为单个提交或N次提交执行arc diff HEAD^或。HEAD~arc diff HEAD~N

于 2013-12-02T17:39:35.400 回答