Git fetch remote branch

Mijn collega en ik werken aan dezelfde repository. We hebben het in twee branches vertakt, elk technisch voor verschillende projecten, maar ze hebben overeenkomsten, dus we willen soms teruggaan naar de *master van de branch .

Ik heb echter de branch. Hoe kan mijn collega die tak specifiek trekken?

Een git clone van de repository lijkt de branches niet lokaal voor hem aan te maken, hoewel ik ze live op unfuddle kan zien na een push van mijn kant.

Ook, toen ik de branch oorspronkelijk maakte, deed ik -b checkout. Maakt dat veel uit?

$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
$ git fetch origin discover
$ git checkout discover

Dit zijn de opdrachten die ik heb uitgevoerd. Maar het werkt absoluut niet.

Ik wil die vertakking kunnen bekijken en dan alleen de vertakkingswijzigingen van verschillende medewerkers of werkstations pushen en terugverbinden.


Antwoord 1, autoriteit 100%

Update: Git Switch gebruiken

Alle onderstaande informatie was correct, maar een nieuw commando, git switch is toegevoegd die de inspanning vereenvoudigt.

Als daves_branch bestaat in de externe repository, maar niet in uw lokale vestiging, typt u gewoon:

git switch daves_branch

Omdat je de vertakking niet lokaal hebt, zorgt dit er automatisch voor dat switch naar de externe repo kijkt. Het zal dan ook automatisch remote branch tracking instellen.

Merk op dat als daves_branch niet lokaal bestaat, je eerst git fetch moet gebruiken voordat je switch gebruikt.


Originele post

Je moet een lokale vertakking maken die een vertakking op afstand volgt. Het volgende commando zal een lokale branch maken met de naam daves_branch, waarbij de remote branch origin/daves_branch wordt gevolgd. Wanneer u uw wijzigingen pusht, wordt de externe tak bijgewerkt.

Voor de meest recente versies van Git:

git checkout --track origin/daves_branch

--track is een afkorting voor git checkout -b [branch] [remotename]/[branch] waarbij [remotename] oorsprong is in dit geval en [branch] is twee keer hetzelfde, daves_branch in dit geval.

Voor Git 1.5.6.5 had je dit nodig:

git checkout --track -b daves_branch origin/daves_branch

Voor Git 1.7.2.3 en hoger is dit voldoende (het kan eerder zijn begonnen, maar dit is de vroegste bevestiging die ik snel kon vinden):

git checkout daves_branch

Merk op dat met recente Git-versies, dit commando geen lokale branch zal maken en je in een ‘detached HEAD’-status zal plaatsen. Als je een lokale vestiging wilt, gebruik dan de optie --track.

Volledige details vindt u hier: 3.5 Git Vertakkingen – Vertakkingen op afstand, Vertakkingen volgen


Antwoord 2, autoriteit 30%

Ik heb fetch gevolgd door checkout

git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>

…waar <rbranch> de vertakking op afstand is of bronref en <lbranch> de nog niet-bestaande lokale branch of bestemmingsref die u wilt volgen en die u waarschijnlijk dezelfde naam wilt geven als de remote branch of bronref. Dit wordt uitgelegd onder opties in de uitleg van <refspec>.

Git is zo slim dat het automatisch het eerste commando voltooit als ik tab na de eerste paar letters van de remote branch. Dat wil zeggen, ik hoef de lokale branch niet eens een naam te geven, Git kopieert automatisch de naam van de remote branch voor mij. Bedankt Git!

Ook zoals het antwoord in deze vergelijkbare Stack Overflow-post laat zien, als u de lokale vestiging niet noemt in fetch, je kunt het nog steeds maken als je het uitcheckt door de vlag -b te gebruiken. Dat wil zeggen, git fetch <remote> <branch> gevolgd door git checkout -b <branch> <remote>/<branch> doet precies hetzelfde als mijn eerste antwoord. En klaarblijkelijk, als je repository slechts één remote heeft, dan kun je gewoon git checkout <branch> doen na fetch en het zal een lokale vestiging voor u. Bijvoorbeeld, je hebt zojuist een repository gekloond en wilt extra vertakkingen op afstand bekijken.

