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>
, bijvoorbeeldgit checkout origin/test
resulteert in een vrijstaande HEAD / naamloze branch, terwijlgit checkout test
ofgit checkout -b test origin/test
resulteert in local
branchtest
(met remote-tracking branchorigin/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
:
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,
- Git kijkt in eerste instantie naar
xxx
als een branch-naam, maar er is geen branch met de naam test. - Dan denkt Git dat
xxx
een pad is, en gelukkig (of helaas) is er een bestand met de naam test. Dusgit checkout xxx
betekent dat elke wijziging in hetxxx
-bestand wordt genegeerd. - Als er ook geen bestand is met de naam
xxx
, dan zal Git proberen om dexxx
aan te maken volgens enkele regels. Een van de regels is het aanmaken van een branch genaamdxxx
alsremotes/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
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:
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