Cofnij git mv (zmień nazwę)


139

Jaki jest właściwy sposób na cofnięcie zmiany nazwy w git, na przykład:

git mv file1 file2

21
git mv file2 file1
Bezczelna

@CanSpice: To jest poprawna odpowiedź; nic w tym bezczelnego.
CB Bailey,

1
@Charles: Cóż, podałem to jako właściwą, bezczelną odpowiedź. :-)
CanSpice

git mv file2 file1 Spodziewałeś się czegoś innego?
Lakshman Prasad

Odpowiedzi:


230

Bezczelna odpowiedź:

git mv file2 file1

Automatycznie aktualizuje indeks starych i nowych ścieżek.

Sprawdź dokumentację git mv


4
załóżmy, że plik1 i plik2 znajdują się w bieżącym katalogu (.), to dlaczego git checkout .nie działa, nawet z -fopcją?
ryenus

9
Wydaje się rzadkie, że rzeczy są tak intuicyjne, jak to :)
ragerdl

@ryenus Musisz użyć git checkout -- ..
Joseph238

Lol. To zabawne.
Dmitriy Dokshin

Nie działało dla mnie podając błąd:, fatal: source directory is empty,tylko git reset --hardwykonałem pracę.
mac13k

43

Jeśli nie dokonałeś żadnych innych zmian (które chcesz zachować) od ostatniego zatwierdzenia, możesz to zrobić

git reset --hard

6
Nie chciałbym nabrać nawyku używania git reset --hard. Samo przesunięcie go do tyłu wydaje mi się bezpieczniejszą opcją.
osa

4
Pracował dla mnie. Chciałem cofnąć „git mv”, które 1) nie zostało jeszcze
zatwierdzone

Jeśli masz inne zmiany, które chcesz zachować, spowoduje to ich zniszczenie.
user151841

13
git reset HEAD file2

załatwił sprawę dla mnie


1
Jedynym problemem, jaki miałem z tą odpowiedzią, jest to, że pozostawiła kopie dla pliku2 na dysku.
user52472

9

W moim przypadku przeniosłem cały folder, a potem zdałem sobie sprawę, że nie powinienem.

Bardzo podobała mi się odpowiedź @Dave Konopka, ale nie odniosłem większego sukcesu z takim podejściem (może moja wersja GIT (1.8.4)? Moje pliki nadal były wyświetlane jako usunięte. Miałem inne zmiany na stosie, których nie chciałem stracić (niestety).

Udało mi się to zrobić:

git reset moved_folder
git checkout original_folder

8

To zależy od tego, co chcesz osiągnąć. Jeśli chcesz, aby wyglądał tak, jakby plik nigdy nie był przenoszony, możesz zresetować (lub zmienić bazę) z powrotem do stanu sprzed przeniesienia. Jeśli nie obchodzi cię historia, po prostu cofnij ją.


4
Pierwszy działa dobrze, o ile nie nacisnąłeś swojego zobowiązania lub ktoś nie wyciągnął z Ciebie środków.
CanSpice,

7

Jeśli przypadkowo zmieniłeś nazwę dużej liczby plików i chcesz wrócić do początku, usuń wszystkie pliki o zmienionych nazwach, które są wyświetlane jako addspod git statuspołączeniem.

Po usunięciu wszystkich zmienionych plików możesz uruchomić git checkout -- *lokalnie, aby przywrócić oryginalne nazwy plików.


4
git reset HEAD file2
git checkout -- file1
rm file2

Pierwsze polecenie usuwa ze sceny plik2, ale pozostawia jego kopię. Drugie polecenie przywraca oryginalny plik, a trzecie usuwa nowy plik.


1

Sztuczka, której użyłem, polegała na zrobieniu skrytki git, aby cofnąć wszystkie moje zmiany (w tym przywrócenie plików mv'd), a następnie usunąłem skrytkę za pomocą git stash drop.


0

Mniej przerażające jest przejście na najwyższy poziom repozytorium i wykonanie:

git reset
git checkout.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.