Ik geloof dat een deel van de documentatie voor fetch mogelijk letterlijk is gekopieerd van pull. In het bijzonder de sectie over <refspec> in opties is hetzelfde. Ik geloof echter niet dat fetch ooit zal merge, zodat als u de bestemmingszijde van de dubbele punt leeg laat, fetch niets hoeft te doen.

OPMERKING: git fetch <remote> <refspec> is een afkorting voor git fetch <remote> <refspec>: die daarom niets zou doen, maar git fetch <remote> <tag> is hetzelfde als git fetch <remote> <tag>:<tag> die de externe <tag> lokaal moet kopiëren.

Ik denk dat dit alleen nuttig is als je een remote branch lokaal wilt kopiëren, maar niet per se meteen wilt uitchecken. Anders zou ik nu het geaccepteerde antwoord gebruiken, dat in detail wordt uitgelegd in het eerste gedeelte van de afrekenbeschrijving en later in de opties sectie onder de uitleg van --track, omdat het een one-liner is. Nou… een soort one-liner, want je zou nog eerst git fetch <remote> moeten uitvoeren.

Ter info: de volgorde van de <refspecs> (bron:destination) verklaart de bizarre pre Git 1.7-methode voor externe takken verwijderen. Dat wil zeggen, duw niets in de bestemmingsreferentie.


Antwoord 3, autoriteit 12%

Als je een nieuwe remote branch probeert te “afrekenen” (die alleen op de remote, maar niet lokaal bestaat), heb je het volgende nodig:

git fetch origin
git checkout --track origin/<remote_branch_name>

Hiermee wordt ervan uitgegaan dat u wilt ophalen van oorsprong. Als dat niet het geval is, vervangt u oorsprong door uw externe naam.


Antwoord 4, autoriteit 4%

MijnBranch afrekenen dat op afstand bestaat en niet lokaal – Dit werkte voor mij:

git fetch --all
git checkout myBranch

Ik kreeg dit bericht:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

Antwoord 5, autoriteit 2%

De gemakkelijkste manier om het te doen, althans voor mij:

git fetch origin <branchName> # Will fetch the branch locally
git checkout <branchName> # To move to that branch

Antwoord 6, autoriteit 2%

Gebruik git branch -a (zowel lokale als remote branches) of git branch -r (alleen remote branches) om alle remotes en hun branches te zien. Je kunt dan een git checkout -t remotes/repo/branch doen op de remote en een lokale branch maken.

Er is ook een git-ls-remote-opdracht om alle refs en tags voor die afstandsbediening.


Antwoord 7

De titel en de vraag zijn verward:

  • Git fetch remote branch
  • hoe kan mijn collega die tak specifiek trekken.

Als de vraag is, hoe krijg ik een remote branch om mee te werken, of hoe kan ik Git een remote branch afrekenen?, dan is een eenvoudigere oplossing:

Met Git (>= 1.6.6) kun je het volgende gebruiken:

git checkout <branch_name>

Als lokale <branch_name> niet wordt gevonden, maar er bestaat wel een tracking-branch in precies één remote met een overeenkomende naam, behandel deze dan als equivalent aan:

git checkout -b <branch_name> --track <remote>/<branch_name>

Zie documentatie voor Git checkout

Voor je vriend:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

Antwoord 8

Om een ​​branch op te halen die op remote bestaat, is de eenvoudigste manier:

git fetch origin branchName
git checkout branchName

Je kunt zien of het al bestaat op de afstandsbediening met:

git branch -r

Hiermee wordt de externe vertakking opgehaald naar uw lokale en wordt de externe vertakking automatisch gevolgd.


Antwoord 9

Gebruik:

git checkout -b serverfix origin/serverfix

Dit is een veel voorkomende bewerking die Git de --track afkorting:

git checkout --track origin/serverfix

In feite is dit zo gewoon dat er zelfs een snelkoppeling voor die snelkoppeling is. Als de branch-naam die je probeert af te rekenen (a) niet bestaat en (b) exact overeenkomt met een naam op slechts één remote, zal Git een tracking branch voor je maken:

