het git fetch
Commando downloadt commits, bestanden en refs van een remote repository in je lokale repo. Ophalen is wat je doet als je wilt zien waar iedereen aan heeft gewerkt. Het is vergelijkbaar met svn update
in die zin dat het je laat zien hoe de centrale geschiedenis zich heeft ontwikkeld, maar het dwingt je niet om de wijzigingen daadwerkelijk in je repository te mergen. Git isoleert opgehaalde inhoud van bestaande lokale inhoud; het heeft absoluut geen effect op je lokale ontwikkelingswerk., Opgehaalde inhoud moet expliciet worden uitgecheckt met het git checkout
Commando. Dit maakt het Fetchen een veilige manier om commits te beoordelen voordat je ze integreert met je lokale repository.
bij het downloaden van inhoud van een repo op afstand, zijn git pull
en git fetch
commando ‘ s beschikbaar om de taak uit te voeren. U kunt git fetch
beschouwen als de ‘veilige’ versie van de twee commando ‘ s. Het zal de remote content downloaden, maar niet werken van uw lokale repo ‘ s staat, waardoor uw huidige werk intact., git pull
is het agressievere alternatief; het zal de remote content downloaden voor de actieve lokale branch en onmiddellijk git merge
uitvoeren om een merge commit te maken voor de nieuwe remote content. Als er lopende wijzigingen in uitvoering zijn, zal dit conflicten veroorzaken en de aftrap geven van de merge conflict resolution flow.
hoe git fetch werkt met remote branches
om beter te begrijpen hoe git fetch
werkt, laten we bespreken hoe Git commits organiseert en opslaat., Achter de schermen, in de ./.git/objects
directory van de repository, slaat Git alle commits op, lokaal en remote. Git houdt remote en local branch commits duidelijk gescheiden door het gebruik van branch refs. De refs voor lokale branches worden opgeslagen in de ./.git/refs/heads/
. Het uitvoeren van het git branch
commando zal een lijst van de lokale branch refs tonen. Het volgende is een voorbeeld van git branch
uitvoer met enkele demo branch namen.,
git branch
master
feature1
debug2
het onderzoeken van de inhoud van de /.git/refs/heads/
map zou vergelijkbare uitvoer onthullen.
ls ./.git/refs/heads/
master
feature1
debug2
remote branches zijn net als lokale branches, behalve dat ze naar commits van de repository van iemand anders toewijzen. Remote branches worden voorafgegaan door de remote waartoe ze behoren, zodat je ze niet vermengt met lokale branches. Net als lokale branches heeft Git ook refs voor remote branches. Remote branch refs live in de./.git/refs/remotes/
map., Het volgende voorbeeld codefragment toont de branches die je zou kunnen zien na het Fetchen van een remote repo met de gunstige naam remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
deze uitvoer toont de lokale branches die we eerder hadden onderzocht, maar toont ze nu voorafgegaan met origin/
. Daarnaast zien we nu de remote branches voorafgegaan door remote-repo
. Je kunt een remote branch net als een lokale uitchecken, maar dit plaatst je in een losstaande HEAD
status (net als het uitchecken van een oude commit). Je kunt ze zien als alleen-lezen branches., Om uw remote branches te bekijken, geeft u eenvoudig de -r
vlag door aan het git branch
Commando.
u kunt remote branches inspecteren met de gebruikelijke git checkout
en git log
commando ‘ s. Als je de wijzigingen goedkeurt die een remote branch bevat, kun je het mergen in een lokale branch met een normale git merge
. In tegenstelling tot SVN is het synchroniseren van je lokale repository met een remote repository eigenlijk een proces in twee stappen: fetch en merge. Het commando git pull
is een handige sneltoets voor dit proces.,
Git fetch commando ‘ s en opties
git fetch <remote>
Fetch alle branches uit de repository. Dit downloadt ook alle vereiste commits en bestanden van de andere repository.
git fetch <remote> <branch>
hetzelfde als het bovenstaande commando, maar haal alleen de opgegeven branch op.
git fetch --all
een power move die alle geregistreerde remotes en hun branches ophaalt:
git fetch --dry-run
de optie --dry-run
zal een demo uitvoeren van het commando., Het zal voorbeelden van acties die het zal nemen tijdens het fetch uitvoeren, maar ze niet toepassen.
git fetch a remote branch
het volgende voorbeeld zal laten zien hoe je een remote branch fetch en je lokale werkstaat bijwerken naar de remote inhoud. In dit voorbeeld, laten we aannemen dat er een centrale repo oorsprong is van waaruit de lokale repository gekloond is door gebruik te maken van het git clone
Commando. Laten we ook uitgaan van een extra remote repository met de naam coworkers_repo die een feature_branch bevat die we zullen configureren en ophalen., Laten we met deze veronderstellingen het voorbeeld voortzetten.
eerst moeten we de remote repo configureren met behulp van het git remote
Commando.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
Hier hebben we een verwijzing gemaakt naar de repo van de medewerker met behulp van de repo URL. We zullen die naam nu doorgeven aan git fetch
om de inhoud te downloaden.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
we hebben nu lokaal de inhoud van coworkers/feature_branch we moeten dit integreren in onze lokale werkkopie., We beginnen dit proces met het git checkout
commando om de nieuw gedownloade remote branch uit te checken.
git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
De uitvoer van deze checkout-bewerking geeft aan dat we ons in een vrijstaande HEAD
bevinden. Dit wordt verwacht en betekent dat onze HEAD
ref wijst naar een ref die niet in overeenstemming is met onze lokale geschiedenis. Omdat HEAD
is gericht op de coworkers/feature_branch ref, kunnen we een nieuwe lokale branch maken van die ref., De uitvoer ‘detached HEAD
‘ laat zien hoe dit te doen met behulp van degit checkout
Commando:
git checkout -b local_feature_branch
Hier hebben we een nieuwe lokale branch gemaakt met de naam local_feature_branch. Dit zet updates HEAD
om te wijzen op de laatste remote content en we kunnen verder ontwikkelen op het vanaf dit punt.
synchroniseer origin met git fetch
het volgende voorbeeld loopt door de typische workflow voor het synchroniseren van je lokale repository met de master branch van de centrale repository.,
git fetch origin
Dit toont de branches die zijn gedownload:
De commits van deze nieuwe remote branches worden weergegeven als vierkanten in plaats van cirkels in het onderstaande diagram. Zoals je kunt zien, geeft git fetch
je toegang tot de gehele branch structuur van een andere repository.,
om Te zien welke commits zijn toegevoegd aan de upstream-master, kunt u een git log
via origin/master als een filter:
git log --oneline master..origin/master
Voor het goedkeuren van de wijzigingen en voeg ze samen in uw lokale master branch gebruik de volgende commando ‘ s:
git checkout master
git log origin/master
Dan kunnen we gebruik maken git merge origin/master
:
git merge origin/master
De origin/master en master takken wijzen nu naar de vastlegging, en u zijn gesynchroniseerd met de upstream-ontwikkelingen.,
Git fetch summary
In recensie, git fetch
is een primair commando dat gebruikt wordt om inhoud van een remote repository te downloaden. git fetch
wordt gebruikt in combinatie met git remote
, git branch
, git checkout
, en git reset
om een lokale repository bij te werken naar de status van een remote. Het git fetch
commando is een cruciaal onderdeel van samenwerkende Git work flows., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.