Hoe check ik een remote Git branch uit?

Iemand heeft een branch genaamd test met git push origin test naar een gedeelde repository gepusht. Ik kan de branch zien met git branch -r.

Nu probeer ik de remote test branch te bekijken.

Ik heb het geprobeerd:

  • git checkout test die niets doet

  • git checkout origin/test geeft * (no branch). Wat verwarrend is. Hoe kan ik op “geen filiaal” zijn?

Hoe check ik een externe Git branch uit?


Antwoord 1, autoriteit 100%

Met één afstandsbediening

Jakubs antwoord verbetert dit eigenlijk. Met Git-versies? 1.6.6, met slechts één afstandsbediening kunt u het volgende doen:

git fetch
git checkout test

Zoals gebruiker masukomi in een opmerking aangeeft, zal git checkout test NIET werken in moderne git als je meerdere afstandsbedieningen hebt. Gebruik in dit geval

git checkout -b test <name of remote>/test

of de steno

git checkout -t <name of remote>/test

Met >1 afstandsbedieningen

Voordat je lokaal op een externe branch kunt gaan werken, moet je deze ophalen zoals genoemd in de onderstaande antwoorden.

Om een ​​branch op te halen, hoef je alleen maar:

git fetch origin

Dit zal alle remote branches voor je ophalen. U kunt de filialen zien die beschikbaar zijn om af te rekenen met:

git branch -v -a

Met de externe branches in de hand, moet je nu de branch bekijken waarin je geïnteresseerd bent, zodat je een lokale werkkopie krijgt:

git checkout -b test origin/test

Antwoord 2, autoriteit 13%

Sidenote: Met moderne Git (>= 1.6.6), kunt u alleen

git checkout test

(merk op dat het ‘test’ is en niet ‘origin/test’) om magische DWIM-mery en maak een lokale branch ‘test’ voor je, waarvoor upstream remote-tracking branch ‘origin/test’ zou zijn.


De * (no branch) in de uitvoer van git branch betekent dat u zich in een naamloze vertakking bevindt, in de zogenaamde "detached HEAD" state (HEAD verwijst direct naar commit, en is geen symbolische verwijzing naar een lokale branch). Als je commits hebt gemaakt op deze naamloze branch, kun je altijd een lokale branch maken van de huidige commit:

git checkout -b test HEAD

** EDIT (door redacteur niet auteur) **

Ik heb een hieronder begraven opmerking gevonden die dit antwoord lijkt te moderniseren:

@Dennis: git checkout <non-branch>, bijvoorbeeld git checkout origin/test resulteert in een vrijstaande HEAD / naamloze branch, terwijl git checkout test of git checkout -b test origin/test resulteert in local
branch test (met remote-tracking branch origin/test als upstream)
Jakub Narebski 9 januari ’14 om 8:17

nadruk op git checkout origin/test


Antwoord 3, autoriteit 6%

In dit geval wil je waarschijnlijk een lokale test branch maken die de remote test branch volgt:

$ git branch test origin/test

In eerdere versies van git had je een expliciete --track optie nodig, maar dat is nu de standaard wanneer je vertakt vanaf een externe vertakking.


Antwoord 4, autoriteit 5%

Geaccepteerd antwoord werkt niet voor u?

Hoewel het eerste en geselecteerde antwoord technisch correct is, bestaat de mogelijkheid dat u nog niet alle objecten en referenties uit de externe repository hebt opgehaald. Als dat het geval is, krijgt u de volgende foutmelding:

$ git checkout -b remote_branch origin/remote_branch

fatal: git checkout: het updaten van paden is niet compatibel met het wisselen van branches.
Was je van plan om ‘origin/remote_branch’ uit te checken, wat niet kan worden opgelost als commit?

Oplossing

Als je dit bericht ontvangt, moet je eerst een git fetch origin doen waarbij origin de naam is van de externe repository voordat git checkout remote_branch. Hier is een volledig voorbeeld met antwoorden:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master
$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

Zoals je kunt zien, heeft het uitvoeren van git fetch origin alle remote branches opgehaald die we nog niet hadden ingesteld om te volgen op onze lokale machine. Van daaruit kunnen we, aangezien we nu een verwijzing naar de remote branch hebben, gewoon git checkout remote_branch uitvoeren en profiteren we van de voordelen van remote tracking.


Antwoord 5, autoriteit 3%

Ik heb de bovenstaande oplossing geprobeerd, maar het werkte niet. Probeer dit, het werkt:

git fetch origin 'remote_branch':'local_branch_name'

