Можете ли вы сравнить с определенной веткой Git?

Я довольно плохо знаком с Arcanist и git. Я хотел бы иметь возможность создавать arc diff (экземпляр разности Phabricator, использующий Arcanist) для ветки git, в которой я в настоящее время извлечен / работаю (и у меня есть один локальный un-push-commit), а не master. Для меня неясные документы по этому вопросу. Является ли это возможным? Как? Было бы неплохо, если бы ответ работал и для 2-3 локальных un-push-коммитов.

Также "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.

Кроме того, я рад получить ответы "ты делаешь это неправильно", если ответ объясняет, как сделать это правильно.

2 ответа

Решение

В общем, arc diff <branch> будет делать то, что вы хотите. (Если вы уже находитесь на ветке, а не на локальной ветке, попробуйте arc diff origin/<branch> вместо.)

Когда вызывается так, arc будет фактически отличаться от merge-base подсказки ветви и текущего коммита в рабочей копии, но обычно это то, что вы намереваетесь. Если вы действительно хотите сгенерировать diff для подсказки ветки, вы можете использовать arc diff --base git:<branch>, но этот diff будет включать изменения, которые отменяют любые коммиты на branch которые являются потомками точки ветвления, так же, как git diff <branch>..HEAD было бы.

Во всех случаях вы можете использовать arc which <commit> чтобы просмотреть что arc diff Сделаю. Это объяснит, какой диапазон ревизии будет выбран, покажет вам команду, чтобы точно увидеть, какие изменения включены, и объяснит, почему этот диапазон выбран.

Вы также можете использовать arc diff --preview генерировать просто diff, не отправляя его на рассмотрение. Это позволит вам предварительно просмотреть изменения, прежде чем отправлять их кому-либо еще.

Смотрите также:

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

Ответ Эвана, как правило, предпочтительнее, потому что он больше отражает лучшие практики работы с git. Я рекомендую следовать этому, если вы можете.

Если вам нужно быстрое исправление и вы работаете в той же ветке, к которой хотите перейти, вы также можете сделать arc diff HEAD^ или же HEAD~ за один коммит или arc diff HEAD~N для N коммитов.

Другие вопросы по тегам