Pushnout znamená odeslat lokální commity do vzdáleného repozitáře Git, čímž se zpřístupní ostatním členům týmu. Po pushi se změny objeví na GitHub, GitLab nebo Bitbucket. Podle GitHub Octoverse 2024 je denně na platformu pushnuto více než 10 milionů commitů. Git push je klíčová akce pro synchronizaci práce v distribuovaném týmu.
Hlavní body
Git push je příkaz, který přenáší commity z lokálního repozitáře do vzdáleného. Na rozdíl od commitu, který ukládá změny pouze na lokálním počítači vývojáře, push tyto změny publikuje pro celý tým. Push je povinný krok před vytvořením Pull Requestu a nasazením.
Architektura Gitu předpokládá, že každý vývojář pracuje ve svém vlastním lokálním repozitáři. Commity se vytvářejí lokálně a hromadí se, dokud se vývojář nerozhodne je pushnout. To dává svobodu: můžete dělat mnoho lokálních commitů, experimentovat a přepisovat historii bez ovlivnění kolegů.
# Push do origin remote, main větve
git push origin main
# Push aktuální větve do remote s upstream
git push -u origin feature/new-dashboard
# Push všech větví s odpovídajícími názvy
git push --all origin
# Force push s lease (bezpečný force push)
git push --force-with-lease
Po pushi vzdálený repozitář aktualizuje refs (reference na větve) tak, aby ukazovaly na nové commity. Ostatní vývojáři mohou tyto změny získat pomocí git pull nebo git fetch. Právě tato výměna commitů tvoří základ kolaborativního vývoje.
Příkaz git push porovnává lokální a vzdálené větve a přenáší pouze chybějící commity. Git neposílá všechny soubory znovu — přenáší pouze deltu, což dělá push rychlým i u velkých repozitářů. Git protokol používá smart transfer, který minimalizuje objem přenášených dat.
Pokud vzdálená větev obsahuje commity, které lokálně neexistují, push bude odmítnut. Toto je ochranný mechanismus zabraňující ztrátě změn. V takové situaci by měl vývojář nejprve provést git pull, sloučit změny a teprve poté pushnout znovu. Alternativou je force push, který přepíše vzdálenou větev, ale musí být používán opatrně.
| Příkaz | Akce | Kdy použít |
|---|---|---|
| git push | standardní push do sledované větve | běžné odesílání změn |
| git push -u | push s nastavením upstream | první push nové větve |
| git push --force-with-lease | bezpečný force push | po rebase vlastní větve |
| git push --force | vynucený push | pouze pokud jste si jisti, že nehrozí kolize |
| git push --delete | smazání vzdálené větve | vyčištění po sloučení větve |
Porozumění vzdáleným repozitářům je klíčem ke správnému pushování. Obvykle se používá origin — výchozí název vzdáleného repozitáře. Příkaz git remote -v zobrazuje seznam vzdálených repozitářů a jejich URL. Lze přidat několik remote (např. origin pro hlavní repozitář a upstream pro fork).
Základní pravidlo: pushovat by se mělo po každé logicky dokončené fázi práce. Pokud vývojář dokončil úkol nebo jeho část — je čas pushnout. Nicméně pushování nedokončené práce, která rozbíjí build, se nedoporučuje. Nerozbitý build je minimální požadavek pro push do jakékoli větve.
V týmovém vývoji je přijat následující rytmus: ráno — git pull pro získání změn kolegů, během dne — několik commitů a jeden nebo dva pushy, večer — finální push všech dokončených úkolů. Čím častěji vývojář pushuje, tím menší je riziko konfliktů při slučování větví a tím transparentnější je postup práce.
Bezpečný push je soubor pravidel zabraňujících ztrátě dat a konfliktům v týmu. První a nejdůležitější pravidlo: nikdy nepushujte přímo do main nebo master větve, pokud v projektu není nakonfigurováno přímé nasazení. V moderních týmech je ochrana main větve konfigurována na úrovni GitHub branch protection.
Druhé pravidlo: před pushem se synchronizujte se vzdálenou větví. Proveďte git pull --rebase, abyste se vyhnuli merge commitu při slučování. To zjednodušuje historii a činí ji lineární. Pokud je push odmítnut — nepoužívejte holý force push, ale nejprve zjistěte, jaké commity se objevily ve vzdálené větvi.
Třetí pravidlo: nakonfigurujte pre-push hooky, které automaticky spouštějí testy a linter před odesláním. Pokud testy selžou — push je zablokován. Takové hooky se konfigurují přes Husky nebo Git hooks (soubor pre-push v .git/hooks).
Čtvrté pravidlo: nepushujte velké binární soubory. Git není určen k ukládání binárních artefaktů — nafukují repozitář a zpomalují operace. Pro velké soubory se používá Git LFS (Large File Storage). Pokud byl binární soubor již pushnut a dostal se do historie, musí být odstraněn pomocí git filter-branch.
Nejčastější příčinou neúspěšného pushování — vzdálená větev obsahuje commity, které lokálně neexistují. To se stane, když jiný vývojář pushnul své změny do stejné větve. Řešení: proveďte git pull, vyřešte případné konflikty a zopakujte push.
# Push odmítnut — nejprve fetch a rebase
git fetch origin
git rebase origin/main
# Vyřešit konflikty, poté:
git push --force-with-lease
# Nebo jednoduše sloučit vzdálené změny
git pull origin main
git push
Druhá příčina — nedostatek práv k zápisu do větve. Pokud je main větev chráněna pravidlem branch protection, přímé pushy jsou zakázány. Řešení: pushujte do feature větve a vytvořte Pull Request. Nastavení ochrany jsou obvykle spravována přes GitHub settings nebo GitLab protected branches.
Třetí příčina — problémy s autentizací. Zastaralé přihlašovací údaje, přechod na SSH nebo změna personal access tokenu. Řešení: zkontrolujte remote URL (git remote -v) a aktualizujte přihlašovací údaje. Od roku 2021 GitHub zrušil autentizaci heslem pro HTTPS — používá se osobní token nebo SSH klíč.
Často kladené otázky
Pushnout znamená odeslat lokální commity z repozitáře vývojáře na vzdálený server (GitHub, GitLab). Po pushi se změny stanou dostupnými pro tým, objeví se v Pull Requestu a mohou být nasazeny. Push je závěrečná fáze lokální práce s kódem před týmovou kolaborací.
Commit ukládá změny lokálně, v repozitáři vývojáře. Push odesílá tyto lokální commity na vzdálený server. Můžete udělat mnoho commitů bez pushování, ale aby kolegové viděli změny, musíte pushnout. Commit — uložení, push — publikace.
Push je odmítnut, pokud vzdálená větev obsahuje commity, které lokálně neexistují. Řešení: proveďte git pull (nebo git fetch + git rebase), sloučte změny a zopakujte push. Pokud pracujete ve své vlastní feature větvi a jste si jisti změnami, použijte git push --force-with-lease.
Ano, ale opatrně. Použijte git revert <commit-hash> — vytvoří commit, který vrací změny. Poté pushněte nový commit. Pokud potřebujete odstranit commity z historie, použijte git reset + git push --force-with-lease, ale pouze ve své vlastní feature větvi. git revert je bezpečná volba pro sdílené větve.
Pravidelný push zabraňuje ztrátě dat při poruše lokálního počítače, snižuje konflikty při slučování a dává týmu přehled o postupu práce. Pokud vývojář nepushuje týden, jeho změny se mohou výrazně odchýlit od main větve, což vede k složitým konfliktům při mergování.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také