Een bestaande Git branch track een remote branch maken?

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/configgewoon kan bewerken, maar het lijkt erop dat er een eenvoudigere manier moet zijn.


Antwoord 1, autoriteit 100%

Gegeven een branch fooen een remote upstream:

Vanaf Git 1.8.0:

git branch -u upstream/foo

Of, als de lokale vestiging fooniet 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 fooremote branch foovolgt vanaf remote upstream.
  • 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 upstreamuit.

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 -uzoals in

$ git push -u origin branch-name

De equivalente lange optie is --set-upstream.

Het git-branchcommando begrijpt ook --set-upstream, maar het gebruik ervan kan verwarrend zijn. Versie 1.8.0past de interface aan.

git branch --set-upstreamis 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/masterte 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 foobranch 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_branchtool 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/configis 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 configgebruiken om het te doen…maar nogmaals, dat is gewoon ga toch het bestand .git/configbewerken.

Er zijn natuurlijk manieren om automatisch een remote branch te volgen bij gebruik van git checkout(door bijvoorbeeld de vlag --trackdoor 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 yourLocalBranchNamede 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 fooupstream/foolaat 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 githuben 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.1het 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/remotebranchnameen 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>

Other episodes