Не удалось зафиксировать файл, случайно переименованный в mv

Я случайно использовал mv для переименования файла, который находился под git. Я переименовал файл от нижнего регистра до верхнего регистра, сохраняя его имя.

mv abc.java ABC.java

Я также внес изменения и передал файл после этого.

Как сделать фактическое переименование git этого файла? git bash, похоже, не понимает разницу между ABC.java и abc.java.

Я не уверен, что изменилось на master (другими), но после перехода к ветке я больше не могу зафиксировать свои изменения в файле. Он говорит, что старый индекс файла все еще существует.

$git commit -m "переименован в верхний регистр" ABC.java фатальный: не будет добавлять псевдоним файла 'dir1/ABC.java' ('dir1/abc.java' уже существует в индексе)

Когда я выполняю git статус, он показывает переименованные файлы, но не позволяет мне переименовывать файлы. Если я попытаюсь удалить abc.java(который на самом деле не присутствует хотя бы локально), снова (я думаю, из-за нечувствительности к регистру) git удаляет новый.

Если я клонирую новое репо из этого, репо все еще вытаскивает файлы со старым именем (abc.java), но все мои изменения до тех пор, пока в нем не появятся последние неудачные.

Ответ 1

Простой git commit -m "сообщение" без параметра пути к файлу помогло. Он обновил индекс, который, как я думаю, или, по крайней мере, наконец, смог распознать abc, должен быть обновлен до ABC.. Спасибо всем..

Ответ 2

Вы можете сделать:

$ git mv {abc,ABC}.java

Ответ 3

Если вы хотите узнать, в какой фиксации вы вносили изменения в abc.java, вы можете использовать:

git log --follow abc.java

в результатах, вы можете найти фиксацию, в которой вы ее переименовали.

Чтобы восстановить исходное имя файла, вы можете использовать git reset с флагом --soft, который будет отключать ваши изменения, не отбрасывая их, позволяя вам выполнить исправление и передать их снова.

Я рекомендую вам прочитать следующие ссылки на git reset, чтобы получить хорошее представление об этом, прежде чем пытаться сделать что-то опасное.

Git reset учебник от Atlassian

Git reset Демистифицированный

Ответ 4

Переименование имени папки в folderName на файловых системах без регистра.

Простое переименование с помощью обычной команды mv (не git mv) не будет распознано как изменение файла из git. Если вы попробуете его с помощью команды git mv, как в следующей строке

git mv foldername folderName

Если вы используете файловую систему, не учитывающую регистр, например. youre на Mac, и вы не настроили его на чувствительность к регистру, вы получите сообщение об ошибке, подобное этому:

fatal: переименовать 'имя папки не удалось: недопустимый аргумент

И вот что вы можете сделать, чтобы заставить его работать: -

git mv foldername tempname && git mv tempname folderName

Это разделяет процесс переименования, сначала переименовывая папку в совершенно другое имя папки. После переименования его в другое имя папки папка может быть, наконец, переименована в новую папкуName. После этих git mvs, не забудьте добавить и зафиксировать изменения. Хотя это, вероятно, не красивая техника, она отлично работает. Файловая система по-прежнему не распознает изменения букв, но git делает это переименованием в новое имя папки, и это все, что мы хотели:)