git mv

Zmienia nazwę lub przenosi plik, aktualizując poczekalnię.

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 — przenosi app.js do katalogu src i 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ący config.prod zawartością config.dev.
  • git mv index.html style.css assets/ — wrzuca oba pliki do katalogu assets jednym 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.