2016-05-21 3 views
1

Я создал тестовый проект git, чтобы выяснить, как мне получить разницу между двумя ветвями.git отличается журналами между двумя ветвями

В большинстве случаев мы будем иметь такой случай: хозяин филиал имеет вишню несколько фиксаций освоить см ниже графике: enter image description here

«Я» совершить это вишня освоить отрасль. Мой ожидаемый результат разницы между журналами между master и dbg_feature должен быть только «J».

Но на самом деле, когда я запускаю команду ниже:

git cherry -v master dbg_feature 

я буду получать "I" и "J", вишня, выбрал один "я" по-прежнему перечислять в нем:

+ a1915061be2f445d322abc7bfb7d19bbb357b917 I 
+ 6486e899e07b6d6f539cbcad10655dcc345f434d J 

Если я запускаю команду ниже:

git log --oneline --no-merges master..dbg_feature 

выход ниже:

6486e89 J 
a191506 I 

Если запустить мерзавец преподобного список команды, как показано ниже:

git rev-list --oneline --no-merges --cherry-pick --right-only master...dbg_feature 
6486e89 J 
a191506 I 

Результата кажется таким же, как журнал мерзавца.

Итак, какова правильная команда для получения точных различий между двумя ветвями?

+0

Захватывание вишневых записок будет рассматриваться как новый коммит, поэтому я думаю, что невозможно отличить отбор вишнёвых коммитов. если все слилось, все должно быть хорошо. – beetlej

+0

Немного странно, согласно выводам, «I» и «J» должны быть связаны с dbg_feature, но не с мастером. Кроме того, у мастера нет никаких эквивалентных коммитов для I или J. Если у него есть эквивалентная фиксация для I, + должен быть -. – ElpieKay

+0

@ElpieKay Да, потому что я вишневый, чтобы овладеть, но эта команда, похоже, этого не знает. – lucky1928

ответ

0

Непонятно, что вы имеете в виду под «отличными коммитами». Тем не менее, ваше упоминание использования git cherry предполагает, что вы говорите о том, что the git rev-list documentation относится как «эквивалент» или «патч-эквивалентный» совершает (или их противоположность, которую я и они называют «неэквивалентных» совершает):

--cherry-mark

            Как --cherry-pick (смотри ниже), но знак эквивалент совершает с =, а не опуская их, и неэквивалентных из них с +.

--cherry-pick

            Опустить любую фиксацию, который вводит такое же изменение, как другие совершить на «другой стороне», когда множество фиксаций ограничены с симметрической разностью.

            Например, если у вас есть две ветви, A и B, обычный способ перечислить все совершающее на только одна сторона из них с --left-right (смотрите пример ниже в описании --left-right опция). Тем не менее, он показывает фиксации, которые были выбраны из другой ветви (например, «3-й на b» может быть выбран из вишни из ветки A). С помощью этой опции такие пары исключений исключаются из вывода.

--left-only
--right-only

            Список совершает только на соответствующей стороне симметричного диапазона, то есть только те, которые будут отмечены < соотв. > от --left-right.

            Например, --cherry-pick --right-only A...B опускает те коммиты из B, которые находятся в A или являются патч-эквивалентно фиксации в A. Другими словами, в этом списке + фиксируется от git cherry A B. Точнее, --cherry-pick --right-only --no-merges дает точный список.

--cherry

            синоним --right-only --cherry-mark --no-merges; полезно ограничить вывод коммитов на нашей стороне и маркировать те, которые были применены к другой стороне разветвленной истории, с git log --cherry upstream...mybranch, аналогично git cherry upstream mybranch.

Опять же, все это аргументы команды git rev-list. Поскольку git rev-list и git log - почти такая же команда (за исключением мелких деталей, таких как их выходной формат :-)), они также работают с git log.

+0

Может быть, разные журналы более значимы? Обновлено. Команда «git rev-list --oneline --no-merges --cherry master..dbg_feature» кажется выводной.I и J, но не только J. – lucky1928

+0

Моим камнем преткновения является слово «differ». Это английское слово, но, как слово, это глагол: Фред и Боб отличаются друг от друга, в то время как Боб и Кэрол согласны. (См. Http://www.dictionary.com/browse/differ). Говорить «журналы отличаются» означали бы, например, что вы запускали 'git log A' и' git log B' и получали разные результаты, что неудивительно но, похоже, не имеет никакого отношения к вашему фактическому вопросу. Между тем обратите внимание на * важное примечание *, что эти флаги «rev-list» должны использоваться с синтаксисом * three * dot. – torek

Смежные вопросы