Ano ang pagkakaiba sa pagitan ng 'git pull' at 'git fetch'?

Tala ng Tagapamagitan. Given na animnapu't pitong tugon ang naipadala na sa tanong na ito (ang ilan sa mga ito ay tinanggal na), isaa>nagdadagdag ka ng bago bago magpadala ng isa pa.

Ano ang mga pagkakaiba sa pagitan ng git pull at git fetch ?

10,500
15 нояб. set pupeno 15 nov. 2008-11-15 12:51 '08 sa 12:51 2008-11-15 12:51
@ 46 sagot
  • 1
  • 2

Sa pinakasimpleng tuntunin, git pull executes isang git fetch sinusundan ng git merge .

Maaari mong gawin ang git fetch sa anumang oras upang i-update ang mga remote tracking branch sa mga refs/remotes/<remote>/ .

Ang operasyong ito ay hindi kailanman nagbabago sa alinman sa iyong sariling mga lokal na sanga sa mga refs/heads at ligtas na hindi binabago ang nagtatrabaho kopya. Kahit na narinig ko na ang mga tao ay pana-panahon na tumakbo git fetch sa isang cron trabaho sa background (bagaman hindi ko inirerekomenda ito).

Ang isang git pull ay kung ano ang gagawin mo upang i-update ang lokal na sangay sa iyong remote na bersyon, pati na rin i-update ang iba pang mga remote na sangay ng pagsubaybay.

Git dokumentasyon: Git pull

8755
15 нояб. Sumagot na ibinigay ni Greg Hewgill Nobyembre 15 2008-11-15 12:52 '08 sa 12:52 2008-11-15 12:52
  • Kapag gumamit ka ng pull , si Git ay nagsisikap na awtomatikong gawin ang iyong trabaho para sa iyo. Ito ay sensitibo sa konteksto , kaya ang Git ay pagsasama-sama ng anumang push ay nagpapatupad sa sangay na kasalukuyang ginagawa mo. pull awtomatikong merges commits nang hindi pagpapaalam mo makita ang mga ito muna . Kung ikaw ay hindi napakahusay sa pamamahala ng iyong mga sanga, maaari kang makaranas ng madalas na mga salungatan.

  • Kapag fetch mo, nakolekta ni Git ang anumang gumawa mula sa target branch na hindi umiiral sa iyong kasalukuyang sangay, ngunit iimbak ang mga ito sa iyong lokal na imbakan . Gayunpaman, hindi ito pinagsasama ang mga ito sa iyong kasalukuyang sangay . Ito ay lalong kapaki-pakinabang kung kai>merge .

border=0
1919
18 авг. sumagot na ibinigay ng Mouna Cheikhna 18 aug. 2011-08-18 11:53 '11 sa 11:53 2011-08-18 11:53

Mahalaga na i-contrast ang git disenyo ng pilosopiya sa pilosopiya ng isang mas tradisyunal na tool sa pamamahala ng source, tulad ng SVN.

Ang pagbabagsak ay dinisenyo at binuo gamit ang isang client / server model. May isang repository, na isang server, at maraming kliyente ang makakakuha ng code mula sa server, magtrabaho kasama nito, at pagkatapos ay ilipat ito pabalik sa server. Ito ay ipinapalagay na ang client ay maaaring laging makipag-ugnay sa server kapag siya ay kai>

Ang Git ay dinisenyo upang suportahan ang isang higit pang ibinahagi modelo nang wa>

Upang suportahan ang modelong ito, pin ay nagpapanatili ng isang lokal na repository sa iyong code, pati na rin ang isang karagdagang lokal na repository na sumasalamin sa estado ng remote repository. Sa pamamagitan ng pagtatago ng isang kopya ng remote repository sa isang lugar, maaaring matukoy ng git ang mga pagbabago na kai>

  • git fetch ay isang command na nagsasabing: "Dalhin ang aking lokal na kopya ng remote na imbakan sa petsa."

  • git pull nagsasabi: "Magdala ng mga pagbabago sa remote na lalagyan kung saan itinatago ko ang aking sariling code."

