Ik weet hoe ik een nieuwe vertakking moet maken die vertakkingen op afstand volgt, maar hoe maak ik van een bestaande vertakking een vertakking op afstand?
Ik weet dat ik het bestand .git/config
gewoon kan bewerken, maar het lijkt erop dat er een eenvoudigere manier moet zijn.
Antwoord 1, autoriteit 100%
Gegeven een branch foo
en een remote upstream
:
Vanaf Git 1.8.0:
git branch -u upstream/foo
Of, als de lokale vestiging foo
niet de huidige vestiging is:
git branch -u upstream/foo foo
Of, als u langere opdrachten wilt typen, zijn deze gelijk aan de bovenstaande twee:
git branch --set-upstream-to=upstream/foo
git branch --set-upstream-to=upstream/foo foo
Vanaf Git 1.7.0 (vóór 1.8.0):
git branch --set-upstream foo upstream/foo
Opmerkingen:
- Alle bovenstaande commando’s zorgen ervoor dat lokale branch
foo
remote branchfoo
volgt vanaf remoteupstream
. - De oude (1.7.x) syntaxis is verouderd ten gunste van de nieuwe (1.8+) syntaxis. De nieuwe syntaxis is bedoeld om intuïtiever en gemakkelijker te onthouden te zijn.
- Het definiëren van een stroomopwaartse vertakking zal mislukken wanneer het wordt uitgevoerd tegen nieuw gemaakte afstandsbedieningen die nog niet zijn opgehaald. Voer in dat geval vooraf
git fetch upstream
uit.
Zie ook: Waarom moet ik de hele tijd `–set-upstream` doen?
Antwoord 2, autoriteit 6%
Je kunt het volgende doen (ervan uitgaande dat je uitgecheckt bent op master en wilt pushen naar een remote branch master):
Stel de ‘afstandsbediening’ in als je die nog niet hebt
git remote add origin ssh://...
Configureer nu de master om te weten te volgen:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
En druk op:
git push origin master
Antwoord 3, autoriteit 4%
Ik doe dit als neveneffect van pushen met de optie -u
zoals in
$ git push -u origin branch-name
De equivalente lange optie is --set-upstream
.
Het git-branch
commando begrijpt ook --set-upstream
, maar het gebruik ervan kan verwarrend zijn. Versie 1.8.0past de interface aan.
git branch --set-upstream
is verouderd en kan in een relatief verre toekomst worden verwijderd.git branch [-u|--set-upstream-to]
is geïntroduceerd met een betere volgorde van argumenten.…
Het was verleidelijk om
git branch --set-upstream origin/master
te zeggen, maar dat vertelt Git om de lokale branch “origin/master” te regelen om te integreren met de momenteel uitgecheckte branch, wat is hoogst onwaarschijnlijk wat de gebruiker bedoelde. De optie is verouderd; gebruik in plaats daarvan de nieuwe--set-upstream-to
(met een korte en zoete-u
) optie.
Stel dat je een lokale foo
branch hebt en wilt dat deze de branch met dezelfde naam behandelt als zijn upstream. Maak dit mogelijk met
$ git branch foo
$ git branch --set-upstream-to=origin/foo
of gewoon
$ git branch --set-upstream-to=origin/foo foo
Antwoord 4
Voor Git-versies 1.8.0 en hoger:
Eigenlijk om het geaccepteerde antwoord te laten werken:
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR Git version 1.8.0 and higher:
git branch --set-upstream-to=upstream/qa
# Gitversions lower than 1.8.0
git branch --set-upstream qa upstream/qa
5
Misschien vindt u de git_remote_branch
tool nuttig. Het biedt eenvoudige opdrachten voor het maken, publiceren, verwijderen, tracking & amp; het hernoemen van afgelegen takken. Eén leuke functie is dat u een grb
-opdracht kunt vragen om uit te leggen welke Git-opdrachten het zou uitvoeren.
grb explain create my_branch github
# git_remote_branch version 0.3.0
# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
Antwoord 6
1- update uw lokale metagegevens met: git fetch –all
2- toon je externe en lokale branches met: git branch -a
, zie de volgende schermafbeelding
3- schakel over naar de doeltak die u aan de afstandsbediening wilt koppelen: gebruik
git checkout branchName
voorbeeld:
4- Koppel uw lokale vestiging aan een externe vestiging met:
git branch –set-upstream-to nameOfRemoteBranch
N.B : nameOfRemoteBranch: om te kopiëren uit de uitvoer van stap 2 ” git branch -r “
Voorbeeld van gebruik:
Antwoord 7
Zorg ervoor dat je :
. uitvoert
git config push.default tracking
om probleemloos te kunnen pushen
Antwoord 8
Het bewerken van .git/config
is waarschijnlijk de gemakkelijkste en snelste manier. Dat is in ieder geval wat de Git-commando’s voor het afhandelen van remote branches doen.
Als je niet handmatig met het bestand wilt rotzooien (en het is niet zo moeilijk om te doen), kun je altijd git config
gebruiken om het te doen…maar nogmaals, dat is gewoon ga toch het bestand .git/config
bewerken.
Er zijn natuurlijk manieren om automatisch een remote branch te volgen bij gebruik van git checkout
(door bijvoorbeeld de vlag --track
door te geven), maar deze commando’s werk met nieuwebranches, niet met bestaande.
Antwoord 9
In het kort
git branch --set-upstream yourLocalBranchName origin/develop
Hierdoor volgt uw yourLocalBranchName
de remote branch genaamd develop
.
Antwoord 10
Voor 1.6.x kan dit gedaan worden met de git_remote_branchtool:
grb track foo upstream
Dat zorgt ervoor dat Git foo
upstream/foo
laat tracken.
Antwoord 11
Ik gebruik de volgende opdracht (Stel dat de naam van uw lokale filiaal “branch-name-local” is en de naam van de remote branch “branch-name-remote”):
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
Als zowel lokale als externe takken dezelfde naam hebben, doe dan het volgende:
$ git branch --set-upstream-to=origin/branch-name branch-name
Antwoord 12
Voor het maken van een nieuwe branch kunnen we het volgende commando gebruiken
git checkout --track -b voorbeeld origin/example
Om de reeds aangemaakte branch een link te maken tussen remote en vervolgens van die branch, gebruik het onderstaande commando
git branch -u origin/remote-branch-name
Antwoord 13
Hier, met behulp van github
en git version 2.1.4
, doe je gewoon:
$ git clone [email protected]:user/repo.git
en afstandsbedieningen komen door ITELSEF, zelfs indien niet lokaal gelinkt:
$ git remote show origin
* remote origin
Fetch URL: [email protected]:user/repo.git
Push URL: [email protected]:user/repo.git
HEAD branch: master
Remote branches:
develop tracked <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
Maar natuurlijk nog steeds geen lokale tak:
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Zie je? Als u nu Develp uitcheckt, zal het de magie automatisch doen:
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
Zo eenvoudig!
Samenvatting. Voer deze 2 opdrachten uit:
$ git clone [email protected]:user/repo.git
$ git checkout develop
14
Gebruik ‘–Track’-optie
-
Na een
git pull
:git checkout --track <remote-branch-name>
-
OR:
git fetch && git checkout <branch-name>
15
Dit is geen direct antwoord op deze vraag, maar ik wilde hier een briefje achterlaten voor iedereen die mogelijk hetzelfde probleem heeft als ik bij het proberen een stroomopwaartse tak te configureren.
Wees op uw hoede voor push.default .
Bij oudere git-versies was de standaard overeenkomstig, wat zeer ongewenst gedrag zou veroorzaken als je bijvoorbeeld:
Lokale tak “master” volgen naar oorsprong/master
Remote branch “upstream” tracking naar upstream/master
Als je probeerde “git push” te gebruiken in de “upstream” branch, met push.default matching, zou git automatisch proberen om de lokale branch “master” samen te voegen met “upstream/master”, veroorzaakt een hele hoop chaos.
Dit geeft gezonder gedrag:
git config –global push.default stroomopwaarts
Antwoord 16
Gebruik voor git-versie 2.25.1
het commando:
git push --set-upstream origin <local_branch_name>
Antwoord 17
Op een enigszins verwante manier probeerde ik een remote tracking branch toe te voegen aan een bestaande branch, maar had geen toegang tot die remote repository op het systeem waar ik die remote tracking branch aan wilde toevoegen (omdat ik vaak een kopie van deze repo via sneakernet naar een ander systeem dat de toegang heeft om naar die afstandsbediening te pushen). Ik ontdekte dat er geen manier was om geforceerd een remote branch toe te voegen aan de local die nog niet was opgehaald (dus local wist niet dat de branch op de remote bestond en ik kreeg de foutmelding: the requested upstream branch 'origin/remotebranchname' does not exist
).
Uiteindelijk slaagde ik erin om de nieuwe, voorheen onbekende remote branch toe te voegen (zonder op te halen) door een nieuw head-bestand toe te voegen op .git/refs/remotes/origin/remotebranchname
en vervolgens de ref te kopiëren (oogballen was het snelst, lame als het was 😉 van het systeem met toegang tot de oorspronkelijke repo naar het werkstation (met de lokale repo waar ik de remote branch aan toevoegde).
Zodra dat gedaan was, kon ik git branch --set-upstream-to=origin/remotebranchname
gebruiken
18
of gewoon op:
Schakel over naar het filiaal als u er niet al in bent:
[za]$ git checkout branch_name
Voer
uit
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
en u bent klaar om:
[za]$ git push origin branch_name
U kunt een kijkje nemen naar het configuratie-bestand om te zien wat volgt wat door:
[za]$ git config -e
Het is ook leuk om dit te weten, het laat zien welke takken worden gevolgd en welke niet. :
[za]$ git remote show origin
19
Voor iedereen die, zoals ik, gewoon je lokale filiaalnaam wil synchroniseren met de naam van de afstandsbediening, hier is een handige opdracht:
git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
20
Dit zou ook werken
git branch --set-upstream-to=/< remote>/< branch> < localbranch>