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
jrdioko
źródło
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

CanSpice
źródło
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
Klas Mellbourn
źródło
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

zbig
źródło
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
zedd45
źródło
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ą.

William Pursell
źródło
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.

Dave Konopka
źródło
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.

Kamaraju Kusumanchi
źródło
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.

siedemkontynentów
źródło
0

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

git reset
git checkout.

w0mbat
źródło