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


139

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

git mv file1 file2

21
Нахальный ответ:git mv file2 file1
CanSpice

@CanSpice: это правильный ответ; в этом нет ничего нахального.
CB Bailey

1
@ Чарльз: Ну, тогда я поставил это как правильный не дерзкий ответ. :-)
CanSpice

git mv file2 file1 Вы ожидали что-нибудь еще?
Лакшман Прасад

Ответы:


230

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

git mv file2 file1

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

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


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

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.


0

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

git reset
git checkout.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.