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 gecreƫerd 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

Zelfde als bovenstaande opdracht, maar forceer de push zelfs als dit resulteert in een non-fast-forward samenvoeging. Gebruik de --force markering niet, tenzij je absoluut zeker weet waar je mee bezig bent.

git push <remote> --all

Push al je lokale branches naar de gespecificeerde externe.

git push <remote> --tags

Tags worden niet automatisch gepusht als je een branch pusht of de optie --all gebruikt. De markering --tags verstuurt al je lokale tags naar de externe repository.

Git push discussie

git push wordt het meest gebruikt om lokale wijzigingen aan een centrale repository te publiceren en uploaden. Nadat een lokale repository is aangepast wordt er een push uitgevoerd om de aanpassingen met externe teamleden te delen.

Git push gebruiken om wijzigingen te publiceren

Bovenstaand diagram toont wat er gebeurt als je lokalemaster verder is dan de centrale master van de repository en je wijzigingen publiceert door git push origin master uit te voeren. Je ziet dat git push vrijwel hetzelfde is als het uitvoeren van git merge master van binnen de externe repository.

Git push en synchroniseren

Pushing naar bare repository's

Geforceerd pushen

Git voorkomt dat je de geschiedenis van de centrale repository overschrijft door push-aanvragen te weigeren als deze resulteren in een non-fast-forward samenvoeging. Dus als de externe geschiedenis is afgeleid van jouw geschiedenis, moet je de externe branch pullen en samenvoegen met je lokale branch, en vervolgens weer proberen te pushen. Dit is vergelijkbaar met de manier waarop SVN je laat synchroniseren met de centrale repository via svn update voordat je een changeset commit.

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 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 echter absoluut zeker weten dat geen van je teamgenoten deze commits heeft gepulld voordat je de optie --force gebruikt.

Voorbeelden

Standaard git push

Het volgende voorbeeld beschrijft een van de standaardmethoden voor het publiceren van lokale bijdrages aan de centrale repository. Allereerst zorgt het ervoor dat je lokale master up-to-date is door het exemplaar van de centrale repository op te halen en ook nog eens je wijzigingen te rebasen. De interactieve rebase is tevens een goede mogelijkheid om je commits op te schonen voordat je ze deelt. Vervolgens verstuurt de opdracht git push alle commits op je lokale master 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

Aangezien we er al voor gezorgd hebben dat de lokale master up-to-date is, moet dit een fast-forward samenvoeging worden, en zal git push niet klagen over de hierboven besproken non-fast-forward problemen.

Aangepaste geforceerde push

# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main

Het voorbeeld hierboven gaat er vanuit dat het uitgevoerd wordt op een bestaande repository met een commitgeschiedenis. git commit --amend wordt gebruikt om de voorgaande commit bij te werken. De aangepaste 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 branchnaam voorafgegaan door een dubbele punt naar git push in te voeren, wordt de externe branch verwijderd.