comanda git fetch
descarcă comiteri, fișiere și refs dintr-un depozit de la distanță în repo-ul local. Preluarea este ceea ce faci atunci când doriți să vedeți ce toată lumea a fost de lucru pe. Este similar cu svn update
prin faptul că vă permite să vedeți cum a progresat istoria centrală, dar nu vă obligă să îmbinați efectiv modificările în depozitul dvs. Git izolează conținutul preluat de conținutul local existent; nu are absolut niciun efect asupra activității dvs. de dezvoltare locală., Conținutul preluat trebuie verificat Explicit folosind comanda git checkout
. Acest lucru face ca preluarea să fie o modalitate sigură de a examina comiterile înainte de a le integra cu depozitul local.
când descărcați conținut dintr-un repo la distanță, git pull
și git fetch
comenzile sunt disponibile pentru a îndeplini sarcina. Puteți lua în considerare git fetch
versiunea „sigură” a celor două comenzi. Acesta va descărca conținutul de la distanță, dar nu va actualiza starea de lucru a repo-ului local, lăsând munca curentă intactă., git pull
este cel mai agresiv alternative; se va descărca conținut la distanță pentru cea mai activă filială locală și executa imediat git merge
pentru a crea o îmbinare a comis pentru noul conținut la distanță. Dacă aveți modificări în curs de desfășurare, acest lucru va provoca conflicte și va lansa fluxul de soluționare a conflictelor de îmbinare.
cum funcționează git fetch cu sucursale la distanță
pentru a înțelege mai bine cum funcționează git fetch
să discutăm despre modul în care git organizează și stochează comiteri., În spatele scenei, în directorul ./.git/objects
al depozitului, git stochează toate comiterile, locale și la distanță. Git păstrează la distanță și locale sucursale se angajează distinct separat prin utilizarea refs ramură. Refs pentru sucursalele locale sunt stocate în ./.git/refs/heads/
. Executând comanda git branch
va afișa o listă A refs-urilor locale. Următorul este un exemplu de ieșire git branch
cu unele nume de sucursale demo.,
git branch
master
feature1
debug2
Examinarea conținutului /.git/refs/heads/
director ar dezvălui similare de ieșire.
ls ./.git/refs/heads/
master
feature1
debug2
ramurile la distanță sunt la fel ca ramurile locale, cu excepția faptului că mapează comiterile din depozitul altcuiva. Ramurile de la distanță sunt prefixate de telecomanda de care aparțin, astfel încât să nu le amestecați cu sucursalele locale. La fel ca sucursalele locale, Git are, de asemenea, refs pentru sucursale la distanță. Remote branch refs trăiesc în directorul ./.git/refs/remotes/
., Următorul exemplu de fragment de cod arată ramuri s-ar putea vedea după preluarea de la distanță repo convenabil numit remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
Această ieșire afișează sucursalelor locale am avut de examinat anterior, dar acum le afișează prefixate cu origin/
. În plus, acum vedem ramurile la distanță prefixate cu remote-repo
. Puteți verifica o sucursală la distanță la fel ca una locală, dar acest lucru vă pune într-un detașat HEAD
stat (la fel ca verificarea unui vechi comite). Vă puteți gândi la ele ca la ramuri numai pentru citire., Pentru a vizualiza de la distanță ramuri, trece pur și simplu -r
steagul git branch
comandă.
puteți inspecta ramurile la distanță cu comenzile obișnuite git checkout
și git log
. Dacă aprobați modificările pe care le conține o ramură la distanță, o puteți îmbina într-o ramură locală cu un git merge
normal. Deci, spre deosebire de SVN, sincronizarea depozitului local cu un depozit la distanță este de fapt un proces în doi pași: fetch, apoi merge. Comanda git pull
este o comandă rapidă convenabilă pentru acest proces.,
git fetch comenzi și opțiuni
git fetch <remote>
Fetch toate ramurile din depozit. Aceasta Descarcă, de asemenea, toate comiterile și fișierele necesare din celălalt depozit.
git fetch <remote> <branch>
la fel ca comanda de mai sus, dar numai prelua ramura specificată.
git fetch --all
O putere care preia toate înregistrate telecomenzi și ramurile lor:
git fetch --dry-run
--dry-run
opțiune va efectua un demo rula de comanda., Acesta va afișa Exemple de acțiuni pe care le va lua în timpul preluării, dar nu le va aplica.
git fetch a remote branch
următorul exemplu va demonstra cum să preluați o remote branch și cum să actualizați starea de lucru locală la conținutul remote. În acest exemplu, să presupunem că există o origine centrală repo din care depozitul local a fost clonat folosind comanda git clone
. Să presupunem, de asemenea, un depozit suplimentar la distanță numit coworkers_repo care conține un feature_branch pe care îl vom configura și prelua., Cu aceste ipoteze stabilite să continuăm exemplul.
În primul rând, va trebui să configurăm repo-ul la distanță folosind comanda git remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
aici am creat o referință la repo colegului folosind URL-ul repo. Vom trece acum acel nume de la distanță la git fetch
pentru a descărca conținutul.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
acum Vom avea la nivel local conținutul de colegii/feature_branch vom avea nevoie de a integra acest lucru în copia de lucru locală., Începem acest proces folosind comanda git checkout
pentru a verifica sucursala de la distanță recent descărcată.
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 ieșire din această casă funcționare indică faptul că suntem într-o detașat HEAD
stat. Acest lucru este de așteptat și înseamnă că HEAD
ref indică un ref care nu este în concordanță cu istoria noastră locală. Fiind faptul că HEAD
este indicat la ref coworkers/feature_branch, putem crea o nouă sucursală locală din acel ref., La ‘desprinse HEAD
‘ ieșire ne arată cum să faceți acest lucru folosind git checkout
command:
git checkout -b local_feature_branch
Aici am creat o noua filiala locală numit local_feature_branch. Acest lucru pune actualizări HEAD
pentru a indica cel mai recent conținut de la distanță și putem continua dezvoltarea pe ea din acest punct.
sincronizați originea cu Git fetch
următorul exemplu parcurge fluxul de lucru tipic pentru sincronizarea depozitului local cu sucursala principală a depozitului central.,
git fetch origin
Aceasta va afișa ramurile care au fost descărcate:
se angajează la aceste noi sucursale izolate sunt afișate ca pătrate în loc de cercuri în diagrama de mai jos. După cum puteți vedea, git fetch
vă oferă acces la întreaga structură de ramură a unui alt depozit.,
Pentru a vedea ce se angajează au fost adăugate în amonte de master, puteți rula un git log
utilizarea origine/stăpânul ca un filtru:
git log --oneline master..origin/master
Pentru a aproba modificările și a le îmbina în local ramura master utilizați următoarele comenzi:
git checkout master
git log origin/master
Atunci putem folosi git merge origin/master
:
git merge origin/master
originea/master și master ramurile acum punctul de la același comite, și sunt sincronizate cu cele din amonte evoluții.,
git fetch summary
în revizuire, git fetch
este o comandă principală utilizată pentru a descărca conținutul dintr-un depozit la distanță. git fetch
este folosit în combinație cu git remote
, git branch
, git checkout
și git reset
pentru a actualiza un depozit local de stat de la distanță. Comanda git fetch
este o piesă critică a fluxurilor de lucru colaborative git., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.