Hiermee wordt de externe branch opgehaald en een nieuwe lokale branch gemaakt (als deze nog niet bestaat) met de naam local_branch_name en de externe erin gevolgd.


Antwoord 6

Dit zal DWIM zijn voor een externe niet genoemde oorsprong (documentatie):

$ git checkout -t remote_name/remote_branch

Als u een nieuwe afstandsbediening wilt toevoegen, moet u eerst het volgende doen:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

De eerste vertelt Git dat de remote bestaat, de tweede krijgt de commits.


Antwoord 7

Gebruik:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

Andere antwoorden werken in mijn goedaardige geval niet met moderne Git. Het kan zijn dat je eerst moet pullen als de remote branch nieuw is, maar dat heb ik niet gecontroleerd.


Antwoord 8

Je ziet in principe de branch, maar je hebt nog geen lokale kopie!…

Je moet de vertakking fetch

Je kunt eenvoudig ophalen en vervolgens afrekenen in het filiaal, gebruik daarvoor de éénregelige opdracht hieronder:

git fetch && git checkout test

Ik heb ook de onderstaande afbeelding voor je gemaakt om de verschillen te delen, te kijken hoe fetch werkt en ook hoe het anders is dan pull:

git fetch


Antwoord 9

Als u een Git-repository wilt klonen, doet u het volgende:

git clone <either ssh url /http url>

Het bovenstaande commando controleert alle branches, maar alleen de master branch wordt geïnitialiseerd. Als je de andere vestigingen wilt afrekenen, doe dan:

git checkout -t origin/future_branch (for example)

Dit commando checkt de remote branch uit, en de naam van je lokale branch zal hetzelfde zijn als de remote branch.

Als je de naam van je lokale vestiging wilt overschrijven bij het afrekenen:

git checkout -t -b enhancement origin/future_branch

Uw lokale filiaalnaam is nu enhancement, maar uw externe filiaalnaam is future_branch.


Antwoord 10

Je kunt het proberen

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

of

git fetch
git checkout -b local_branch_name origin/branch_name

Antwoord 11

Eerst moet u het volgende doen:

git fetch # Als je de naam van de branch niet weet

git fetch origin branch_name

Ten tweede kunt u een externe vestiging in uw lokale vestiging bekijken door:

git checkout -b branch_name origin/branch_name

-b zal een nieuwe vertakking maken in de opgegeven naam van uw geselecteerde externe vertakking.


Antwoord 12

Ik gebruik het volgende commando:

git checkout --track origin/other_remote_branch

Antwoord 13

Opdrachten

git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

zijn gelijk aan

 git fetch --all

en dan

 git checkout -b fixes_for_dev origin/development

Beide maken een latest fixes_for_dev van development


Antwoord 14

Voer eenvoudig git checkout uit met de naam van de remote branch. Git zal automatisch een lokale branch aanmaken de afstandsbediening:

git fetch
git checkout test

Echter, als die branch-naam in meer dan één remote wordt gevonden, zal dit niet werken omdat Git niet weet welke te gebruiken. In dat geval kunt u ofwel:

git checkout --track origin/test

of

git checkout -b test origin/test

In 2.19 leerde Git de checkout.defaultRemote configuratie, die een afstandsbediening specificeert die standaard moet worden gebruikt bij het oplossen van een dergelijke dubbelzinnigheid.


Antwoord 15

Als de vertakking zich op iets anders bevindt dan de origin afstandsbediening, wil ik het volgende doen:

$ git fetch
$ git checkout -b second/next upstream/next

Hiermee wordt de next branch op de upstream remote uitgecheckt naar een lokale branch genaamd second/next. Wat betekent dat als je al een lokale vestiging met de naam next hebt, dit geen conflict oplevert.

$ git branch -a
* second/next
  remotes/origin/next
  remotes/upstream/next

Antwoord 16

geen van deze antwoorden werkte voor mij. dit werkte:

git checkout -b feature/branch remotes/origin/feature/branch


Antwoord 17

Ik zat vast in een situatie en zag een error: pathspec 'desired-branch' did not match any file(s) known to git. voor alle bovenstaande suggesties. Ik gebruik git-versie 1.8.3.1.

Dus dit werkte voor mij:

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

De verklaring hierachter is dat ik heb gemerkt dat bij het ophalen van de remote branch, deze werd opgehaald naar FETCH_HEAD:

$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

Antwoord 18

git fetch && git checkout your-branch-name


Antwoord 19

Het git remote show <origin name> commando zal alle branches weergeven (inclusief niet-getrackte branches). Dan kun je de remote branch-naam vinden die je moet ophalen.

Voorbeeld:

$ git remote show origin