Karaniwan, ang git pull ay ginagawa ito sa pamamagitan ng pagtakbo ng git fetch upang i-update ang isang lokal na kopya ng remote repository, at pagkatapos ay pagsamahin ang mga pagbabago sa iyong sariling repository ng code at marahil ang iyong nagtatrabaho kopya.

Alisin ito upang tandaan na madalas ay hindi bababa sa tatlong kopya ng proyekto sa iyong workstation. Isang kopya ang iyong sariling imbakan na may sariling kasaysayan ng pagsasagawa nito. Ang ikalawang kopya ay ang iyong nagtatrabaho kopya, kung saan mo i-edit at bumuo. Ang ikatlong kopya ay ang iyong lokal na "naka-cache na" kopya ng remote repository.

1066
31 марта '13 в 21:43 2013-03-31 21:43 ang sagot ay ibinigay sa pamamagitan ng MikeD Marso 31 '13 sa 21:43 2013-03-31 21:43
711
09 июня '15 в 16:30 2015-06-09 16:30 ang sagot ay ibinigay Contango Hunyo 09, '15 sa 4:30

Isang paggamit ng git fetch ay sasabihin sa iyo ng sumusunod na mensahe tungkol sa anumang mga pagbabago sa remote branch mula sa huling pull ... upang masuri mo bago gawin ang aktwal na pull, na maaaring baguhin ang mga file sa iyong kasalukuyang branch at magpatakbo ng isang kopya .

 git fetch git diff ...origin 
437
07 мая '10 в 22:23 2010-05-07 22:23 ang sagot ay ibinigay sa mepster Mayo 07, '10 sa 10:23 2010-05-07 22:23

Kai>master sa iyong localhost ay isang sangay.

Kapag nag-clone ka ng repository, nakukuha mo ang buong repository para sa lokal na host. Nangangahulugan ito na sa panahong ito mayroon kang pinagmulan / master pointer sa HEAD at ang master na tumuturo sa parehong HEAD .

kapag nagsimula kang magtrabaho at gagawin mo ito, ililipat mo ang master pointer sa HEAD + iyong mga pag-aayos. Ngunit ang pinanggalingan / master pointer ay nagpapahiwatig pa rin kung ano ito kapag na-clone ka.

Kaya, ang pagkakaiba ay magiging:

  • Kung nagpapatakbo ka ng git fetch , kakai>GitHub ) at ilipat ang start / master pointer sa HEAD . Samantala, patuloy na ipahiwatig ng iyong lokal na wizard ng sangay kung saan ito matatagpuan.
  • Kung gagawin mo ang git pull , ito ay karaniwang kunin (tulad ng ipinaliwanag nang mas maaga) at pagsamahin ang anumang mga bagong pagbabago sa pangunahing sangay at ilipat ang pointer sa HEAD .
347
11 мая '12 в 21:37 2012-05-11 21:37 ang sagot ay ibinigay kay Gerardo Mayo 11, '12 sa 21:37 2012-05-11 21:37

Minsan ay tumutulong ang visual na pagtatanghal.

2019

25 янв. ang sagot ay ibinigay ng thedarkpassenger 25 jan. 2016-01-25 20:28 '16 sa 8:28 pm 2016-01-25 20:28

sandali

git fetch ay katulad ng pull ngunit hindi pagsasama. i.e. Kinukuha nito ang mga malayuang pag-update (mga refs at mga objects ), ngunit ang iyong lokal na labi ay hindi nabago (ibig sabihin, origin/master update, ngunit ang master nananatiling pareho).

git pull bumaba mula sa console at agad na merges.

Higit pa

git clone clones repos.

git rebase nagse-save ng materyal mula sa iyong kasalukuyang sangay na wala sa pataas na sangay sa pansamanta>git pull -rebase ng mga tinanggal na mga pagbabago, i-rewind ang iyong lokal na sangay, ulitin ang mga pagbabago sa tuktok ng kasalukuyang sangay nang isa-isa, hanggang sa ikaw ay napapanahon sa mga pinakabagong pagpapaunlad.

Bi>git branch -a ay magpapakita sa iyo nang eksakto kung ano ang nangyayari sa lahat ng iyong mga sanga - lokal at remote.

Nakatulong ang post na ito ng blog:

