Чому “git log -‌- foo” не працює для видаленого файлу foo?


89

Моє сховище зазнало таких змін, як:

  1. ... деякі непов’язані коміти ...
  2. Зафіксуйте новий файл fooіз 100 рядками вмісту
  3. ... втручаються коміти, деякі з яких торкаються foo...
  4. Вставте вміст fooу верхню частину існуючого файлу barта git rm fooв той самий коміт
  5. ... більше не пов’язаних комітів ...

Тепер я хочу переглянути журнал видалених файлів 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у мене не працює і як я можу це виправити? Дякую!


5
Спробували git log --follow -- fooчи git log --follow -M -- foo? (для примусового виявлення перейменування)
VonC

1
Чорт, я спробував --follow- але читаючи, historyя бачу, що з того часу cd'ed в іншому місці, коли я спробував, роблячи шлях недійсним. git log --follow -- fooпрацював, коли я намагався з правильної вихідної точки. Я припускаю , що Git вважається коченню fooв barякості свого роду перейменування? У будь-якому випадку дякую! Я буду радий це зарахувати, якщо ви перекажете його як відповідь.
user385804 07

1
Набридливе, що --змінюється на назву запитання ...
Cascabel

Відповіді:


118

Ви хочете використовувати --followопцію on git log, яка описана на сторінці довідок як:

Continue listing the history of a file beyond renames.

Фактично це не тільки дозволяє побачити історію перейменованого файлу, але це також дозволяє переглянути історію файлу, якого більше немає в робочому дереві. Тож команда, яку ви повинні використовувати, повинна виглядати приблизно так:

git log --follow -- foo

Оновлення:

Git 2.9+ тепер увімкнув це за замовчуванням для всіх git diffі git logкоманд:

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

Дякую x-yuri за підняті голови!


1
У мене це працювало без --followучасті. Мені просто потрібно було додати --. Я біжу git-2.9.0.
x-yuri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.