Git diff работает неправильно - много изменений

           f1---f2                 - short term branch "feature1"
          /       \
      h--h--h---h--h1--h2-         - long term branch "hofix"
     /       \   \      \
    /         \   \      \
   m----m------m---m------m--      - long term branch "master"
                   |      |
                 1e1e1e 2f2f2f

Я объединяю ветки с разницей в 2 коммита (всего изменено 15 файлов). И побежал:

$ git show --pretty="format:" --name-only 1e1e1e..2f2f2f

В моем проекте было изменено более 42 000 файлов. Почему?

Ожидается: я покажу разницу с коммитами f1, f2, h1, h2

P.S. Может быть, из-за коммита «Объединить ветку origin / 0411-hotfix»?


person maxgu    schedule 20.11.2013    source источник
comment
Что возвращает git merge-base 1e1e1e 2f2f2f? Какой "h"?   -  person VonC    schedule 22.11.2013
comment
такое случается редко, в 1 из 5 случаев. Я не могу это поймать.   -  person maxgu    schedule 24.11.2013


Ответы (1)


1e1e1e..2f2f2f означает:

  • все коммиты, доступные с 2f2f2f
  • исключая те, которые доступны с 1e1e1e

(См. «УКАЗАНИЕ ДИАПАЗОНА» из _ 4_)

Если эти SHA1 ссылаются на два объединенных коммита, у вас есть:

    1e1e1e
      |
x--x--x
       \
        Z
       /
y--y--y
      |
    2f2f2f

Это даст вам все файлы из всех коммитов «y», которые потенциально могут доходить до самого первого коммита, а это означает, что вы получите все файлы.

Однако, поскольку git diff не принимает диапазон совершает (в отличие от git show), вы можете попробовать, как в " Как «git show» фиксацию слияния с комбинированным выводом различий ":

git diff --name-only 1e1e1e..2f2f2f

Или просто используйте слияние SHA1 'Z', как в "Перечислить все измененные файлы в git merge commit - даже быстро перенаправленные ":

git log -m -1 --name-only --pretty="format:" <Merge SHA>
person VonC    schedule 20.11.2013