Скасувати git mv (перейменувати)


139

Який правильний спосіб скасувати перейменування в git, наприклад:

git mv file1 file2

21
Хитра відповідь:git mv file2 file1
CanSpice

@CanSpice: це правильна відповідь; нічого нахабного з цього приводу.
CB Bailey

1
@Charles: Ну, тоді я подав це як належну нерозважливу відповідь. :-)
CanSpice

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

Відповіді:


230

Нерозважлива відповідь:

git mv file2 file1

Оновлення індексу як для старих, так і для нових шляхів автоматично.

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


4
припустимо, що file1 і file2 знаходяться в поточному каталозі (.), то чому б git checkout .це не працювало навіть з -fопцією?
риен

9
Мабуть, рідкісні речі настільки ж інтуїтивні, як це :)
ragerdl

@ryenus Вам потрібно використовувати git checkout -- ..
Йосиф238

Лол. Це весело.
Дмитро Докшин

Не працював для мене, видаючи помилку:, fatal: source directory is empty,тільки git reset --hardзробив роботу.
mac13k

43

Якщо ви не зробили жодних інших змін (які ви хочете зберегти) з моменту останньої фіксації, ви можете це зробити

git reset --hard

6
Я не хотів би ввійти в звичку користуватися git reset --hard. Просто переміщення її назад здається мені більш безпечним варіантом.
оса

4
Працювали для мене. Я хотів скасувати "git mv", що 1) ще не було вчинено, і 2) у мене не було інших переслідувань
Ed of the Mountain

Якщо у вас є інші зміни, які ви хочете зберегти, це знищить їх усіх.
користувач151841

13
git reset HEAD file2

зробив трюк для мене


1
Єдине питання, з яким я мав цю відповідь, - це те, що він залишив копії для file2 на диску.
користувач52472

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

Перша команда недостає файл2, але залишає її копію. Друга команда відновлює вихідний файл, а третя видаляє новий файл.


1

Трюк, який я використав, - це зробити скрипт git, щоб скасувати всі зміни (що включає відновлення файлів mv'd), а потім видалив скриньку з падінням сховища git.


0

Менш страшно - перейти на найвищий рівень репо і зробити:

git reset
git checkout.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.