git log, git diff История изменений, вывод разницы, отличий между коммитами/состояниями, короткие хэши, имена файлов. Примеры

В этой заметке написано как смотреть разницу в состояниях репозитория в разные моменты истории изменений.

Прежде чем определять разницу нам потребуется вывести историю изменений

git log История изменений фалов

(флаги, приведенные ниже можно комбинировать)

  • Журнал всех изменений:
    git log
  • С перечислением имен измененных файлов в каждом коммите:
    git log  --name-only 

    Или тоже самое с короткими хэшами и более кратко/аккуратно:

    git log --oneline --name-only 
  • С подробной информацией об изменениях в каждом коммите:
    git log  -p 
  • История изменений конкретного файла:
    git log -p путьКфайлу
  • Фильтрация истории изменений по имени пользователя:
     git log  --author="ИмяПользователя"
  • Вывод истории с короткими хэшами коммитов (краткая форма):
    git log --oneline
  • Вывод истории коммитов только для текущей ветки -- если вы ответвились от ветки главнаяветка, то так:
    git log главнаяветка..

ПРИМЕЧАНИЕ: история в консоли может показываться в многострочном режиме, чтобы выйти из него нажмите Q.

Теперь перейдем к тому как смотреть изменения.

git diff Вывод разницы между состяниям/коммитами

  • Между текущем состоянием рабочей копии (незакоммиченные изменения) и последним коммитом можно так:
    git diff HEAD
  • Между последним коммитом и текущем состоянием:
    git diff HEAD^ HEAD
  • Чтобы вывести только имена изменившихся файлов, используйте команду:
    git diff --name-only SHA1 SHA2

    где SHA1 SHA2 -- хэши коммитов-границ интересующих вас изменений.

  • Между последнем коммитом и предыдущем состоянии:
    git diff хэшКоммита хэшКоммита~1

    например:

    git diff --name-only bd113045 bd113045~1

    -- причем:

    • ~1 -- это непосредственный родитель коммита с хэшем хэшКоммита
    • ~2 -- дедушка
    • ~3 -- прадедушка и т.д.

    (источник соображений по использованию тильды: https://mirrors.edge.kernel.org/pub/soft...)
    --name-only -- флаг для вывода только имен изменившихся файлов, если вам нужны и подробности внутренних изменений, то уберите его из команды.

ПРИМЕЧАНИЕ: разница в консоли может показываться в многострочном режиме, чтобы выйти из него нажмите Q.