Att pusha innebär att skicka lokala commits till ett fjärr-Git-förråd, vilket gör dem tillgängliga för andra teammedlemmar. Efter pushen visas ändringarna på GitHub, GitLab eller Bitbucket. Enligt GitHub Octoverse 2024 pushas över 10 miljoner commits dagligen till plattformen. Git push är den viktigaste åtgärden för att synkronisera arbete i ett distribuerat team.
Huvudpunkter
Git push är ett kommando som överför commits från det lokala förrådet till fjärrförrådet. Till skillnad från commit, som sparar ändringar endast på utvecklarens lokala maskin, publicerar push dessa ändringar för hela teamet. Push är ett obligatoriskt steg innan man skapar en Pull Request och genomför driftsättning.
Gits arkitektur förutsätter att varje utvecklare arbetar i sitt eget lokala förråd. Commits skapas lokalt och ackumuleras tills utvecklaren bestämmer sig för att pusha dem. Detta ger frihet: man kan göra många lokala commits, experimentera och skriva om historien utan att påverka kollegor.
# Push till origin remote, main-gren
git push origin main
# Pusha aktuell gren till remote med upstream
git push -u origin feature/new-dashboard
# Pusha alla grenar med matchande namn
git push --all origin
# Force push med lease (säker force push)
git push --force-with-lease
Efter pushen uppdaterar fjärrförrådet refs (referenser till grenar) så att de pekar på nya commits. Andra utvecklare kan hämta dessa ändringar via git pull eller git fetch. Det är just detta utbyte av commits som utgör grunden för samarbetsbaserad utveckling.
Kommandot git push jämför lokala och fjärrgrenar och överför endast de commits som saknas. Git skickar inte alla filer på nytt — det överför endast deltat, vilket gör push snabb även för stora förråd. Git-protokollet använder smart överföring som minimerar mängden överförd data.
Om fjärrgrenen innehåller commits som inte finns lokalt kommer pushen att avvisas. Detta är en skyddsmekanism som förhindrar förlust av ändringar. I en sådan situation bör utvecklaren först utföra git pull, slå samman ändringarna och först därefter pusha igen. Alternativet är force push, som skriver över fjärrgrenen, men bör användas med försiktighet.
| Kommando | Åtgärd | När ska man använda |
|---|---|---|
| git push | standard push till spårad gren | vanlig sändning av ändringar |
| git push -u | push med inställning av upstream | första pushen av en ny gren |
| git push --force-with-lease | säker force push | efter rebase av egen gren |
| git push --force | tvångspush | endast om du är säker på att inga kollisioner finns |
| git push --delete | ta bort fjärrgren | rensning efter sammanslagning av gren |
Att förstå fjärrförråd är nyckeln till korrekt push. Vanligtvis används origin — standardnamnet för fjärrförrådet. Kommandot git remote -v visar en lista över fjärrförråd och deras URL:er. Man kan lägga till flera remote (t.ex. origin för huvudförrådet och upstream för fork).
Grundregeln: man bör pusha efter varje logiskt avslutad arbetsfas. Om en utvecklare har slutfört en uppgift eller en del av den — är det dags att pusha. Att pusha oavslutat arbete som bryter bygget rekommenderas dock inte. Ett fungerande bygge är minimikravet för att pusha till vilken gren som helst.
I teamutveckling accepteras följande rytm: på morgonen — git pull för att hämta kollegors ändringar, under dagen — några commits och en eller två pushes, på kvällen — slutlig push av alla slutförda uppgifter. Ju oftare en utvecklare pushar, desto mindre är risken för konflikter vid sammanslagning av grenar och desto mer transparent är arbetsframsteget.
Säker push är en uppsättning regler som förhindrar dataförlust och konflikter i teamet. Den första och viktigaste regeln: pusha aldrig direkt till main- eller master-grenen om inte direkt driftsättning har konfigurerats i projektet. I moderna team konfigureras skyddet av main-grenen på nivån av GitHub branch protection.
Andra regeln: före pushen, synkronisera med fjärrgrenen. Utför git pull --rebase för att undvika en merge-commit vid sammanslagning. Detta förenklar historien och gör den linjär. Om pushen avvisas — använd inte bar force push, utan undersök först vilka commits som har dykt upp i fjärrgrenen.
Tredje regeln: konfigurera pre-push hooks som automatiskt kör tester och linter före sändning. Om testerna misslyckas — blockeras pushen. Sådana hooks konfigureras via Husky eller Git hooks (pre-push-fil i .git/hooks).
Fjärde regeln: pusha inte stora binära filer. Git är inte avsett för lagring av binära artefakter — de sväller förrådet och saktar ner operationer. För stora filer används Git LFS (Large File Storage). Om en binär fil redan har pushats och har kommit in i historien måste den tas bort via git filter-branch.
Den vanligaste orsaken till en misslyckad push — fjärrgrenen innehåller commits som inte finns lokalt. Detta händer när en annan utvecklare har pushat sina ändringar till samma gren. Lösning: utför git pull, lös eventuella konflikter och upprepa pushen.
# Push avvisad — hämta och rebasa först
git fetch origin
git rebase origin/main
# Lös konflikter, sedan:
git push --force-with-lease
# Eller slå helt enkelt samman fjärrändringar
git pull origin main
git push
Andra orsaken — brist på skrivrättigheter till grenen. Om main-grenen skyddas av en branch protection-regel är direkta pushes förbjudna. Lösning: pusha till feature-grenen och skapa en Pull Request. Skyddsinställningarna administreras vanligtvis via GitHub settings eller GitLab protected branches.
Tredje orsaken — autentiseringsproblem. Föråldrade inloggningsuppgifter, övergång till SSH eller ändring av personal access token. Lösning: kontrollera remote-URL:en (git remote -v) och uppdatera inloggningsuppgifterna. Sedan 2021 har GitHub avskaffat lösenordsautentisering för HTTPS — personlig token eller SSH-nyckel används.
Vanliga frågor
Att pusha innebär att skicka lokala commits från utvecklarens förråd till en fjärrserver (GitHub, GitLab). Efter pushen blir ändringarna tillgängliga för teamet, visas i Pull Request och kan driftsättas. Push är det sista steget i lokalt arbete med kod före teamsamarbete.
Commit sparar ändringar lokalt, i utvecklarens förråd. Push skickar dessa lokala commits till fjärrservern. Man kan göra många commits utan att pusha, men för att kollegor ska se ändringarna måste man pusha. Commit — sparande, push — publicering.
Push avvisas om fjärrgrenen innehåller commits som inte finns lokalt. Lösning: utför git pull (eller git fetch + git rebase), slå samman ändringarna och upprepa pushen. Om du arbetar i din egen feature-gren och är säker på ändringarna, använd git push --force-with-lease.
Ja, men med försiktighet. Använd git revert <commit-hash> — det skapar en commit som återställer ändringarna. Pusha sedan den nya commiten. Om du behöver ta bort commits från historien, använd git reset + git push --force-with-lease, men endast i din egen feature-gren. git revert är det säkra valet för delade grenar.
Regelbunden push förhindrar dataförlust vid fel på den lokala datorn, minskar konflikter vid sammanslagning och ger teamet insyn i arbetsframsteget. Om en utvecklare inte pushar på en vecka kan hans ändringar avvika avsevärt från main-grenen, vilket leder till komplexa konflikter vid merge.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också