Close

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
Consolevenster
gerelateerd materiaal

Uitgebreid Git log

Logo Bitbucket
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.

Git push gebruiken om wijzigingen te publiceren

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.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up