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

139

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

git mv file1 file2
jrdioko
источник
21
Нахальный ответ:git mv file2 file1
CanSpice
@CanSpice: это правильный ответ; в этом нет ничего нахального.
CB Bailey
1
@ Чарльз: Ну, тогда я поставил это как правильный не дерзкий ответ. :-)
CanSpice
git mv file2 file1 Вы ожидали что-нибудь еще?
Лакшман Прасад

Ответы:

230

Не дерзкий ответ:

git mv file2 file1

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

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

CanSpice
источник
4
Предположим, что file1 и file2 находятся в текущем каталоге (.), тогда почему git checkout .не работает, даже с -fопцией?
ryenus
9
Кажется редким, что все так интуитивно
понятно,
@ryenus Вы должны использовать git checkout -- ..
Joseph238
Ржунимагу. Это смешно.
Дмитрий Докшин
Не работал у меня, давая ошибку: fatal: source directory is empty,только git reset --hardсделал работу.
mac13k
43

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

git reset --hard
Клас Меллборн
источник
6
Я бы не хотел привыкать к использованию git reset --hard. Просто сдвинуть его назад кажется мне более безопасным вариантом.
OSA
4
Работал на меня. Я хотел отменить "git mv", который 1) еще не был совершен, и 2) у меня не было никаких других выдумок
Эд горы
Если у вас есть другие изменения, которые вы хотите сохранить, это уничтожит их все.
user151841
13
git reset HEAD file2

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

Збигнев
источник
1
Единственный вопрос, который у меня возник с этим ответом, это то, что он оставил копии для file2 на диске.
user52472
9

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

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

Я имел успех, делая это:

git reset moved_folder
git checkout original_folder
zedd45
источник
8

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

Уильям Перселл
источник
4
Первый работает нормально, пока вы не выдвинули свой коммит или кто-то не вытянул вас.
CanSpice
7

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

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

Дейв Конопка
источник
4
git reset HEAD file2
git checkout -- file1
rm file2

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

Камараю Кусуманчи
источник
1

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

sevencontinents
источник
0

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

git reset
git checkout.

w0mbat
источник