После «простого» слияния (без конфликтов) git show
обычно отображается только
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Это связано с тем, что для слияний git show
используется комбинированный формат diff, в котором пропускаются файлы, согласующиеся с любой из родительских версий.
Есть ли способ заставить git по-прежнему показывать все различия в комбинированном режиме сравнения?
Выполнение git show -m
покажет различия (используя попарные различия между новой и всеми родительскими версиями соответственно), но я бы предпочел, чтобы различия были отмечены +/- в соответствующих столбцах, как в комбинированном режиме.
Ответы:
Нет, это невозможно сделать
git show
. Но иногда это было бы неплохо, и, вероятно, это было бы относительно легко реализовать в исходном коде git (в конце концов, вы просто должны сказать ему, чтобы он не обрезал то, что он считает посторонним выводом), так что патч для этого вероятно, будут приняты сопровождающими git.Будьте осторожны с тем, чего вы хотите; объединение ветви с однострочным изменением, которое было разветвлено три месяца назад, все равно будет иметь огромное отличие от основной линии, и поэтому такое полное изменение будет почти бесполезным. Вот почему Git не показывает это.
источник
Посмотрите на сообщение о коммите:
обратите внимание на строку:
возьмите эти два идентификатора коммитов и измените их. так что для получения различий, которые вы хотите, вы должны сделать:
показать только имена измененных файлов:
и чтобы извлечь их, вы можете добавить это к вашему gitconfig:
затем используйте его, выполнив:
источник
git diff fc17405...ee2de56
- это покажет все изменения на ee2de56, которые достижимы от коммитов на fc17405, что, я считаю, то, что вы хотите. Обратите внимание на 3 точки вместо двух.git log
, который по-прежнему показывает все коммиты, как..
вариант...
и...
сделать то же самое дляlog
, но потому чтоdiff
они разные !? Как получить список коммитов, которые были объединены в эту ветку?Лучшее решение (упомянутое @KrisNuttycombe):
для коммита слияния:
показать все изменения
ee2de56
, которые достижимы с коммитовfc17405
. Обратите внимание на порядок принятия хэшей - он такой же, как показано в информации о слиянии:Merge: fc17405 ee2de56
Также обратите внимание на 3 точки
...
вместо двух !Для получения списка измененных файлов вы можете использовать:
источник
Вы можете создать ветку с HEAD, установленным в один коммит перед слиянием Затем вы можете сделать:
Это объединит, но не совершит. Затем:
источник
Похоже, здесь ответили: https://public-inbox.org/git/7vd392ezhx.fsf@alter.siamese.dyndns.org/
источник
Я думаю, вам просто нужно git show -c $ ref. Попытка сделать это в репозитории git на a8e4a59 показывает комбинированный diff (плюс / минус символы в одном из 2 столбцов). Как упоминается в руководстве по git-show, оно в значительной степени делегирует «git diff-tree», поэтому эти параметры выглядят полезными.
источник
git show -c $ref
показывается тот же результат, который я цитировал, т.е. никаких различий.-c
выбирает комбинированный режим сравнения, очень похожий на режим по умолчанию для коммитов слияния, который равен '--cc', смотритеgit help show
иgit help diff-tree
. Оба полностью опускают файлы, которые согласуются с любой из родительских версий этого файла.a8e4a59
действительно, я не имею в виду слияния. Этот коммит слияния действительно содержит один файл, который отличается от обеих его родительских версий.Documentation/git-fast-import.txt
некоторые вещи добавлены от одного родителя, а некоторые от другого. Это приводит к непустому выводу изgit diff-tree --cc
. Однако показаны только изменения в этом «конфликтующем» случае. Все "чистые" результаты слияния, смотритеgit show -m a8e4a59
, вообще не отображаются.git show -c
. (man git-diff-tree
говорит «Более того, в нем перечислены только файлы, которые были изменены от всех родителей». Но я, конечно, этого не заметил.)в вашем случае вам просто нужно
или просто хеш за вас фиксируете:
источник
git merge-base HEAD^ HEAD^2
иHEAD^
иHEAD^2
в том же стиле , как это делается для файлов , которые были слиты с конфликтами.Если ваш коммит слияния является коммитом 0e1329e5, как указано выше, вы можете получить diff, который содержался в этом слиянии:
Надеюсь, это поможет!
источник
Если вы сидите на коммите слияния, то это показывает различия:
git diff HEAD~1..HEAD
Если вы не в коммите слияния, просто замените HEAD коммитом слияния. Этот метод кажется самым простым и интуитивно понятным.
источник
Вы можете использовать команду diff-tree с флагом -c. Эта команда показывает, какие файлы были изменены в коммите слияния.
Я получил описание флага -c от Git-Scm :
источник
Я построил универсальный подход к выполнению различных операций над коммитами слияния.
Шаг первый : Добавьте псевдоним в git, отредактировав
~/.gitconfig
:Шаг второй : В
~/.githelpers
, определите функцию bash:Шаг третий : прибыль!
Здесь, наверное, очень много возможностей для улучшения, я просто собрал все это вместе, чтобы преодолеть досадную ситуацию. Не стесняйтесь издеваться над моим синтаксисом и / или логикой bash.
источник