Pagkakaiba sa pagitan ng git pull, git fetch at git clone (at git rebase) - Mike Pierce

at sumasakop sa git pull , git fetch , git clone at git rebase .

====

I-UPDATE

Naisip ko na ina-update ko ito upang ipakita kung paano mo talaga ginamit ito sa pagsasagawa.

  1. I-update ang iyong lokal na repo mula sa isang malayuang aparato (ngunit huwag magkaisa):

     git fetch 
  2. Pagkatapos ng pag-download ng mga update, tingnan ang mga pagkakaiba:

     git diff master origin/master 
  3. Kung ikaw ay masaya sa mga update na ito, pagsamahin:

     git pull 

Mga Tala:

Sa hakbang 2: Para sa higit pang impormasyon tungkol sa mga pagkakaiba sa pagitan ng mga lokal at remote device, tingnan ang Seksyon: Paano ihambing ang isang lokal na git branch na may isang remote branch?

Sa hakbang 3: Malamang, ito ay mas tumpak (halimbawa, sa isang mabilis na pagpapalit ng repo) upang gawing git rebase origin . Tingnan @Justin Ohms Magkomento sa ibang sagot.

Tingnan din ang: http://longair.net/blog/2009/04/16/git-fetch-and-merge/

170
13 апр. Sumagot Snowcrash Abril 13 2013-04-13 20:31 '13 sa 8:31 ng 2013-04-13 20:31
 git-pull - makuha mula sa at pagsamahin sa isa pang repository o isang lokal na branch SINOPSIS git pull ... DESCRIPTION Pinapatakbo ang git-fetch  Kinuha ang (mga) ulo sa kasalukuyang sangay.  Sa -rebase, tumatawag git-rebase  sa halip na git-merge. Tandaan na magagamit mo.  (kasalukuyang direktoryo) bi>

Gusto mo pull, kung nais mo ang mga kuwento upang sumanib, nais mong makakuha ng kung mo lamang "Nais ang code," dahil ang ilan sa kanila maglagay ng i>

161
15 нояб. Sumagot na ibinigay ni Vinko Vrsalovic Nobyembre 15 2008-11-15 12:52 '08 sa 12:52 2008-11-15 12:52

Maaari mong kunin mula sa remote repository, tingnan ang mga pagkakaiba, at pagkatapos ay hilahin o pagsamahin.

Ito ay isang halimbawa ng isang remote repository pinangalanan origin at isang sangay na pinangalanang master , na sumusubaybay sa remote origin/master sangay:

 git checkout master git fetch git diff origin/master git rebase origin master 
147
21 марта '11 в 14:07 2011-03-21 14:07 ang sagot ay ibinigay ni Antonio Bardazzi Marso 21 '11 sa 14:07 2011-03-21 14:07

Ang maikling at simpleng sagot ay ang git pull ay lamang git fetch sinusundan ng git merge .

Mahalaga na tandaan na ang git pull awtomatikong merges, kung gusto mo ito o hindi . Siyempre, ito ay maaaring humantong sa pagsamahin ang mga salungatan. Sabihin nating ang iyong console ay origin at ang iyong branch ay master . Kung ikaw ay git diff origin/master bago paghila, dapat mong malaman ng mga potensyal na pagsamahin ang mga kontrahan at maaaring maghanda ng iyong lokal na sangay nang naaayon.

Bi>i> kinabibi>git rebase , halimbawa, ang isang ito, na aking paraphrase mula sa isang kaugnay na artikulo:

 git pull origin master git checkout foo-branch git rebase master git push origin foo-branch 

Kung nakita mo ang iyong sarili sa sitwasyong ito, maaaring matukso ka ng git pull --rebase . Kung talagang hindi mo alam kung ano ang iyong ginagawa, ipapayo ko na gawin ito. Ito ay isang babala mula sa pahina ng man para sa git-pull , version 2.3.5 :

Ito ay isang potensyal na mapanganib na paraan ng operasyon. Isinulat niya muli ang isang kuwento na hindi nakapagbigay nang mabuti kapag na-publish mo na ang kuwentong ito. Huwag gamitin ang parameter na ito kung hindi mo maingat na basahin ang git-rebase (1).