Gebruik deze stappen om vertakkingen op te halen:

git fetch <origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

Voorbeeld:

$ git fetch origin test:test
$ git checkout test

Antwoord 20

git branch -r zegt dat de objectnaam ongeldig is, omdat die branchnaam niet in de lokale branch-lijst van Git staat. Werk uw lokale filiaallijst van oorsprong bij met:

git remote update

En probeer dan nogmaals je remote branch uit te checken.

Dit werkte voor mij.

Ik geloof dat git fetch alle remote branches binnenhaalt, wat niet is wat de originele poster wilde.


Antwoord 21

Ophalen van de afstandsbediening en afrekenen in het filiaal.

git fetch <remote_name> && git checkout <branch_name> 

Bijvoorbeeld:

git fetch origin && git checkout feature/XYZ-1234-Add-alerts


Antwoord 22

Andere jongens en meiden geven de oplossingen, maar misschien kan ik je vertellen waarom.

git checkout-test die niets doet

Does nothing is niet gelijk aan doesn't work, dus ik denk dat wanneer je ‘git checkout test’ typt in je terminal en op enter drukt, er geen bericht verschijnt en er treedt geen fout op. Heb ik gelijk?

Als het antwoord ‘ja’ is, kan ik je de oorzaak vertellen.

De oorzaak is dat er een bestand (of map) met de naam ‘test’ in uw werkstructuur staat.

Als git checkout xxx geparseerd is,

  1. Git kijkt in eerste instantie naar xxx als een branch-naam, maar er is geen branch met de naam test.
  2. Dan denkt Git dat xxx een pad is, en gelukkig (of helaas) is er een bestand met de naam test. Dus git checkout xxx betekent dat elke wijziging in het xxx-bestand wordt genegeerd.
  3. Als er ook geen bestand is met de naam xxx, dan zal Git proberen om de xxx aan te maken volgens enkele regels. Een van de regels is het aanmaken van een branch genaamd xxx als remotes/origin/xxx bestaat.

Antwoord 23

Om nieuwe filialen te krijgen

git fetch

Overschakelen naar een ander filiaal

git checkout BranchName

Antwoord 24

git checkout -b "Branch_name" [B betekent Lokale vestiging maken]

git branch –all

git checkout -b "Uw filiaalnaam"

git branch

git pull origin "Your Branch name"

succesvol afrekenen van de master-branch naar dev-branch

voer hier de afbeeldingsbeschrijving in


Antwoord 25

Je kunt beginnen met het volgen van alle vertakkingen op afstand met het volgende Bash-script:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
  do git branch -f --track "$branch" "origin/$branch"
done

Hier is ook een versie met één regel:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

Antwoord 26

om alle vertakkingen op afstand te krijgen, gebruik dit:

git fetch --all

vervolgens afrekenen in het filiaal :

git checkout test

Antwoord 27

Voer gewoon deze twee commando’s uit en je bent klaar om te gaan.

git checkout <branch-name>
git pull <remote> <branch-name>

Antwoord 28

Voor ons lijkt het erop dat de configuratie remote.origin.fetch een probleem gaf. Daarom konden we geen andere remote branches zien dan master, dus git fetch [--all] hielp niet. Noch git checkout mybranch noch git checkout -b mybranch --track origin/mybranch werkte, hoewel het zeker op afstand was.

In de vorige configuratie kon alleen master worden opgehaald:

$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

Repareer het door * te gebruiken en haal de nieuwe informatie op van oorsprong:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git fetch
...
 * [new branch] ...
...

Nu kunnen we de remote branch lokaal git checkout gebruiken.

Geen idee hoe deze configuratie in onze lokale repo terecht is gekomen.


Antwoord 29

Als de remote branch naam begint met speciale karakters moet je er enkele aanhalingstekens omheen gebruiken in het checkout commando, anders weet git niet over welke branch je het hebt.

Ik heb bijvoorbeeld geprobeerd een externe branch uit te checken met de naam #9773, maar de opdracht werkte niet goed, zoals weergegeven in de onderstaande afbeelding:

voer hier de afbeeldingsbeschrijving in

Om de een of andere reden vroeg ik me af of het scherpe symbool (#) er iets mee te maken zou kunnen hebben, en toen probeerde ik de branchnaam te omringen met enkele aanhalingstekens, zoals '#9773' in plaats van alleen #9773, en gelukkig werkte het prima.

$ git checkout -b '#9773' origin/'#9773'

Antwoord 30

Ik doe altijd:
git fetch origin && git checkout --track origin/branch_name

LEAVE A REPLY

Please enter your comment!
Please enter your name here

1 × four =

Other episodes