Я думаю, что в целом, чтобы получить то, что вы хотите, вам придется выполнить какую-то операцию слияния/перебазирования, чтобы создать что-то для сравнения.
Когда вы действительно думаете об этом, идея различий между наборами изменений расплывчата. Я предполагаю, что вы находитесь в такой ситуации:
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\
(o - o - o - o - o)
[ "changeset 2" ]
Так что же означает сравнение этих двух? Возможно, в вашем случае различия в другой истории полностью отличаются от различий двух наборов изменений, но в целом содержимое набора изменений 1 может зависеть от этой другой истории! Это означает, что у git нет хорошего общего способа выполнить подобную операцию; чтобы сделать это правильно, он должен был бы, по сути, сказать: «Какая разница между двумя конечными фиксациями, если бы я перебазировался?» Другими словами, я считаю, что единственным разумным определением различия между наборами изменений является различие между результирующими конечными фиксациями, если они перебазируются, чтобы иметь общего предка. И, конечно же, если это то, что вы хотите, то вам придется выполнить операцию в рабочем дереве - нет другого способа возиться с подобными диффами. Очевидно, что нужно сделать перебазирование и сравнить новые конечные точки (ветки):
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\
(o - o - o - o - o)
[ "changeset 2'" ]
Однако перебазирование не всегда самое веселое, и я могу придумать один небольшой способ обойти это. Результирующее рабочее дерево перебазирования, при условии, что вы разрешаете конфликты надлежащим образом, должно быть таким же, как и в результате слияния:
[other history] [ "changeset 1" ]
o - o - o - o - o ( - o - o - o - o)
\ \
\ ------
\ \
(o - o - o - o - o) - X
[ "changeset 2" ]
Таким образом, вы можете выполнить это временное слияние и сравнить полученный коммит с конечным коммитом другого набора изменений. Это будет намного быстрее, чем делать rebase. (В любом случае вы, конечно, будете использовать одноразовую ветку, а не настоящую для набора изменений 2.)
person
Cascabel
schedule
18.02.2011