139
15 мая '11 в 23:53 2011-05-15 23:53 ang sagot ay ibinigay ng jfmercer Mayo 15, '11 sa 23:53 2011-05-15 23:53

2019

117
06 февр. ang sagot ay ibinigay noong ika- 6 ng Pebrero. 2015-02-06 14:48 '15 sa 14:48 2015-02-06 14:48

Well , narito ang i>git pull at git fetch , upang maunawaan mo ang mga aktwal na pagkakaiba ... sa i>alisin ang code sa mga pagbabago at isama ito sa iyong lokal na sangay, basahin sa upang makakuha ng mas detalyadong impormasyon tungkol sa bawat isa:

git fetch

I-download nito ang lahat ng mga link at mga bagay at anumang mga bagong sangay sa iyong lokal na repository ...

Pumili ng mga sanga at / o tag (magkasama, "ref") mula sa isa o higit pang mga repository, kasama ang mga bagay na kinakai>

Sa pamamagitan ng default, ang anumang tag na tumuturo sa nakuha na mga kuwento ay nakuha rin; ang epekto ay upang kunin ang mga tag na tumuturo sa mga sanga na interesado ka. Maaaring mabago ang default na pag-uugali gamit ang mga opsyon - mga tag o --no-tag o sa pamamagitan ng pagtatakda ng remote ..tagOpt. Ang paggamit ng refspec, na malinaw na nakakakuha ng mga tag, maaari mong kunin ang mga tag na hindi tumuturo sa mga sangay na interesado ka.

Maaaring makuha ang git fetch mula sa isang nag-iisang repository o URL, o mula sa i>1 ).

Kung wa>

Ang mga pangalan ng mga link na napili, kasama ang mga pangalan ng mga bagay na kani>


git pull

Magagamit nito ang mga pagbabago mula sa remote sa kasalukuyang sangay sa lokal na ...

Kabi>

Mas partikular, ang git pull ay tumatakbo sa git fetch sa ibinigay na mga parameter at mga tawag git pagsama upang pagsamahin ang mga natanggap na mga header ng sangay sa kasalukuyang sangay. Paggamit ng -rebase, ito ay nagpapatakbo ng git rebase sa halip ng git merge.

dapat ang pangalan ng remote repository na ipinasa sa git-fetch 1 . maaaring tumawag sa isang di-makatwirang remote ref (halimbawa, pangalan ng tag) o kahit na isang koleksyon ng mga link na may kauku>

Ang mga default na halaga para sa at mababasa mula sa mga "remote" at "pagsamahin" na mga configuration para sa kasalukuyang branch, na itinakda ng git-branch --track.


Lumikha din ako ng isang visual na imahe sa ibaba upang ipakita sa iyo kung paano git fetch at git pull gumana nang magkasama ...

2019

Bonus:

Nagsasalita ng pag-iinat at pagkuha sa mga sagot sa itaas, nais kong ibahagi ang isang kagiliw-giliw na bilis ng kamay,

git pull --rebase

Ang utos sa itaas ay ang pinaka-kapaki-pakinabang na utos sa aking git buhay, na naka-save ng maraming oras.

Bago itulak ang bagong mga commits sa server, subukan ang command na ito at ito ay awtomatikong i-synchronize ang pinakabagong mga pagbabago sa server (gamit ang fetch + merge) at ilagay ang iyong mensahe sa simula sa git log. Hindi na kai>

Maghanap ng impormasyon sa: http://gitolite.com/git-pull--rebase

113
23 дек. Ang sagot ay ibinigay ni Sazzad Hissain Khan noong Disyembre 23. 2015-12-23 18:31 '15 sa 18:31 2015-12-23 18:31

Gusto kong magkaroon ng i>

  LOCAL SYSTEM . ===================================================== ================= . ================= =================== ============= REMOTE REPOSITORY . REMOTE REPOSITORY LOCAL REPOSITORY WORKING COPY (ORIGIN) . (CACHED) for example, . mirror of the a github repo. . remote repo Can also be . multiple repo . . . FETCH *------------------>* Your local cache of the remote is updated with the origin (or multiple external sources, that is git distributed nature) . PULL *-------------------------------------------------------->* changes are merged directly into your local copy. when conflicts occur, you are asked for decisions. . COMMIT . *<---------------* When coming from, for example, subversion, you might think that a commit will update the origin. In git, a commit is only done to your local repo. . PUSH *<---------------------------------------* Synchronizes your changes back into the origin. 

