Почему "w20> log - foo" не работает для удалённого файла foo?

Мой репозиторий претерпел изменения, такие как:

  • ... некоторые несвязанные коммиты...
  • Зафиксировать новый файл foo со 100 строками содержимого
  • ... вмешательство, некоторые из которых касаются foo...
  • Вставьте содержимое foo вверху существующего файла bar и git rm foo в том же commit
  • ... более несвязанные коммиты...

Теперь я хочу просмотреть журнал удалённого файла foo. Все, что я прочитал, в том числе и на SO, говорит, что я должен иметь возможность git log -- foo, но эта команда не выводит результат.

Если я найду коммит, который включает удаление foo, я могу git log 1234abcd -- foo и посмотреть его журнал, поэтому я думаю, что мой путь к foo не является проблемой. Также обратите внимание, что git merge-base HEAD 1234abcd выводит 1234abcd[...], поэтому я думаю, что это должно доказать, что фиксация достижима с HEAD. Обратите внимание, что в моем рабочем дереве нет файла foo (очевидно, поскольку он был удален). Использование Git 1.7.1.1 на OS X.

Почему мне не работает git log -- foo и как я могу его исправить? Спасибо!

Ответ 1

Вы хотите использовать опцию --follow на git log, которая описана на странице руководства:

Continue listing the history of a file beyond renames.

Эффективно это не только позволяет вам просмотреть историю переименованного файла, но также позволяет просматривать историю файла больше не в рабочем дереве. Поэтому команда, которую вы должны использовать, должна выглядеть примерно так:

git log --follow -- foo

Update:

Git 2.9+ теперь включил это по умолчанию для всех команд git diff и git log:

Конечные пользователи, столкнувшиеся с командами уровня Porcelain в "git diff" и "git журнал" по умолчанию включает обнаружение переименования; вы все еще можете используйте переменную конфигурации "diff.renames", чтобы отключить это.

Благодаря х-юри для головок!