git push
De opdracht git push
wordt gebruikt om inhoud uit je lokale repository te uploaden naar een externe repository. Door te pushen, draag je commits over van je lokale repository naar een externe repo. Het is de tegenhanger van git fetch, maar hier verbindt het ophalen van importbewerkingen zich aan lokale branches, waardoor exportbewerkingen naar externe branches worden gepusht. Externe branches worden geconfigureerd met behulp van de opdracht git remote. Pushen heeft de potentie om wijzigingen te overschrijven. Daarom is voorzichtigheid geboden bij het pushen. Deze zaken worden hieronder besproken.
Git push gebruiken
git push <remote> <branch>
Push de gespecificeerde branch naar , samen met alle vereiste commits en interne objecten. Zo wordt er een lokale branch aangemaakt in de doelrepository. Om te voorkomen dat je commits overschrijft, laat Git je niet pushen als dit resulteert in een non-fast-forward samenvoeging in de doelrepository.
git push <remote> --force
Hetzelfde als het bovenstaande opdracht, maar forceer de push zelfs als dit resulteert in een niet-'fast forward-merge'. Gebruik de markering --force
niet tenzij je er absoluut zeker van bent dat je weet wat je doet.
Push al je lokale branches naar de gespecificeerde externe.
git push <remote> --tags
gerelateerd materiaal
Uitgebreid Git log
Oplossing bekijken
Git leren met Bitbucket Cloud
Tags worden niet automatisch gepusht wanneer je een branch pusht of de optie --all
gebruikt. De markering --tags
stuurt al je lokale tags naar de externe repository.
Git push discussie
Git push
wordt vooral gebruikt om lokale wijzigingen te publiceren en uploaden naar een centrale repository. Nadat een lokale repository is gewijzigd, wordt er een push uitgevoerd om de wijzigingen te delen met externe teamleden.
Het bovenstaande diagram laat zien wat er gebeurt als je lokale main
voorbij de main
van de centrale repository is gegaan en je je wijzigingen publiceert door git push origin main
uit te voeren. Merk op hoe git push
in wezen hetzelfde is als het uitvoeren van git merge main
vanuit de externe repository.
Git push en synchroniseren
git push
is een van de vele componenten die worden gebruikt in het algemene Git-'synchronisatieproces'. De synchronisatieopdrachten werken voor externe branches die zijn geconfigureerd met behulp van de opdracht git remote. git push
kan worden beschouwd als een 'upload'-opdracht, terwijl git fetch en git pull kunnen worden gezien als 'download'-opdrachten. Zodra wijzigingensets via een download of upload zijn verplaatst, kan er een git merge worden uitgevoerd op de bestemming om de wijzigingen te integreren.
Pushing naar bare repository's
Een veelgebruikte, moderne Git-praktijk is om een op afstand gehoste --bare
-repository te laten fungeren als een centrale oorsprong-repository. Deze oorsprong-repository wordt vaak op een andere locatie gehost bij een vertrouwde externe partij, zoals Bitbucket. Omdat het pushen de externe branch-structuur beïnvloedt, is het het veiligst en het meest gebruikelijk om te pushen naar repositories die zijn aangemaakt met de markering --bare
. Bare-repo's hebben geen werkmap, waardoor een push de inhoud van de werkmap niet zal veranderen. Lees over git init voor meer informatie over het maken van een bare-repository.
Geforceerd pushen
Git voorkomt dat je de geschiedenis van de centrale repository kunt overschrijven door push-verzoeken te weigeren wanneer ze niet resulteren in een 'fast forward-merge'. Als de externe geschiedenis van je geschiedenis afwijkt, moet je dus de externe branch pullen en samenvoegen in je lokale branch. Probeer daarna opnieuw te pushen. Dit is vergelijkbaar met hoe SVN je laat synchroniseren met de centrale repository via svn-update
voordat je een wijzigingenset vastlegt.
De markering --force
overschrijft dit gedrag en zorgt ervoor dat de branch van je externe repository overeenkomt met je lokale branch en eventuele wijzigingen upstream sinds je laatste pull worden verwijderd. De enige keer wanneer je geforceerd moet pushen, is wanneer je beseft dat de commits die je net hebt gedeeld niet kloppen en je ze hebt aangepast met een git commit --amend
of een interactieve rebase. Je moet er echter absoluut zeker van zijn dat geen van je teamgenoten die commits hebben getrokken voordat je de --force
-optie gebruikt.
Voorbeelden
Standaard git push
In het volgende voorbeeld wordt een van de standaardmethoden beschreven voor het publiceren van lokale bijdragen aan de centrale repository. Ten eerste zorgt deze ervoor dat je lokale main up-to-date is doordat de kopie van de centrale repository wordt opgehaald en je wijzigingen daarbovenop ge-rebased worden. De interactieve rebase vormt ook een goede gelegenheid om je commits op te schonen voordat je ze deelt. Vervolgens stuurt de opdracht git push
alle commits op je lokale main naar de centrale repository.
git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main
Omdat we er al voor hebben gezorgd dat de lokale main up-to-date is, moet dit resulteren in een 'fast forward-merge' en mag git push
niet klagen over de hierboven besproken problemen als er geen sprake is van een 'fast forward'.
Aangepaste geforceerde push
De opdracht git commit accepteert een --amend
-optie die de vorige commit zal bijwerken. Een commit wordt vaak aangepast om het commit-bericht bij te werken of nieuwe wijzigingen toe te voegen. Zodra een commit is gewijzigd, zal een git push
mislukken omdat Git de gewijzigde commit en de externe commit zal beschouwen als afwijkende inhoud. De optie --force
moet worden gebruikt om een gewijzigde commit te pushen.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main
In het bovenstaande voorbeeld wordt ervan uitgegaan dat deze wordt uitgevoerd op een bestaande repository met een commit-geschiedenis. git commit --amend
wordt gebruikt om de vorige commit bij te werken. De gewijzigde commit wordt vervolgens geforceerd gepusht met de optie --force
.
Een externe branch of tag verwijderen
Soms moeten branches opgeschoond worden voor administratieve of organisatorische doeleinden. Om een branch helemaal te verwijderen moet deze lokaal en ook extern worden verwijderd.
git branch -D branch_name
git push origin :branch_name
Bovenstaande verwijdert de externe branch met de naam 'branch_name'. Door een branch-naam voorafgegaan door een dubbele punt naar git push
in te voeren, wordt de externe branch verwijderd.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.