Отменить git mv (переименовать)

Как правильно отменить переименование в git, например:

git mv file1 file2

person jrdioko    schedule 04.02.2011    source источник
comment
Дерзкий ответ: git mv file2 file1   -  person CanSpice    schedule 04.02.2011
comment
@CanSpice: это правильный ответ; ничего дерзкого в этом нет.   -  person CB Bailey    schedule 04.02.2011
comment
@Charles: Что ж, тогда я представил это как правильный, не дерзкий ответ. :-)   -  person CanSpice    schedule 04.02.2011
comment
git mv file2 file1 Вы ожидали чего-то другого?   -  person lprsd    schedule 04.02.2011


Ответы (9)


Ненавязчивый ответ:

git mv file2 file1

Автоматически обновляет индекс как для старых, так и для новых путей.

Проверьте документацию по git mv

person CanSpice    schedule 04.02.2011
comment
предположим, что файл1 и файл2 находятся в текущем каталоге (.), тогда почему git checkout . не работает, даже с опцией -f? - person ryenus; 19.05.2012
comment
Редко когда бывает так интуитивно :) - person interestedparty333; 03.11.2015
comment
@ryenus Вам нужно использовать git checkout -- .. - person Joseph238; 06.06.2017
comment
Ржунимагу. Это смешно. - person Dmitriy Dokshin; 01.04.2020
comment
У меня не работало, выдавая ошибку: fatal: source directory is empty,, только git reset --hard выполнил задание. - person mac13k; 20.06.2020

Если вы не вносили никаких других изменений (которые вы хотите сохранить) с момента последней фиксации, вы можете сделать

git reset --hard
person Klas Mellbourn    schedule 27.02.2013
comment
Я бы не хотел привыкать использовать git reset --hard. Просто переместить его назад кажется мне более безопасным вариантом. - person Sergey Orshanskiy; 12.01.2015
comment
Работал на меня. Я хотел отменить git mv, который 1) еще не был зафиксирован и 2) у меня не было других изменений - person Ed of the Mountain; 30.03.2016
comment
Если у вас есть другие изменения, которые вы хотите сохранить, это уничтожит их все. - person user151841; 18.09.2019

git reset HEAD file2

сделал трюк для меня

person zbig    schedule 13.10.2016
comment
Единственная проблема, с которой я столкнулся с этим ответом, заключается в том, что он оставил копии для файла2 на диске. - person user52472; 29.01.2018

В моем случае я переместил целую папку, а потом понял, что не должен был этого делать.

Мне очень понравился ответ @Dave Konopka, но у меня не было большого успеха с этим подходом (может быть, моя версия GIT (1.8.4)? Мои файлы по-прежнему отображались как удаленные. У меня были другие изменения в стеке, которые я не хотел потерять (к сожалению).

Мне удалось сделать это:

git reset moved_folder
git checkout original_folder
person zedd45    schedule 21.04.2014

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

person William Pursell    schedule 04.02.2011
comment
Первый работает нормально, пока вы не нажали свою фиксацию или кто-то не вытащил ее из вас. - person CanSpice; 05.02.2011

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

Как только вы удалите все измененные файлы, вы можете запустить git checkout -- *, чтобы локально вернуть исходные имена файлов.

person Dave Konopka    schedule 22.03.2012

git reset HEAD file2
git checkout -- file1
rm file2

Первая команда удаляет файл2, но оставляет его копию. Вторая команда восстанавливает исходный файл, а третья удаляет новый файл.

person Kamaraju Kusumanchi    schedule 01.02.2018

Трюк, который я использовал, заключался в том, чтобы сделать git stash, чтобы отменить все мои изменения (включая восстановление файлов mv'd), а затем удалить git stash drop.

person sevencontinents    schedule 13.04.2018

Менее страшно перейти на верхний уровень репо и сделать:

git reset
git checkout .

person w0mbat    schedule 23.07.2020