git push

Wysyła lokalne commity do zdalnego repozytorium.

git push wysyła Twoje lokalne commity do zdalnego repozytorium (np. GitHub, GitLab, własny serwer). Mówiąc wprost: dopóki nie zrobisz pusha, Twoja praca siedzi tylko na Twoim dysku i nikt inny jej nie widzi. Push aktualizuje gałąź po stronie zdalnej tak, by wskazywała na te same commity co Twoja lokalna gałąź, i przy okazji przesyła brakujące obiekty. To ostatni krok klasycznej trójki: addcommitpush.

Składnia i najważniejsze opcje

Podstawowa forma to git push [opcje] [ ], gdzie zdalne zwykle nazywa się origin.

  • -u (alias --set-upstream) — ustawia śledzenie gałęzi, dzięki czemu kolejne razy wystarczy samo git push.
  • --force-with-lease — bezpieczny force: nadpisze zdalną gałąź tylko, jeśli nikt nie dorzucił tam commitów, których nie masz lokalnie.
  • --force-if-includes — dodatkowe zabezpieczenie używane razem z --force-with-lease; sprawdza w reflogu, że masz już zintegrowane to, co jest na zdalnym. Samo, bez lease, nic nie robi.
  • --force (alias -f) — wymusza nadpisanie zdalnej gałęzi bez żadnych zabezpieczeń. Niebezpieczne.
  • --tags — wypycha też tagi, których normalny push nie wysyła.
  • --delete — usuwa gałąź lub tag po stronie zdalnej.
  • --dry-run (alias -n) — pokazuje, co zostałoby wysłane, ale niczego nie wypycha.
  • --all — wypycha wszystkie lokalne gałęzie naraz.

Przykłady użycia

  • git push — wypycha bieżącą gałąź do skonfigurowanego upstreamu.
  • git push -u origin feature/login — wysyła nową gałąź i od razu ją śledzi; potem starczy samo git push.
  • git push origin --delete stara-galaz — kasuje gałąź na serwerze (lokalna zostaje).
  • git push --force-with-lease — wypycha po rebase lub amend, nie depcząc cudzej pracy.
  • git push origin v1.2.0 — wysyła konkretny tag z wersją.

Częste błędy i pułapki

„rejected — fetch first” to klasyk: ktoś wypchnął coś przed Tobą. Zrób git pull (najlepiej --rebase), rozwiąż konflikty i dopiero wtedy push. Nie ratuj się od razu --force.

Goły git push --force potrafi skasować cudze commity bezpowrotnie. Jeśli naprawdę musisz nadpisać historię (po rebase), używaj --force-with-lease, a w zespole najlepiej --force-with-lease --force-if-includesGit sam Cię zatrzyma, gdy na zdalnym pojawiło się coś nowego.

Pamiętaj też, że push wysyła tylko commity — niezacommitowane zmiany w plikach roboczych zostają u Ciebie. A tagów domyślnie nie wypycha wcale, więc po git tag dodaj git push --tags albo wskaż tag jawnie.

Powiązane komendy: git commit, git pull, git fetch, git remote, git branch, git tag.