git checkout serverfix

Om een ​​lokale branch in te stellen met een andere naam dan de remote branch, kun je eenvoudig de eerste versie gebruiken met een andere lokale branchnaam:

git checkout -b sf origin/serverfix

Je lokale vestiging sf haalt nu automatisch uit origin/serverfix.

Bron: Pro Git , 2e editie, geschreven door Scott Chacon en Ben Straub (geknipt voor leesbaarheid)


Antwoord 10

Met deze eenvoudige opdracht:

git checkout -b 'your_branch' origin/'remote branch'

Antwoord 11

[Snel antwoord]

Er zijn veel alternatieven, en mijn favorieten zijn:

– Alternatief 1:

git fetch --all
git checkout YourBranch

Dit alternatief gebruiken met een branch die op afstand bestaat, maar niet in uw lokale.

– Alternatief 2:

git checkout -b 'YourBranch' origin/'YourRemote'

Waarschijnlijk is dit de eenvoudigste manier.


Antwoord 12

Wat me hielp was

1) Om alle beschikbare externe vestigingen te bekijken (bijv. ‘remote-branch-name’)

git branch -r

2) Maak een lokale vertakking met de naam van de externe vertakking

git fetch && git checkout 'remote-branch-name'

Antwoord 13

git fetch
git branch -r
git checkout <branch_name>

Antwoord 14

Je kunt de remote branch ook in één keer ophalen en afrekenen:

git fetch && git checkout the-branch-name

Antwoord 15

Ik heb getypt

git checkout <branch_name>

en kreeg

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

Antwoord 16

Soms wordt je gevraagd om niet met de master-branch te spelen en alleen met de remote branch te werken (zoals mij werd gevraagd). Dus alles wat je nodig hebt is de remote branch.

Dus om de remote branch alleen te klonen (zonder de master), doe dit

git clone url --branch remote_branch_name

waar,
remote_branch_name is de naam van de remote branch

Bijvoorbeeld

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Dit zorgt ervoor dat je de remote branch kloont naar je lokale branch met de naam van de remote branch.

Als je nu je code vastlegt en pusht, wordt de code alleen naar die branch verzonden.


Antwoord 17

De stappen zijn als volgt;

  1. git fetch origin of git fetch --all , dit zal alle remote branches naar je local ophalen en dan is dit de tweede optie waarmee je verder kunt gaan .

  2. git checkout --track origin/<The_remote_branch you want to switch over>

Werk dan aan deze tak en je kunt controleren of je in die tak zit of niet door

te typen

git branch

Het toont het filiaal waarin u zich momenteel bevindt.


Antwoord 18

Laten we zeggen dat je afstandsbediening [email protected] is en dat je zijn random_branch branch wilt. Het proces zou als volgt moeten zijn:

  1. Controleer eerst de lijst met uw afstandsbedieningen door

    git remote -v

  2. Als je de afstandsbediening [email protected] niet in de uitvoer van het bovenstaande commando hebt, zou je deze toevoegen door

    git remote add xyz [email protected]

  3. Nu kun je de inhoud van die afstandsbediening ophalen door

    git fetch xyz

  4. Bekijk nu de tak van die afstandsbediening via

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Controleer de filiaallijst met

    git branch -a

De lokale branch my_copy_random_branch zou de random_branch branch van je remote volgen.


Antwoord 19

Als u alle vertakkingen op afstand wilt ophalen, typt u gewoon:

git fetch --all

Antwoord 20


git fetch --all & git checkout <branch name>


Antwoord 21

git fetch && git checkout <your friend's branch name> zou het moeten doen


Antwoord 22

Als je een repository hebt die gekloond is met --depth 1, dan zullen veel van de commando’s die in de lijst staan ​​niet werken. Zie bijvoorbeeld hier

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

In dit geval zou ik de repository opnieuw klonen, maar misschien zijn er andere technieken, b.v. git ondiepe kloon (clone –depth) mist afgelegen takken


Antwoord 23

Ik wil je een one-liner commando geven om alle remote branches op te halen naar je local en over te schakelen naar je gewenste nieuw aangemaakte local branch:

