Я переименовал пару файлов, используя git mv
, использовал git stash
, быстро взглянул на HEAD (не меняя его), а затем сделал, git stash pop
чтобы вернуть все обратно. Мои ходы исчезли из списка коммитов, поэтому я переделал их, git rm
и в сообщении коммита утверждалось, что git обнаружил, что переименование было переименованием. Так что я больше не думал об этом.
Но теперь, после фиксации, я не могу получить доступ к истории перемещенных файлов! Вот что git говорит о рассматриваемой фиксации:
~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.h
delete mode 100644 test/R_DebugUI_iOS.m
create mode 100644 system/runtime/src/R_DebugUI_iOS.h
create mode 100644 system/runtime/src/R_DebugUI_iOS.m
<<snip older commits>>
~/projects%
Сейчас я пытаюсь получить историю одного из этих перемещенных файлов, чтобы посмотреть старую версию, но не получаю ничего очень полезного:
~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
~/projects/system/runtime/src%
(Я также пробовал без -M
, -C
и --find-copies-harder
, но безрезультатно.)
Я могу получить его историю под его старым именем, которое останавливается в том месте, где оно было удалено из старого местоположения:
~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.m
commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date: Tue Dec 7 23:52:51 2010 +0000
Can set debug UI's alpha.
<<snip older commits>>
~/projects%
Так что на этот раз я не застрял полностью, но мне бы не хотелось, чтобы мне приходилось делать такие вещи все время. (Я ожидаю, что у меня будет изрядное количество файлов, которые будут перемещены хотя бы раз в жизни.)
Я делаю что-то неправильно? Старая копия файла и новая копия на 98,8% совпадают (изменены 2 строки из 166). Насколько я понимаю, git должен иметь возможность отслеживать файл в этом случае, потому что он подразумевает операции переименования, а не их явное сохранение, и файлы достаточно похожи, чтобы я считаю, что он должен считать их одинаковыми.
Что я могу сделать, чтобы это исправить?
Ответы:
Пожалуйста, попробуйте с
git log --follow
вашим файлом. Я узнаю отсюда. Можно ли перемещать / переименовывать файлы в git и сохранять их историю?источник
fatal: ambiguous argument 'file.txt': unknown revision or path not in the working tree
, попробуйте git log --follow - file.txtНу, я вижу свои переименования с
git log -M --summary
..источник
git log -M --summary
не дает никакой информации о переименовании, если вы просто просматриваете историю некоторого данного файла, то есть с аргументом файла.Отвечая на свой вопрос, поскольку мне удалось развеять мои опасения, даже если я не решил свою проблему в точности. (
git log --follow
хотя все еще не работает для меня.)Во-первых, в
--summary
журнале фиксации переименования естьdelete
строка со старым именем файла. Так что, если его легко обнаружить, вы можете найти его старое название иgit log
оттуда.Если это часть какого-то большого коммита и, следовательно, его труднее обнаружить - а эта ситуация была одной из моих проблем -
git blame -C
можно использовать с новым именем файла в первой ревизии после переименования. Предположительно строки остались от исходного файла! - поэтому git должен найти их источник и показать старое имя файла (и хеш фиксации для хорошей меры). Затем вы можете продолжить путь с помощьюgit log
.Итак, если вас интересует история файла как единицы (по какой-либо причине), то, похоже, это можно сделать относительно просто. Хотя у меня сложилось впечатление, что git предпочел бы, чтобы вы использовали его правильно.
источник
git log --follow .
где рабочий каталог в новом месте не работает, в то время какgit log --follow path/to/new/dir
, выполняемый из общего родительского каталога старого и нового местоположения, работает--follow
Параметр делает работу, но вам нужно сделать:git log --follow -- ./path/to/file
git -log filename.cs
останавливается при фиксации перемещения файла (текущий каталог установлен в папку с файлом). Однако в окне истории VS отображается весь журнал изменений файла. Также я вижу, что файл был перемещен с рабочего стола Github. Но такжеgit log -10 --follow filename.cs
показывает журнал перед фиксацией перемещения.Я считаю, что это то, что вы ищете.
источник