Ang ilan sa mga pangunahing pakinabang ng pagkakaroon ng console mirror image ay ang mga:

  • Pagganap (pag-scroll lahat ng mga gumawa at mensahe nang hindi sinusubukan na i-compress ito sa pamamagitan ng network)
  • Feedback tungkol sa kalagayan ng iyong lokal na repo (halimbawa, ginagamit ko ang Atlassian SourceTree, na magbibigay sa akin ng isang ilaw bombilya na nagpapahiwatig kung magpapatuloy ako o pabalik kumpara sa pinagmulan. I-update sa GIT FETCH).
107
20 февр. Ang sagot ay ibinigay ni Justus Romijn noong Pebrero 20. 2014-02-20 00:18 '14 sa 0:18 2014-02-20 00:18

Nakipaglaban din ako dito. Sa katunayan, nakuha ko dito sa paghahanap sa Google para sa eksaktong parehong tanong. Matapos basahin ang lahat ng mga sagot na ito, sa wakas ay nakuha ko ang isang larawan sa aking ulo, at nagpasiya akong subukan ang pakikitungo sa estado ng 2 repository at 1 sandbox, at ang mga aksyon na ginaganap sa oras, nanonood ng kani>

Tatlong mga repository na may isang sample:

 --------------------- ----------------------- ----------------------- - Remote Repo - - Remote Repo - - Remote Repo - - - - gets pushed - - - - @ R01 - - @ R02 - - @ R02 - --------------------- ----------------------- ----------------------- --------------------- ----------------------- ----------------------- - Local Repo - - Local Repo - - Local Repo - - pull - - - - fetch - - @ R01 - - @ R01 - - @ R02 - --------------------- ----------------------- ----------------------- --------------------- ----------------------- ----------------------- - Local Sandbox - - Local Sandbox - - Local Sandbox - - Checkout - - new work done - - - - @ R01 - - @ R01+ - - @R01+ - --------------------- ----------------------- ----------------------- 

Tatlong mga repository na may isang load

 --------------------- ----------------------- ----------------------- - Remote Repo - - Remote Repo - - Remote Repo - - - - gets pushed - - - - @ R01 - - @ R02 - - @ R02 - --------------------- ----------------------- ----------------------- --------------------- ----------------------- ----------------------- - Local Repo - - Local Repo - - Local Repo - - pull - - - - pull - - @ R01 - - @ R01 - - @ R02 - --------------------- ----------------------- ----------------------- --------------------- ----------------------- ----------------------- - Local Sandbox - - Local Sandbox - - Local Sandbox - - Checkout - - new work done - - merged with R02 - - @ R01 - - @ R01+ - - @R02+ - --------------------- ----------------------- ----------------------- 

Nakatulong ito sa akin na maunawaan kung bakit napakahalaga ang sampling.

95
17 июля '12 в 19:43 2012-07-17 19:43 ang sagot ay binibigyan ng pn1 dude Hulyo 17 '12 sa 7:43 pm 2012-07-17 19:43

Ang pagkakaiba sa pagitan ng GIT Fetch at GIT Pull ay maaaring ipaliwanag sa pamamagitan ng sumusunod na sitwasyon: (Pag-alala na ang mga larawan ay nagsasalita nang malakas kaysa sa mga salita! Nagbigay ako ng isang graphic na representasyon)

Ipagpalagay natin na nagtatrabaho ka sa isang proyekto sa mga miyembro ng iyong koponan. Samakatuwid, ang mga ito ay isa sa mga pangunahing dibisyon ng proyekto, at ang lahat ng mga kalahok ay dapat na mangunguna sa kani>

Kaya, ang paunang kalagayan ng dalawang sangay, kapag tinatanggal mo ang pangunahing proyekto sa iyong lokal na repository, ay magiging tulad nito- ( A , B at C ang mga module na nakumpleto na sa proyekto)

2019

ответ дан Aman Tiwari 07 февр. '17 в 17:15 2017-02-07 17:15