git fetch && git checkout discover

Na het uitvoeren van de bovenstaande opdracht krijgt u het onderstaande bericht:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from origin.

In de eerste regel staat dat is overgeschakeld naar a
nieuwe vestiging – waarom nieuw? Het is er al op afstand!

Maar eigenlijk moet je het ook lokaal maken. De vertakking wordt uit de externe index gehaald en lokaal voor u gemaakt.

Hier is discover een nieuwe branch die is gemaakt vanuit de remote branch van je repository discover.

Maar de tweede regel geeft meer informatie dan de eerste die ons vertelt dat:

Onze branch is ingesteld om externe branch te volgen met dezelfde naam.

Hoewel git fetch alle branches ophaalt naar lokaal. Maar als je daarna git branch uitvoert, zie je alleen de master branch in de lokale taal. Waarom?

Omdat je voor elke branch die je in remote hebt, deze ook lokaal moet aanmaken, om hem te volgen als git checkout <branchname> zoals we in het bovenstaande voorbeeld hebben gedaan.

Na het uitvoeren van de opdracht git checkout kun je git branch uitvoeren, en nu kun je zowel de branch:

zien

  1. master en 2. ontdekken in uw lokale vermelding.

Antwoord 24

Probeer het gewoon:

git pull origin your_branch_name

Antwoord 25

Als je je remote branch al zo kent…

git remote
=> One
=> Two

en u weet de filiaalnaam die u wilt afrekenen, bijvoorbeeld br1.2.3.4, doe dan

git fetch One
=> returns all meta data of remote, that is, the branch name in question.

Het enige dat u hoeft te doen, is het filiaal afrekenen

git checkout br.1.2.3.4

Maak er dan nieuwe takken van.


Antwoord 26

Controleer uw .git/config-bestand, met name welke tracking aanwezig is op fetch voor die afstandsbediening.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Als het heads/* heeft die naar randomRemote/* wijzen, zal het alle branches ophalen als je git fetch randomRemote uitvoert.

Dan kun je dat filiaal gewoon afrekenen.

Anders,

  1. Hiermee moet u vertakkingen aan de tracking toevoegen. Controleer uw .git/config nadat u dit hebt uitgevoerd. Je zult het begrijpen.

    git remote set-branches --add randomRemote randomBranch
    
  2. Voer git fetch randomRemote uit. Hiermee wordt de externe tak opgehaald.

  3. Nu kun je git checkout randomBranch uitvoeren.


Antwoord 27

git branch <name> --track origin/<name>


Antwoord 28

Je gebruikt ‘git pull’ om je branches gescheiden te houden. Ik zal de werkelijke repository- en branchnamen gebruiken om te helpen, aangezien ‘lbranch’ en ‘rbranch’ moeilijk te ontcijferen zijn.

Laten we gebruiken:

  • myteam.unfuddle.com = de externe Git-server
  • tlc = Projectaccount ontrafelen waar de repository bestaat
  • daves_branch = externe filiaalnaam

    U, of een collega, kan dit uitvoeren om alleen uw vertakking te trekken, ongeacht hoeveel vertakkingen er zijn:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    

    Antwoord 29

    Een eenvoudig commando, git checkout remote_branch_name zal je helpen om een ​​lokale branch aan te maken die alle veranderingen in de remote branch heeft.


    Antwoord 30

    Als je de repository downloadt met git clone <repo_url> -b <branch> (alleen bepaalde vertakkingen klonen), moet u het bestand <repo_name>/.git/config wijzigen.
    Vervang of wijzig de regel die verwijst naar het ophaaldoel van de sectie [remote "origin"] om het commando git fetch --all alle branches te laten ontdekken:

    [remote "origin"]
            url = <repo_git_url>
            fetch = +refs/heads/master:refs/remotes/origin/master
    

    Zorg ervoor dat u het parameterpunt voor ophalen instelt op /heads/master.

    Let op met git fetch --all omdat dit alles zal ophalen, dus het kan lang duren.

  • LEAVE A REPLY

    Please enter your comment!
    Please enter your name here

    Other episodes