Почему "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", чтобы отключить это.
Благодаря х-юри для головок!