git mv to skrótowiec, który w jednym kroku zmienia nazwę pliku lub przenosi go w inne miejsce repozytorium i od razu informuje o tym Gita. Pod spodem robi dokładnie to samo, co ręczne mv stary nowy plus git add nowy i git rm stary — tylko że nie musisz pamiętać o tych dwóch ostatnich krokach. Dzięki temu zmiana ląduje w poczekalni (ang. staging area) gotowa do commita, a Ty nie zostawiasz po sobie bałaganu w postaci „zniknął jeden plik, pojawił się drugi”.
Składnia i najważniejsze opcje
Podstawowa forma to git mv <źródło> . Jeśli jest istniejącym katalogiem, możesz przenieść do niego wiele plików naraz: git mv plik1 plik2 katalog/.
-f,--force— wymusza operację, nawet gdy plik docelowy już istnieje (nadpisze go).-k— pomija (zamiast przerywać) ruchy, które by się nie powiodły, np. gdy źródło nie jest śledzone albo cel już istnieje.-n,--dry-run— „na sucho”: pokazuje, co by się stało, ale niczego nie rusza.-v,--verbose— wypisuje nazwy plików w miarę przenoszenia.
To cały zestaw — git mv jest celowo ascetyczny.
Przykłady użycia
git mv app.js src/app.js— przenosiapp.jsdo katalogusrci odnotowuje to w poczekalni.git mv README README.md— zmienia samą nazwę pliku, bez ruszania go z miejsca.git mv -n stary.txt nowy.txt— sprawdza, czy operacja przejdzie, zanim ją wykonasz naprawdę.git mv -f config.dev config.prod— nadpisuje istniejącyconfig.prodzawartościąconfig.dev.git mv index.html style.css assets/— wrzuca oba pliki do kataloguassetsjednym poleceniem.
Częste błędy i pułapki
„fatal: not under version control” — próbujesz przenieść plik, którego Git jeszcze nie śledzi. Najpierw git add, potem git mv, albo po prostu użyj zwykłego mv.
„destination exists” — cel już istnieje, więc Git odmawia. Dodaj -f, jeśli świadomie chcesz go nadpisać.
Pamiętaj, że git mv nie tworzy commita — przenosi tylko do poczekalni. Po nim wciąż musisz zrobić git commit. Mit o „śledzeniu zmiany nazwy”: Git nie zapisuje jawnie, że to rename — wykrywa to dopiero przy git log czy git diff po podobieństwie zawartości. Dlatego przenoszenie pliku i jego mocna edycja w jednym commicie potrafi zgubić historię — rozbij to na dwa commity. Na Windowsie i macOS system plików bywa case-insensitive, więc zmiana Plik na plik wymaga sztuczki: git mv -f Plik plik albo przejście przez nazwę tymczasową.
Powiązane komendy: mv, git rm, git add, git restore, git log --follow.