'Git pull' සහ 'git fetch' අතර වෙනස කුමක්ද?


11921

git pullසහ අතර ඇති වෙනස්කම් git fetchමොනවාද?



51
අපගේ විකල්ප ප්‍රවේශය git fetch; git reset --hard origin/masterඅපගේ කාර්ය ප්‍රවාහයේ කොටසක් බවට පත්ව ඇත. එය දේශීය වෙනස්කම් ඉවතට විසි කරයි, මාස්ටර් සමඟ ඔබව යාවත්කාලීනව තබයි, නමුත් වර්තමාන වෙනස්වීම් මත ඔබ නව වෙනස්කම් පමණක් ඇද නොගෙන අවුල් ජාලාවක් ඇති නොකිරීමට වග බලා ගනී. අපි එය ටික කලක් භාවිතා කර ඇති අතර එය මූලික වශයෙන් ප්‍රායෝගිකව බොහෝ ආරක්ෂිත බවක් දැනේ. ප්‍රගතියේ පවතින ඕනෑම වැඩක් පළමුව එකතු කිරීමට / කැප කිරීමට / ගබඩා කිරීමට වග බලා ගන්න!
මයිකල් ඩුරන්ට්

26
Git stash නිවැරදිව භාවිතා කරන්නේ කෙසේදැයි ඔබ දන්නා බවට වග බලා ගන්න. ඔබ 'අදින්න' සහ 'ලබා ගැනීම' ගැන
විමසන්නේ

36
මර්කුරියල් වෙතින් පැමිණෙන බොහෝ දෙනෙක් "gg pull" භාවිතා කරමින්, එය "hg pull" ට සමාන යැයි සිතති. එය එසේ නොවේ. Git හි "hg pull" ට සමාන වන්නේ "git fetch" ය.
සර්ජ් ෂුල්ට්ස්

8
ශාඛා සමග යාවත්කාලීන කේතය තර්ජනයක් විධානය බෝගයන්ගේ GIT හා ඔබගේ ප්රාදේශීය, GIT අදින්න විධානය වත්මන් ශාඛාව පමණක් යාවත්කාලීන කේතය බෝගයන්ගේ පමණක් අලුතින් එක් ශාඛා ලැබෙනු ඇත
Kartik පටෙල්

Answers:


9922

සරළව කිවහොත්, git pulla git fetchඅනුගමනය කරන්නේ a git merge.

git fetchඔබගේ දුරස්ථ ලුහුබැඳීම් ශාඛා යාවත්කාලීන කිරීමට ඔබට ඕනෑම වේලාවක කළ හැකිය refs/remotes/<remote>/.

මෙම ක්‍රියාව කිසි විටෙකත් ඔබේම දේශීය ශාඛා refs/headsකිසිවක් වෙනස් නොකරන අතර ඔබේ වැඩ කරන පිටපත වෙනස් නොකර එය කිරීම ආරක්ෂිත වේ. git fetchවරින් වර ක්‍රෝන් රැකියාවක යෙදෙන පුද්ගලයින් පසුබිමේ සිටින බව මම අසා ඇත්තෙමි (මෙය කිරීමට මම නිර්දේශ නොකරමි).

A git pullයනු දේශීය ශාඛාවක් එහි දුරස්ථ අනුවාදය සමඟ යාවත්කාලීනව ගෙන ඒමට ඔබ කරන අතර ඔබේ දුරස්ථ ලුහුබැඳීමේ ශාඛා යාවත්කාලීන කිරීමයි.

Git ප්‍රලේඛනය - git pull :

එහි පෙරනිමි ප්‍රකාරයේදී, git pullඑය git fetchඅනුගමනය කිරීම සඳහා කෙටිමං වේ git merge FETCH_HEAD.


326
"A" git pull "යනු ඔබේ ගබඩාව යාවත්කාලීනව ගෙන ඒමට ඔබ කරන්නේ කුමක්ද" <- නිධිය යාවත්කාලීන කිරීම දැනටමත් ලබාගෙන නොමැතිද? එය ඔබේ දේශීය ශාඛා දුරස්ථ ශාඛා සමඟ යාවත්කාලීනව ගෙන එනු ඇතැයි ඔබ අදහස් කරන්නේ නැද්ද? ඒකාබද්ධ කිරීම සඳහා: එය දුරස්ථ ශාඛා එම ශාඛා වල දේශීය පිටපත් සමඟ ඒකාබද්ධ කරයි, නැතහොත් එය හරියටම මෙහි ඒකාබද්ධ වන්නේ කුමක් ද?
ඇල්බට්

194
L ඇල්බට්: ඔව්, එය අමුතු වචන වලින්. git pullසෑම විටම වත්මන් ශාඛාවට ඒකාබද්ධ වේ . ඔබ බේරා ගැනීමට අවශ්ය ශාඛාව තෝරන්න එසේ සිට , සහ එය වත්මන් ශාඛා බවට පත්වෙලා. මෙම සිට ශාඛා දේශීය හෝ දුරස්ථ විය හැක; එය ලියාපදිංචි නොවූ දුරස්ථ ශාඛාවක් විය හැකිය git remote(එයින් අදහස් වන්නේ ඔබ git pullවිධාන රේඛාවේ URL යක් සම්මත කරන බවයි ).
intuited

129
@espertus: නැත. තල්ලු කිරීම කිසි විටෙකත් ස්වයංක්‍රීයව ඒකාබද්ධ නොවේ. පරිශීලක එක්කෝ කොබැඳි නැත්නම් ස්ථානීකව නොපවතියි, ඕනෑම ඒකාබද්ධ නිරාකරණය, අදින්න ඇතැයි අපේක්ෂා කෙරේ නම් දුරස්ථ ආපසු තල්ලු.
ග්‍රෙග් හෙව්ගිල්

33
මා සිටින්නේ නම් /home/alice/සහ කරන්නේ නම් git fetch /home/bob, පසුව ලබා දිය යුතු පරාමිතීන් git mergeමොනවාද?
ripper234

106
Git ඉගෙන ගන්නා පුද්ගලයින්ට සටහන: pullඇත්ත වශයෙන්ම fetchප්ලස් a මගින් අනුකරණය කළ නොහැක merge. දුරස්ථ ශාඛා දර්ශකයක් පමණක් වෙනස් වන mergeකිසිවක් මා විසින් ලබාගෙන ඇති අතර කිසිවක් කිරීම ප්‍රතික්ෂේප කරමි. pull, අනෙක් අතට, මගේ ලුහුබැඳීමේ ශාඛාව වේගයෙන් ඉදිරියට යවයි.
රෝමන් ස්ටාර්කොව්

2173
  • ඔබ භාවිතා කරන විට pull, Git ස්වයංක්‍රීයව ඔබ වෙනුවෙන් ඔබේ වැඩ කටයුතු කිරීමට උත්සාහ කරයි. එය සන්දර්භය සංවේදී බැවින් Git ඔබ දැනට වැඩ කරන ශාඛාව තුළට ඇද ගන්නා ඕනෑම pull කොමිස් එකක් ඒකාබද්ධ කරයි . කොමිස් පළමුවෙන් සමාලෝචනය කිරීමට ඔබට ඉඩ නොදී ස්වයංක්‍රීයව ඒකාබද්ධ කරයි . ඔබ ඔබේ ශාඛා සමීපව කළමනාකරණය නොකරන්නේ නම්, ඔබට නිතර ගැටුම් ඇති විය හැකිය.

  • ඔබ fetch, ඔබගේ වර්තමාන ශාඛාවේ නොපවතින ඉලක්කගත ශාඛාවෙන් Git එකතු කර ඒවා ඔබේ දේශීය ගබඩාවේ ගබඩා කරයි. කෙසේ වෙතත්, එය ඔබගේ වර්තමාන ශාඛාව සමඟ ඒවා ඒකාබද්ධ නොකරයි . ඔබේ ගබඩාව යාවත්කාලීනව තබා ගැනීමට අවශ්‍ය නම් මෙය විශේෂයෙන් ප්‍රයෝජනවත් වේ, නමුත් ඔබ ඔබේ ලිපිගොනු යාවත්කාලීන කරන්නේ නම් බිඳ දැමිය හැකි යමක් මත ක්‍රියා කරයි. ඔබගේ ප්‍රධාන ශාඛාවට බැඳීම් ඒකාබද්ධ කිරීමට, ඔබ භාවිතා කරයි merge.


34
එකඟයි, විශිෂ්ට අදහස් දැක්වීමක්. ඒ නිසයි මම git pull වෛර කරන්නේ. සංශෝධන මෙවලමක් ඔබ වෙනුවෙන් කේත සංස්කරණය කිරීමට ඉඩ දීම කවදා හෝ අර්ථවත් වන්නේ කවදාද? ලිපිගොනු දෙකක් ඒකාබද්ධ කිරීම කරන්නේ එය නොවේද? ගොනුව තුළ එම සංස්කරණ දෙක භෞතිකව වෙන් කර ඇති නමුත්, දේශීය වශයෙන් පරස්පර නම් කුමක් කළ යුතුද?
ලී ඩික්සන්

126
lexelexhobby short put, git fetchඔබගේ .git/නාමාවලිය යාවත්කාලීන කිරීම (AKA: දේශීය නිධිය) සහ පිටත කිසිවක් නැත .git/(AKA: වැඩ කරන ගස). එය ඔබේ දේශීය ශාඛා වෙනස් නොකරන අතර එය ස්පර්ශ නොකරයි master. එය ස්පර්ශ remotes/origin/masterවුවද (බලන්න git branch -avv). ඔබට තවත් දුරස්ථ තිබේ නම්, උත්සාහ කරන්න git remote update. මෙය git fetchඑක් විධානයක ඇති සියලුම දුරස්ථ සඳහා වේ.
ටිනෝ

24
In ටිනෝ ඔබේ ඇත්තටම වැදගත්ම කරුණයි. “දුරස්ථ” ශාඛා සැබවින්ම ගබඩා කර ඇත්තේ හැෂ් පොකුරක් ලෙස බව මිනිසුන් නොදැන සිටිය හැකිය .git/refs/remotes/origin/.
ක්‍රිස්

13
ඔබ ලබා ගන්නා විට, Git ඔබගේ වර්තමාන ශාඛාවේ නොපවතින ඉලක්කගත ශාඛාවෙන් කිසියම් කොමිස් එකතු කර ඒවා ඔබේ දේශීය ගබඩාවේ ගබඩා කරයි - දුරස්ථයෙන් ගෙන ආ දේ මා දකින්නේ කෙසේද සහ එය මගේ දේශීය ශාඛා සමඟ ඒකාබද්ධ කරන්නේ කෙසේද?
ア レ ッ ク ス

13
InTino මට තවමත් නොතේරෙන දෙය නම් ... එහි තේරුම කුමක්ද? එය යාවත්කාලීන .gitකරන්නේ නම් ලබා ගැනීම භාවිතා කරන්නේ ඇයි ? අපේක්ෂිත ප්‍රතිලාභය කුමක්ද සහ ඉන් පසු මා කුමක් කළ යුතුද?
BadHorsie

1210

SVN වැනි සාම්ප්‍රදායික ප්‍රභව පාලන මෙවලමක දර්ශනය සමඟ git හි සැලසුම් දර්ශනය හා සැසඳීම වැදගත්ය.

උපසිරැසි නිර්මාණය කර ඇත්තේ සේවාදායක / සේවාදායක ආකෘතියක් සමඟිනි. සේවාදායකය වන තනි ගබඩාවක් ඇති අතර සේවාදායකයින් කිහිප දෙනෙකුට සේවාදායකයෙන් කේත ලබා ගත හැකිය, එය මත වැඩ කළ හැකිය, පසුව එය නැවත සේවාදායකයට භාර දිය හැකිය. උපකල්පනය නම් මෙහෙයුමක් කිරීමට අවශ්‍ය වූ විට සේවාදායකයාට සේවාදායකයා සම්බන්ධ කර ගත හැකි බවයි.

Git නිර්මාණය කර ඇත්තේ මධ්‍යම ගබඩාවක් අවශ්‍ය නොවන වඩා බෙදා හරින ලද ආකෘතියකට සහාය වීම සඳහා ය (ඔබට අවශ්‍ය නම් ඔබට එය නිසැකවම භාවිතා කළ හැකි වුවද). සේවාදායකයා සහ "සේවාදායකයා" එකම වේලාවක සබැඳිව සිටීමට අවශ්‍ය නොවන පරිදි git නිර්මාණය කර ඇත. විශ්වාසනීය නොවන සබැඳියක සිටින පුද්ගලයින්ට ඊමේල් හරහා පවා කේත හුවමාරු කර ගත හැකි වන පරිදි Git නිර්මාණය කර ඇත. Git හරහා කේතය හුවමාරු කර ගැනීම සඳහා සම්පූර්ණයෙන්ම විසන්ධි වී සංයුක්ත තැටියක් පුළුස්සා දැමිය හැකිය.

මෙම ආකෘතියට සහය දැක්වීම සඳහා ඔබේ කේතය සමඟ දේශීය ගබඩාවක් පවත්වාගෙන යන අතර දුරස්ථ ගබඩාවේ තත්වය පිළිබිඹු කරන අතිරේක දේශීය ගබඩාවක් ද ඇත. දුරස්ථ ගබඩාවේ පිටපතක් දේශීයව තබා ගැනීමෙන්, දුරස්ථ නිධිය වෙත ළඟා විය නොහැකි විට පවා අවශ්‍ය වෙනස්කම් git හට හඳුනාගත හැකිය. පසුව ඔබට වෙනස්කම් වෙනත් කෙනෙකුට යැවීමට අවශ්‍ය වූ විට, දුරස්ථ ගබඩාවට දන්නා වේලාවක සිට වෙනස් කිරීම් සමූහයක් ලෙස ඒවා මාරු කළ හැකිය.

  • git fetch "දුරස්ථ ගබඩාවේ මගේ දේශීය පිටපත යාවත්කාලීනව ගෙන එන්න" යනුවෙන් පවසන විධානය වේ.

  • git pull "දුරස්ථ ගබඩාවේ වෙනස්කම් මම මගේ කේතය තබා ගන්නා ස්ථානයට ගෙන එන්න" යනුවෙන් පවසයි.

සාමාන්‍යයෙන් git pullමෙය සිදු කරන්නේ git fetchදුරස්ථ ගබඩාවේ දේශීය පිටපත යාවත්කාලීනව ගෙන ඒම සඳහා වන අතර, පසුව වෙනස්කම් ඔබේම කේත ගබඩාවට හා සමහර විට ඔබේ වැඩ කරන පිටපතට ඒකාබද්ධ කිරීමෙනි.

ඉවත් කිරීම යනු ඔබේ වැඩපොළේ බොහෝ විට ව්‍යාපෘතියක අවම වශයෙන් පිටපත් තුනක් වත් ඇති බව මතක තබා ගැනීමයි . එක් පිටපතක් යනු ඔබේම කැපවීමේ ඉතිහාසය සහිත ඔබේම ගබඩාවකි. දෙවන පිටපත වන්නේ ඔබ සංස්කරණය කරන හා ගොඩනඟන ඔබේ වැඩ කරන පිටපතයි. තෙවන පිටපත දුරස්ථ ගබඩාවක ඔබේ දේශීය "හැඹිලි" පිටපතයි.


75
තාක්ෂණික වශයෙන්, දේශීය හා දුරස්ථ ගබඩාවන් සැබවින්ම එක හා සමානයි. Git හි, ගබඩාවක් යනු ඔවුන්ගේ දෙමව්පියන්ට යොමු කරන DAG ය. ශාඛා යනු තාක්‍ෂණිකව කොමිට් වල අර්ථවත් නම් වලට වඩා වැඩි දෙයක් නොවේ. දේශීය හා දුරස්ථ ශාඛා අතර ඇති එකම වෙනස නම් දුරස්ථ ඒවා remoteName/ බිම් මට්ටමේ සිට Git සමඟ උපසර්ගගත කර තිබීම ඉතා හොඳ කියවීමකි. Git ක්‍රියා කරන ආකාරය පිළිබඳ අවබෝධයක් ලබා ගත් පසු - එය ඉතා සරලයි , ඇත්තෙන්ම - සෑම දෙයක්ම අර්ථවත් කරයි.
එමිල් ලුන්ඩ්බර්ග්

13
පැහැදිලි කිරීම සඳහා බොහෝම ස්තූතියි. Git නිර්මාණය කර ඇති බව මට මේ වන තෙක් නොතේරුණි, එබැවින් ඔබට කේන්ද්‍රීය ගබඩාවක් තිබිය යුතු නැත. Git විස්තර කිරීමේදී සෑම කෙනෙක්ම සෑම විටම "DVCS" යැයි පවසන නමුත් සාපේක්ෂව නව ක්‍රමලේඛකයෙකු ලෙස එයින් අදහස් කරන්නේ මට කිසිවක් නැත. මම කවදාවත් දැකලා එසේ මේ වන තෙක් මම Git විශේෂ සිදු දේ තේරුම් ගැනීමට තවමත් තියෙනවා වූ CVCS, මම අනෙක් අය ද සමග එක්ව විට cental දුරස්ථ ගබඩාව සමඟ වැඩ නෑ කවදාවත් (එනම් Github),.
බ්‍රයන් පීටර්සන්

7
ඉතින්, මේ මත පදනම්ව, ක්‍රෝන් රැකියාවක් ලබා ගැනීම හොඳ අදහසක් නොවන්නේ ඇයි? ඔබ වැඩ කරන දුරස්ථයේ පිටපතක් සෑම විටම ඔබේ දේශීය යන්ත්‍රයේ තබා ගැනීම හොඳ අදහසක් සේ පෙනේ. ඇත්ත වශයෙන්ම, පසුගිය පැය 24 තුළ මම මගේ දුරස්ථය යාවත්කාලීන කර අන්තර්ජාල සම්බන්ධතාවය සඳහා udev කොක්කක් සමඟ සම්බන්ධ කර ඇත්දැයි පරීක්ෂා කරන පිටපතක් ලිවීමට මට හැඟේ.
බ්‍රයන් පීටර්සන්

24
ක්‍රෝන් රැකියාවක් කිරීම හොඳ අදහසක් නොවීමට එක් හේතුවක්: බොහෝ විට නව ටිකට් පතක වැඩ කරන විට හෝ ශාඛාවකට යාවත්කාලීන කිරීමේදී, වෙනස්කම් ලබා ගැනීමට මම කැමතියි. ලබා ගැනීමේදී වෙනස්කම් සිදු නොවන්නේ නම්, මගේ සෙසු ක්‍රමලේඛකයාගෙන් 'ඒයි ඔබ තල්ලු කළාද?' මා අවසන් වරට ලබාගත් දා සිට ගබඩාවේ කොපමණ 'අවුල්' ඇතිද යන්න පිළිබඳ අවබෝධයක් ද මට ඇත. මෙම ගබඩාවට දැනට සිදුකරන වෙනස්කම්වල ප්‍රමාණය හා වේගය පිළිබඳ අවබෝධයක් ලබා දීමටද මෙය උපකාරී වේ.
මයිකල් ඩුරන්ට්

5
Ab නබීත් දෙය නම්, Git යනු අන්තර්ගතයට නැඹුරු වීමයි. එය එක් වරක් පමණක් දත්ත ගබඩා කරන අතර එය කිහිප වතාවක් පෙන්වා දෙයි. බොහෝ වස්තූන් එක හා සමාන බැවින්, Git හි, මුල් පිටපතක් මත ඇති බහු කැපීම් පවා repo ප්‍රමාණයට එතරම් බලපාන්නේ නැත.
cst1992

890

ඔලිවර් ස්ටීල්ගේ ප්‍රතිරූපය සියල්ලම එකට ගැලපෙන ආකාරය මෙන්න :

රූප විස්තරය මෙහි ඇතුළත් කරන්න

ප්රමාණවත් උනන්දුවක් දක්වන නම්, මම එකතු කිරීමට ප්රතිරූපය යාවත්කාලීන බව සිතමි git cloneහා git merge...


156
සමඟ යාවත්කාලීන කළ රූපයක් git cloneසහ git mergeඑය ඉතා ප්‍රයෝජනවත් වනු ඇත!
MEMark

20
ඔව්, කරුණාකර එක් කරන්න git merge- දුරස්ථව පමණක් ඒකාබද්ධ වීම සහ දුරස්ථ ශාඛාව ඇදගෙන යන ආකාරය නිරීක්ෂණය කරන ඔබේ ප්‍රාදේශීය ශාඛාව තුළ ඔබගේ දේශීය බැඳීම් නොසලකා හැරීම නිසා mergeවෙනමම ඇමතුම ඇමතුමට සමාන නොවන බව පැහැදිලිව පෙන්විය යුතුය . pullpull
JustAMartin

12
පින්තූරයක් වචන දහසක් වටිනවා! යාවත්කාලීන කළ රූපය ක්ලෝන සහ ඒකාබද්ධ දත්ත ප්‍රවාහය කොහේ හෝ සූදානම්ද? රූප සටහනේ දැනටමත් ඇති දේ හැර වෙනත් දත්ත ප්‍රවාහයක් තිබේද?
ශිඛාන්ෂු

10
OntContango කරුණාකර ක්ලෝන එකතු කර ඒකාබද්ධ කරන්න. මා වැනි නවකයින් සඳහා ප්‍රයෝජනවත් වනු ඇත.
කුලී

11
Th3sly සහ thedarkpassenger විසින් ක්ලෝන සහ වෙනත් පිළිතුරු වල (පහත) ඒකාබද්ධ කරන රූප සටහන් දෙකක් ඇත.
intotecho

488

මෙහි එක් භාවිත අවස්ථාවක් git fetchනම්, ඔබගේ අන්තිම ඇදීමෙන් පසු දුරස්ථ ශාඛාවේ යම් වෙනසක් පහත දැක්වේ.

git fetch
git diff ...origin

බලන්න: https://git-scm.com/docs/git-diff, විධාන විධානයෙහි ද්විත්ව හා ත්‍රිත්ව-තිත් සින්ටැක්ස් සම්බන්ධයෙන්


9
ඇයි නැත්තේ git diff ..origin?
එරික් කැප්ලුන්

3
git diff සම්භවය සහ git diff ..origin වැඩ කරන බව පෙනේ නමුත් මෙම අමුතු නොවේ ... දේවල්
මාක්

19
-කොම්පස්ට්‍රෙච් අවකාශයක් තිබිය යුතු නැත. git diff ...originසමාන වේ git diff $(git-merge-base HEAD origin) origin(බලන්න git diff [--options] <commit>...<commit> [--] [<path>…]වගන්තිය kernel.org/pub/software/scm/git/docs/git-diff.html#_description වෙනස් වන,) git diff origin; git diff ...originදී සිදුකරන වෙනස්කම් සංකල්පමය originවත්මන් ශාඛා සිට අතු සිට originඇති අතර, git diff originඑය අතු සිට ද වත්මන් ශාඛා තුළ සිදු කළ වෙනස්කම් පිටුපස ඇතුළත් origin.
මැක්ස් නැනසි

2
විධාන කිසිවක් මා වෙනුවෙන් (වින්ඩෝස් මත) ක්‍රියාත්මක නොවූ නමුත් git diff origin/masterපහත සඳහන් පරිදි ක්‍රියා කරයි
බ්‍රයන් බර්න්ස්

OSX හි git 2.0.0 භාවිතා කරමින්. මෙම විධානයන් කිසිවක් ක්‍රියාත්මක වූයේ නැත. ඒවා අතහැර දමා තිබේද?
කේ-මයිකල් අයි

373

වෙනස කුමක්දැයි වටහා ගැනීමට මට ටිකක් වැය විය, නමුත් මෙය සරල පැහැදිලි කිරීමකි. masterඔබේ ප්‍රාදේශීය හොස්ට්හි ශාඛාවක් ඇත.

ඔබ ගබඩාවක් ක්ලෝන කරන විට ඔබ මුළු ගබඩාවම දේශීය සත්කාරක සමාගමට ලබා ගනී. මෙයින් අදහස් කරන්නේ එම අවස්ථාවේ දී ඔබට මූලාරම්භය / ප්‍රධාන දර්ශකය HEADසහ මාස්ටර් එකම දෙසට යොමු වී ඇති HEADබවයි.

ඔබ වැඩ කිරීමට පටන් ගත් විට සහ ඔබ කළ යුතු දේ සඳහා ප්‍රධාන දර්ශකය ඉදිරියට ගෙන යන්න HEAD. නමුත් මූලාරම්භය / ප්‍රධාන දර්ශකය ඔබ ක්ලෝන කරන විට එය කුමක් දැයි පෙන්වා දෙයි.

එබැවින් වෙනස වනුයේ:

  • ඔබ git fetchඑය කළහොත් එය දුරස්ථ ගබඩාවේ ( GitHub ) සියලු වෙනස්කම් ලබාගෙන මූලාරම්භය / ප්‍රධාන දර්ශකය වෙත ගෙන යනු ඇතHEAD ඇත. මේ අතර ඔබේ ප්‍රාදේශීය ශාඛා ස්වාමියා එය ඇති තැනට යොමු කරයි.
  • ඔබ එය කරන්නේ නම් git pull, එය මූලික වශයෙන් ලබා ගැනීම (කලින් විස්තර කර ඇති පරිදි) සහ ඔබගේ ප්‍රධාන ශාඛාවට නව වෙනස්කම් ඒකාබද්ධ කර දර්ශකය වෙත ගෙන යනු ඇත HEAD.

14
සම්භවය / මාස්ටර් යනු දේශීය ශාඛාවක් වන අතර එය මූලාරම්භයේ ප්‍රධානියාගේ පිටපතකි. ඔබ ලබා ගත් විට, ඔබ දේශීය: / සම්භවය / මාස්ටර් යාවත්කාලීන කරයි. Git හි ඇති සෑම දෙයක්ම ශාඛාවක් බව ඔබ සැබවින්ම වටහා ගත් පසු, මෙය බොහෝ අර්ථවත් වන අතර විවිධ වෙනස්වීම් නඩත්තු කිරීමට, ඉක්මන් දේශීය ශාඛා සෑදීමට, ඒකාබද්ධ කිරීමට සහ නැවත ප්‍රතිස්ථාපනය කිරීමට සහ සාමාන්‍යයෙන් ලාභ අතු වලින් විශාල වටිනාකමක් ලබා ගැනීමට ඉතා ප්‍රබල ක්‍රමයකි. ආකෘතිය.
cam8001

3
තවමත් අවුල් සහගතය. git fetchදුරස්ථ repo හි වෙනස්කම් ඔබේ දේශීය ගබඩාවට වචනාර්ථයෙන් බාගත කිරීම යැයි මම සිතුවෙමි , නමුත් ඒවා සිදු නොකරන්න - එනම්, ඒවා තවමත් ඔබේ දේශීය repo වෙත එකතු කළ යුතුය / කැපවිය යුතුය.
krb686

3
ලබා ගැනීම දුරස්ථ / සම්භවයක් ඇති (ගිතුබ්) සිට ඔබේ දේශීය සම්භවය දක්වා පමණි. නමුත් එය ඔබගේ සත්‍ය වැඩකරන ලිපිගොනු සමඟ ඒකාබද්ධ නොකරයි. ඔබ අදින්නේ නම් එය ලබා ගත හැකි අතර ඔබගේ වර්තමාන වැඩකරන ලිපිගොනු සමඟ ඒකාබද්ධ වේ
ජෙරාර්ඩෝ

223

සමහර විට දෘශ්‍ය නිරූපණයක් උපකාරී වේ.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


18
මම හිතන්නේ පින්තූරය පෙන්වන්නේ එය දේශීය රෙපෝවට ද බලපාන බවයි. එනම්, Git pull යනු දේශීය repo හා වැඩ කරන පිටපතට බලපාන එකතුවකි. දැන් එය වැඩ කරන පිටපතට බලපාන බව පෙනේ.
nonopolarity

10
Image 太極 者 無極 而 reed එකඟ විය - මෙම රූපය තරමක් නොමඟ යවන සුළුය, මන්දයත් එය ලබා git pullගැනීම මඟ හැරීම මෙන් පෙනේ , ඇත්ත වශයෙන්ම සාවද්‍යය.
forresthopkinsa

9
'දේශීය ගබඩාවක්' සහ 'වැඩ කරන පිටපතක්' අතර වෙනස කුමක්ද? ඔවුන් දෙදෙනාම පරිගණකයේ දේශීය නොවේද?
theITvideos

1
එසේනම් git fetch භාවිතය යනු කුමක්ද? දේශීය ගබඩාවේ සහ වැඩ කරන පිටපතෙහි ඇති වෙනස කුමක්දැයි දකින්නේ කෙසේද?
විකාෂ්

2
ITtheITvideos නැත, එසේ නොවේ. දේශීය ගබඩාවක් යනු ඔබ සිදු කරන විට ඔබේ කේතය (වැඩ කරන ගබඩාවෙන්) යන ස්ථානයයි. (ඔබ තල්ලු කරන විට එය දුරස්ථ repo වෙත යයි).
විකාෂ්

219

කෙටියෙන්

git fetchසමාන pullනමුත් ඒකාබද්ධ නොවේ. එනම් එය දුරස්ථ යාවත්කාලීනයන් ලබා ගනී ( refsසහ objects) නමුත් ඔබේ දේශීය තත්වය එලෙසම පවතී (එනම් origin/masterයාවත්කාලීන වන නමුත් එලෙසම masterපවතී).

git pull දුරස්ථයකින් පහළට ඇදගෙන ක්ෂණිකව ඒකාබද්ධ වේ.

තව

git clone ක්ලෝන රෙපෝ එකක්.

git rebaseඋඩු මහලේ ශාඛාවේ නොමැති ඔබගේ වර්තමාන ශාඛාවෙන් තාවකාලික ප්‍රදේශයකට දේවල් ඉතිරි කරයි. ඔබගේ වෙනස්වීම් ආරම්භ කිරීමට පෙර ඔබේ ශාඛාව දැන් සමාන ය. එබැවින්, git pull -rebaseදුරස්ථ වෙනස්කම් පහතට ඇද දමනු ඇත, ඔබේ ප්‍රාදේශීය ශාඛාව නැවත පෙරළා දමනු ඇත, ඔබ යාවත්කාලීන වන තෙක් ඔබගේ වර්තමාන ශාඛාවේ ඉහළින් එකින් එක වෙනස් කරන්න.

එසේම, git branch -aඔබගේ සියලුම ශාඛා සමඟ සිදුවන්නේ කුමක්ද යන්න ඔබට පෙන්වනු ඇත - දේශීය සහ දුරස්ථ.

මෙම බ්ලොග් සටහන ප්‍රයෝජනවත් විය:

Git pull, git fetch සහ git clone (සහ git rebase) අතර වෙනස - මයික් පියර්ස්

හා ආවරණ git pull, git fetch, git cloneහා git rebase.

====

යාවත්කාලීන කරන්න

ඔබ මෙය ප්‍රායෝගිකව භාවිතා කරන්නේ කෙසේදැයි පෙන්වීමට මෙය යාවත්කාලීන කිරීමට සිතුවෙමි.

  1. දුරස්ථයෙන් ඔබගේ දේශීය ගබඩාව යාවත්කාලීන කරන්න (නමුත් ඒකාබද්ධ නොකරන්න):

    git fetch 
    
  2. යාවත්කාලීන කිරීම් බාගත කිරීමෙන් පසුව, වෙනස්කම් බලමු:

    git diff master origin/master 
    
  3. එම යාවත්කාලීනයන් ගැන ඔබ සතුටු වන්නේ නම්, ඒකාබද්ධ කරන්න:

    git pull
    

සටහන්:

පියවර 2 හි: දේශීය සහ දුරස්ථ අතර වෙනස පිළිබඳ වැඩි විස්තර සඳහා, බලන්න: දේශීය git ශාඛාවක් එහි දුරස්ථ ශාඛාව සමඟ සංසන්දනය කරන්නේ කෙසේද?

3 වන පියවරේදී: මෙහි සිදු කිරීම වඩාත් නිවැරදි ය (උදා: වේගයෙන් වෙනස් වන repo එකක) git rebase origin. තවත් පිළිතුරකින් ust ජස්ටින් ඕම්ස්ගේ අදහස බලන්න .

මෙයද බලන්න: http://longair.net/blog/2009/04/16/git-fetch-and-merge/


1
යමෙකුට දේශීය කේතය "ඉඟිය" පිළිබිඹු කිරීමට අවශ්‍ය නම් ඔවුන් භාවිතා කළ යුතු යැයි මට හැඟේ git clone. මම උපුටා දැක්වීම් වලට උපුටා දැක්වුවෙමි, එහි අර්ථය වනුයේ ඕනෑම ස්වාමියා යනු කුමක්ද සහ යමෙකු "zip ලෙස බාගත කරන්න" යන්න github.com වෙතින්
Chris K

3
ඔබ ලබා ගැනීමෙන් පසු සිදු වූ වෙනස්කම් පිළිබඳව ඔබ සතුටු නොවන්නේ නම් කුමක් කළ යුතුද? ඊළඟට කුමක් කළ යුතුද?
කුගුට්සුමෙන්

නැවත ලබා ගැනීම පිළිබඳ ඔබේ ඡේදය මා සොයන දෙයයි. සෑම දෙයක්ම ශුන්‍ය කිරීම, දුරස්ථව යාවත්කාලීන කිරීම, පසුව ඔබ වැඩ කරමින් සිටියදී සිදු වූ පෙර කළ කොමිස් වලට ඉහළින් ඔබගේ වෙනස්කම් නැවත ධාවනය කිරීම පිළිබඳ සම්පූර්ණ අදහස . එය නිවැරදි යැයි උපකල්පනය කරමින් පරිපූර්ණ පැහැදිලි කිරීමක්. ;)
coblr

178
git-pull - වෙනත් ගබඩාවක් හෝ ප්‍රාදේශීය ශාඛාවක් සමඟ ලබාගෙන ඒකාබද්ධ කරන්න
සයිනොප්සිස්

git pull…
විස්තර

දී ඇති පරාමිතීන් සමඟ git-fetch ධාවනය වන අතර, ඒකාබද්ධ කිරීම සඳහා git-merge අමතන්න 
වත්මන් ශාඛාවට හිස (ය) ලබා ගන්නා ලදි. --Rbase සමඟ, git-rebase අමතන්න
git-merge වෙනුවට.

ඔබට භාවිතා කළ හැකි බව සලකන්න. (වත්මන් නාමාවලිය) අදින්න <repository> ලෙස
දේශීය ගබඩාවෙන් - දේශීය ශාඛා ඒකාබද්ධ කිරීමේදී මෙය ප්‍රයෝජනවත් වේ 
වත්මන් ශාඛාවට.

Git-pull සහ යටින් පවතින git-merge සඳහා විකල්පයන් අදහස් කරන බව සලකන්න 
git-fetch සඳහා වන විකල්පයන්ට පෙර ලබා දිය යුතුය.

ඉතිහාසය ඒකාබද්ධ කිරීමට ඔබට අවශ්‍ය නම් ඔබ අදින්නේය, යම් පුද්ගලයෙක් මෙහි ලිපි කිහිපයක් ටැග් කර ඇති බැවින් ඔබට 'කෝඩෙස් අවශ්‍ය නම්' ලබා ගත හැකිය.


5
ඉතා සිත්ගන්නා සුළුය, නමුත් ඔබට “කේතය පමණක්” අවශ්‍ය වන භාවිත අවස්ථාවක් මට නොපෙනේ. ඔබ ලබා ගන්නා විට ඔබේ කේතය සමඟ කුමක් සිදුවේද? එය මකා දමා තිබේද? දුරස්ථ වෙනස්වීම් සමඟ කුමක් සිදුවේද? ඔබ ඒකාබද්ධ නොවන්නේ නම් ඔබේ කේතය මකා දැමීමෙන් තොරව එය ඔබේ ගබඩාවට යන්නේ කෙසේද?
ඊ-තෘප්තිමත්

11
@ ඊ-තෘප්තිය: දුරස්ථ ශාඛාව ඔබේ යන්ත්‍රයේ දේශීයව ගබඩා කර ඇත. එබැවින් ඔබ git fetchඑය කරන විට එය ගබඩාවෙන් වෙනස්කම් ලබාගෙන ඔබේ දේශීය දුරස්ථ ශාඛාව යාවත්කාලීන කරයි. එය දේශීය දුරස්ථ ශාඛාව නිරීක්ෂණය කරන ඔබේ ප්‍රාදේශීය ශාඛාවට බලපාන්නේ නැත, එබැවින් ඔබේ වැඩ කරන පිටපතට එය බලපාන්නේ නැත. දැන්, ඔබ mergeඑය කරන විට, ලබාගත් වෙනස්කම් ඔබේ ප්‍රාදේශීය ශාඛාව සමඟ ඒකාබද්ධ කරයි.
jeffreyveon

ලබා ගැනීමේ විධානය සඳහා සරල භාවිත අවස්ථාවක්: ඒකාබද්ධ කිරීම හෝ කේත සමාලෝචනයක් වැනි වෙනත් පුද්ගලයින්ගේ මෑත කාලීන ක්‍රියාකාරකම් සම්බන්ධව කාලය ගතවන මෙහෙයුම් සිදු කිරීම, ජාල සම්බන්ධතා අවශ්‍යතා නොමැතිව ඔබගේ යාවත්කාලීන දේශීය ගබඩාවට පමණක් ප්‍රවේශ වීම, මන්ද ඔබ මීට පෙර බාගත කිරීම සඳහා ලබා ගැනීම භාවිතා කළ බැවිනි ඔබට ඉක්මනින් අවශ්‍ය සියල්ල (උදා: ඔබ වෙනත් සංවර්ධකයෙකු වෙත ගොස් වෙනත් නිධිය ජාලයකට සම්බන්ධ වී සිටියදී). අදින්න විධානය මඟින් එකම කොමිස් බාගත කරනු ඇත, නමුත් එය සිදු කිරීම ඒකාබද්ධ කිරීම නුසුදුසු විය හැකිය.
ලොරෙන්සෝ ගට්ටි

163

ඔබට දුරස්ථ ගබඩාවකින් ලබා ගත හැකිය, වෙනස්කම් දැක ඉන්පසු අදින්න හෝ ඒකාබද්ධ කරන්න.

මෙය දුරස්ථ ගබඩාවක් ලෙස originහැඳින්වෙන masterඅතර දුරස්ථ ශාඛාව ලුහුබැඳීම යනුවෙන් හැඳින්වෙන ශාඛාවක් සඳහා උදාහරණයකි origin/master:

git checkout master                                                  
git fetch                                        
git diff origin/master
git rebase origin master

35
ඔබ දැනටමත් වෙනස්කම් ලබාගෙන ඇති බැවින් අවසාන පියවර ලෙස අදින්න මඟ හැර “git rebase සම්භවයක්” කිරීමට ඔබට අවශ්‍ය විය හැකිය. හේතුව, ඔබ ලබා ගත් දින සිට යමෙකුට යම් යම් වෙනස්කම් සිදුකිරීමට ඉඩ තිබීම සහ ඔබ වෙනස් සමාලෝචනයක් කළ විට මේවා ලබා ගත නොහැකි වනු ඇත.
ජස්ටින් ඕම්ස්

158

කෙටි හා පහසු පිළිතුර නම් git pullඑය සරලව git fetchඅනුගමනය කිරීමයිgit merge කිරීමයි.

එය සටහන් කිරීම සඳහා ඉතා වැදගත් වේ git pullඇත ඔබ එයට කැමති දැයි ස්වයංක්රීයව එකතුකිරීමෙන් හෝ නොවේ . මෙය ඇත්ත වශයෙන්ම ඒකාබද්ධ කිරීමේ ගැටුම් වලට හේතු විය හැක. ඔබගේ දුරස්ථය originසහ ඔබේ ශාඛාව යැයි කියමු master. ඔබ git diff origin/masterඅදින්නට පෙර, ඒකාබද්ධ වීමේ ගැටුම් පිළිබඳව ඔබට යම් අදහසක් තිබිය යුතු අතර ඒ අනුව ඔබේ ප්‍රාදේශීය ශාඛාව සකස් කළ හැකිය.

අදින්න සහ තල්ලු කිරීමට අමතරව, සමහර වැඩ ප්‍රවාහයන් සම්බන්ධ වන අතර git rebase, මෙය සම්බන්ධිත ලිපියෙන් මම අර්ථ නිරූපණය කරමි:

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

ඔබ එවැනි තත්වයකට පත්වුවහොත්, ඔබ පෙළඹවිය හැකිය git pull --rebase. ඔබ කරන්නේ කුමක්දැයි ඔබ සැබවින්ම නොදන්නේ නම්, මම එයට එරෙහිව උපදෙස් දෙමි. මෙම අනතුරු ඇඟවීම සඳහා වන manපිටුවෙන් git-pull, අනුවාදය 2.3.5:

මෙය භයානක මෙහෙයුම් ක්‍රමයක්. එය ඉතිහාසය නැවත ලියයි, ඔබ දැනටමත් එම ඉතිහාසය ප්‍රකාශයට පත් කළ විට එය එතරම් සාර්ථක නොවේ. ඔබ git-rebase (1) හොඳින් කියවා ඇත්නම් මිස මෙම විකල්පය භාවිතා නොකරන්න.


2
Ust ජස්ටින් ඕම්ස් git pull --rebaseදී ඇති තත්වය තුළ නිවැරදි දේ නොවේ නම්, එය පියවර දෙකකින් සිදු කරන්නේ නම් එය නිවැරදි ද? එය නිවැරදි දෙය නම්, පියවර දෙකකින් එය කිරීමෙන් ලැබෙන අමතර වාසිය කුමක්ද?
කාස්

Az කාස් - ප්‍රතිප්‍රහාරය ස්වයංක්‍රීය නොවන නිසා. පළමුව වෙනස්කම් ලබා ගැනීම මඟින් ඔබට විනිශ්චය ඇමතුමක් ලබා ගත හැකිය. ඔබ දැනටමත් තල්ලු කළ ඉතිහාසය නැවත ප්‍රතිස්ථාපනය කිරීමේ ගැටලුව එය විසඳන්නේ නැත. ඔබ දැනටමත් තල්ලු කර නොමැති වෙනස්කම් නැවත ප්‍රතිස්ථාපනය කිරීම ආරක්ෂිත දැයි බැලීමට එය ඔබට ඉඩ සලසයි.
ජස්ටින් ඕම්ස්

2
Ust ජස්ටින් ඕම්ස් වෙනස්කම් නැවත සකස් කිරීම ආරක්ෂිත දැයි ඔබ තීරණය කරන්නේ කෙසේද? මම git rebase කිරීමට උත්සාහ කරමි, එය අවුල් ජාලයක් බවට පත් වුවහොත් පසුපසට යන්න, එවිට මම git pull --rebase ද කළ හැකිය. නමුත් ඔබට වෙනත් ක්‍රමයක් තිබේද?
කාස්

3
AKaZ gitk මඟින් ශාඛා ව්‍යුහය දෘශ්‍යමයව බැලීමට ඔබට ඉඩ සලසයි. එය ඔබ ලබා ගත් දෙයට සාපේක්ෂව ඔබේ ප්‍රාදේශීය ප්‍රධානියා, දුරස්ථ හා ශාඛා ව්‍යුහයන්ගේ පිහිටීම පෙන්වනු ඇත. මේ ආකාරයෙන් ඔබ දුරස්ථ (ය) වෙත තල්ලු කර ඇති දෙයට පෙර මුතුන් මිත්තෙකු මත පදනම් වූ ලබාගත් වෙනස්කම් ඔබ ප්‍රතික්ෂේප නොකරන බවට සහතික විය හැකිය.
ජස්ටින් ඕම්ස්

rebaseඔබ දැනටමත් තල්ලු කර නොමැති දේශීය ශාඛාවක වැඩ කරන විට භාවිතා කරන්න . ඔබ දුරස්ථව පවතින ශාඛාවක වැඩ කරන්නේ නම්, rebaseසමහර අප්රසන්න ගැටළු ඇති විය හැකි බැවින් ඔබ නිතිපතා කැමති විය යුතුය merge.
ජස්ටස් රොමිජන්

151

හරි , මෙතන සමහර අය ගැන තොරතුරු git pullසහ git fetch, ඔබ සරල වචන කිහිපයකින් සැබෑ වෙනස්කම් ... තේරුම් ගත හැකි පරිදි ෙනොලැබී නවතම දත්ත ලැබෙන, නමුත් කේතය වෙනස්කම් සහ ඔබේ වත්මන් දේශීය ශාඛා කේතය සමඟ අවුල් යන්නේ, නමුත් අදින්න හමුවීමක් කේතය වෙනස් වී එය ඔබේ ප්‍රාදේශීය ශාඛාව සමඟ ඒකාබද්ධ කරන්න, එක් එක් ගැන වැඩි විස්තර ලබා ගැනීමට කියවන්න:

git fetch

ඒ සියල්ල බාගත ඇත ආශ්රේයන් හා වස්තූන් ඔබේ දේශීය ඉෙල ෙ හා ඕනෑම නව ශාඛා ...

ශාඛා සහ / හෝ ටැග් (සාමූහිකව, “refs”) වෙනත් නිධියකින් හෝ කිහිපයකින් ලබා ගන්න, ඒවායේ ඉතිහාසය සම්පූර්ණ කිරීමට අවශ්‍ය වස්තූන් සමඟ. දුරස්ථ ලුහුබැඳීමේ ශාඛා යාවත්කාලීන කර ඇත (මෙම හැසිරීම පාලනය කිරීමේ ක්‍රම සඳහා පහත විස්තරය බලන්න).

පෙරනිමියෙන්, ලබාගත් ඉතිහාසය වෙත යොමු වන ඕනෑම ටැගයක් ද ලබා ගනී; එහි ප්‍රති is ලය වන්නේ ඔබ උනන්දුවක් දක්වන ශාඛා වෙත යොමු වන ටැග් ලබා ගැනීමයි. මෙම පෙරනිමි හැසිරීම --tags හෝ --no-tags විකල්ප භාවිතා කිරීමෙන් හෝ දුරස්ථ.. ටැග් ඕප්ට් වින්‍යාස කිරීමෙන් වෙනස් කළ හැකිය. පැහැදිලිවම ටැග් ලබා ගන්නා refspec භාවිතා කිරීමෙන්, ඔබ උනන්දුවක් දක්වන ශාඛා වෙත යොමු නොවන ටැග් ලබා ගත හැකිය.

git fetch එක නම් කරන ලද නිධියකින් හෝ URL එකකින් හෝ එකවර ගබඩාවලින් ලබා ගත හැකි අතර දුරස්ථයක් තිබේ නම්. වින්‍යාස ගොනුවට ඇතුල් වීම. (Git-config 1 බලන්න ).

දුරස්ථයක් නියම කර නොමැති විට, වත්මන් ශාඛාව සඳහා උඩු මහලේ ශාඛාවක් වින්‍යාස කර නොමැති නම්, පෙරනිමියෙන් මූල දුරස්ථය භාවිතා වේ.

ලබා ගන්නා ලද refs වල නම් සහ ඔවුන් පෙන්වා දෙන වස්තු නාම සමඟ .git / FETCH_HEAD වෙත ලියා ඇත. මෙම තොරතුරු ස්ක්‍රිප්ට් හෝ git-pull වැනි වෙනත් git විධානයන් විසින් භාවිතා කළ හැකිය.


git pull

එය දුරස්ථ සිට වත්මන් ශාඛාව දක්වා වෙනස්කම් අදාළ වේ දක්වා වෙනස් කිරීම දේශීය ...

දුරස්ථ ගබඩාවක සිට වත්මන් ශාඛාවට වෙනස්කම් ඇතුළත් කරයි. එහි පෙරනිමි ප්‍රකාරයේදී, git pull යනු කෙටියෙන් ලබා ගැනීම සඳහා වන අතර පසුව git ඒකාබද්ධ කිරීම FETCH_HEAD වේ.

වඩාත් නිවැරදිව, git pull මඟින් ලබා දී ඇති පරාමිතීන් සමඟ git ලබා ගැනීම ක්‍රියාත්මක වන අතර නැවත ලබාගත් ශාඛා ප්‍රධානීන් වත්මන් ශාඛාවට ඒකාබද්ධ කිරීම සඳහා git ඒකාබද්ධ කිරීම අමතයි. --Rebase සමඟ, එය git ඒකාබද්ධ කිරීම වෙනුවට git rebase ධාවනය කරයි.

git-fetch 1 වෙත සම්මත කර ඇති දුරස්ථ ගබඩාවක නම විය යුතුය . අනුරූප දුරස්ථ සොයා ශාඛා සහිත අත්තනෝමතික දුරස්ථ යොමුව (උදාහරණයක් ලෙස, ටැගය නම) හෝ ආශ්රේයන් පවා එකතුවක් නම් කළ හැකි (උදා, ආශ්රේයන් / ප්රධානීන් / : ආශ්රේයන් / remotes / සම්භවය / ), නමුත් සාමාන්යයෙන් එය නම දුරස්ථ ගබඩාවේ ශාඛාවක.

Git-branch --track විසින් සකසා ඇති පරිදි වත්මන් ශාඛාව සඳහා "දුරස්ථ" සහ "ඒකාබද්ධ" වින්‍යාසයෙන් පෙරනිමි අගයන් කියවනු ලැබේ.


මම ද නිර්මාණය දෘශ්ය ආකාරය පෙන්වා කිරීම සඳහා පහත git fetchහා git pullඑක්ව වැඩ ...

git pull සහ git fetch


10
ඔබ රූපයට කැමති නම්, සියලු git විධානයන් සඳහා එකම ආකාරයේ වන git cheat sheet එක බලන්න ... ndpsoftware.com/git-cheatsheet.html
Tom

3
ක්ලෝන දේශීය ගබඩාවට ද බලපාන්නේ නැද්ද (සියලුම ඉතිහාසය දුරස්ථව පිටපත් කිරීම)?
ටොම් ලොරෙඩෝ

135

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මෙම අන්තර්ක්‍රියාකාරී චිත්‍රක නිරූපණය git අවතක්සේරු කිරීමට බෙහෙවින් උපකාරී වේ: http://ndpsoftware.com/git-cheatsheet.html

git fetchදුරස්ථයේ සිට ඔබේ දේශීය ගබඩාවට කළ වෙනස්කම් "බාගත කරන්න". git pullවෙනස්කම් බාගත කර ඒවා ඔබගේ වර්තමාන ශාඛාවට ඒකාබද්ධ කරයි. "එහි පෙරනිමි ප්‍රකාරයේදී, git pullඑය git fetchඅනුගමනය කිරීම සඳහා කෙටිමං වේ git merge FETCH_HEAD."


18
පුද්ගලයින්, විවිධ තීරු සමඟ අන්තර් ක්‍රියා කිරීමට සබැඳිය ක්ලික් කරන්න. එක් එක් විධානය අතර ඇති වෙනස්කම් සම්පූර්ණයෙන් වටහා ගැනීම සඳහා මා දුටු හොඳම සම්පත මෙම වංචා පත්‍රිකාවයි.
එම්. ලුයිසා කැරියන්

මෙම පිළිතුර ඉහළට යා යුතුය
ටෙසරැක්ටර්

126

පාරිතෝෂිකය:

ඉහත පිළිතුරු වල අදින්න සහ ලබා ගැනීම ගැන කථා කිරීමේදී, මම සිත්ගන්නා උපක්‍රමයක් බෙදා ගැනීමට කැමතියි,

git pull --rebase

මෙම ඉහත විධානය මගේ git ජීවිතයේ වඩාත්ම ප්‍රයෝජනවත් විධානය වන අතර එය බොහෝ කාලයක් ඉතිරි කර ඇත.

ඔබගේ නව කොමිස් සේවාදායකයට තල්ලු කිරීමට පෙර, මෙම විධානය උත්සාහ කරන්න, එය ස්වයංක්‍රීයව නවතම සේවාදායක වෙනස්කම් සමමුහුර්ත කරයි (ලබා ගැනීම + ඒකාබද්ධ කිරීම සමඟ) සහ ඔබගේ කැපවීම ඉහළින්ම git ලොගයේ තබයි. අතින් අදින්න / ඒකාබද්ධ කිරීම ගැන කරදර විය යුතු නැත.

විස්තර සොයන්න: http://gitolite.com/git-pull--rebase


4
කදිම ඉඟිය, නව git භාවිතා කරන්නන්ට නැවත සකස් කිරීම කැපකිරීමේ හැෂ් වෙනස් කිරීම ගැන සඳහන් කිරීම වටී.
ඇලෙක්ස්මා

1
git pullසහ අතර වෙනස කුමක්දැයි ඔබට පැහැදිලි කළ හැකිද git pull --rebase?
shaijut

2
ඉහත පිළිතුරෙන් මෙම ක්‍රමය පිළිබඳ තදබල

118

මේ දේවල් ග්‍රහණය කර ගැනීම සඳහා තත්වය පිළිබඳ දෘශ්‍ය නිරූපණයක් ලබා ගැනීමට මම කැමතියි. සමහර විට වෙනත් සංවර්ධකයින් එය දැකීමට කැමති වනු ඇත, එබැවින් මෙන්න මගේ එකතු කිරීම. ඒ සියල්ල නිවැරදි යැයි මට සම්පුර්ණයෙන්ම විශ්වාස නැත, එබැවින් ඔබට කිසියම් වැරැද්දක් ඇත්නම් කරුණාකර අදහස් දක්වන්න.

                                         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's   .
                  .
                  .
FETCH  *------------------>*
Your local cache of the remote is updated with the origin (or multiple
external sources, that is git's 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.

දුරස්ථයේ කැඩපතක් ලබා ගැනීමේ ප්‍රධාන වාසි කිහිපයක් නම්:

  • කාර්ය සාධනය (ජාලය හරහා මිරිකීමට උත්සාහ නොකර සියලු කොමිස් සහ පණිවිඩ හරහා අනුචලනය කරන්න)
  • ඔබගේ දේශීය ගබඩාවේ තත්වය පිළිබඳ ප්‍රතිපෝෂණය (නිදසුනක් ලෙස, මම ඇට්ලේෂියන්ගේ මූලාශ්‍රය භාවිතා කරමි, එය මූලාරම්භයට සාපේක්ෂව මම ඉදිරියෙන් හෝ පසුපසට ගියද යන්න දැක්වෙන බල්බයක් ලබා දෙනු ඇත. මෙම තොරතුරු GIT FETCH සමඟ යාවත්කාලීන කළ හැකිය).

එය කරන්නේ නැහැ git pullද එනම් වැඩ කරන පිටපතක් කිරීමට සියලු ආකාරයෙන් යනවා, ඇත්තටම ඉටු?
කමියෙල් වන්රූයිජ්

හොඳ කරුණක්, ඔව්, එය ඔබගේ වැඩ කරන පිටපතෙහි සියලු වෙනස්කම් සිදු කරනු ඇත, එවිට ඔබට එය දේශීය ගබඩාවට භාර දිය හැකිය. මම දෘශ්‍ය යාවත්කාලීන කරමි.
ජස්ටස් රොමිජන්

UstJustusRomijn අදින්න දේශීය ගබඩාව යාවත්කාලීන කරන්නේ නැද්ද? මූලාරම්භය සහ වැඩ කරන පිටපත් තරු අතර තරු ලකුණක් තිබිය යුතු නොවේද?
user764754

2
pull user764754 ඔබ අදින විට, ඔබේ වැඩ කරන පිටපතෙහි වෙනස්කම් ලැබෙනු ඇත (ඔබට විසඳීමට අවශ්‍ය විය හැකි ගැටුම් ද තිබිය හැකිය). ඔබ තවමත් එය ඔබේ දේශීය ගබඩාවට බැඳිය යුතුය.
ජස්ටස් රොමිජන්

Ust ජුස්ටස් රොමිජන්: නිදර්ශනයට ස්තූතියි. නැවත සැකසීම, නිධියෙහි ඇති චෙරි පික් වැනි මෙහෙයුම් වල බලපෑම නිදර්ශනය කිරීමෙන් ඔබට රූප සටහන වඩාත් පුළුල් කළ හැකි නම් එය ඉතා හොඳ වේ.
jith912

106

මමත් මේ සමඟ පොරබදා තිබෙනවා. ඇත්ත වශයෙන්ම මම මෙහි පැමිණියේ හරියටම එකම ප්‍රශ්නය ගූගල් සෙවුමකින්. මේ සියලු පිළිතුරු කියවීමෙන් අවසානයේ මගේ හිසෙහි පින්තූරයක් පින්තාරු කර ඇති අතර, ගබඩාවල 2 සහ 1 වැලිපිල්ලේ තත්වය සහ ඒවායේ අනුවාදය නරඹමින් කාලයත් සමඟ සිදු කරන ලද ක්‍රියාකාරකම් දෙස බැලීමට මෙය තීරණය කිරීමට මම තීරණය කළෙමි. ඉතින් මෙන්න මම ආපු දේ. මා කොතැනක හෝ අවුල් වී ඇත්නම් කරුණාකර මාව නිවැරදි කරන්න.

ලබා ගැනීමක් සහිත නිධි තුන:

---------------------     -----------------------     -----------------------
- 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+               -
---------------------     -----------------------     -----------------------

අදින්නන් තිදෙනා අදින්න

---------------------     -----------------------     -----------------------
- 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+               -
---------------------     -----------------------     -----------------------

ලබා ගැනීම ඉතා වැදගත් වන්නේ ඇයිද යන්න තේරුම් ගැනීමට මෙය මට උදව් විය.


කියවීමට එතරම් අපහසු නැත: කොටු නිරූපණය කරන්නේ රෙපෝ එකක තත්වයයි, එක් එක් පේළියේ කොටුවේ 2 වන පේළියේ වාර්තා වූ මෙහෙයුමෙන් පසු වමේ සිට දකුණට වෙනස් වේ. R0n ලේබල් git හි ටැග් වන අතර + + සහිත ටැගයක් තවමත් සම්මුති විරහිත දේවල් වේ. ඔබගේ වැඩකරන ෆෝල්ඩරය සඳහා සැන්බොක්ස් භාවිතා කරනු ලැබේ, එය රෙපෝ ෆෝල්ඩරයට වඩා වෙනස් වන අතර, කැපවූ දේවල් ගබඩා කර ඇත.
user1708042

96

GIT Fetch සහ GIT Pull අතර වෙනස පහත දැක්වෙන අවස්ථාව සමඟ පැහැදිලි කළ හැකිය: (පින්තූර වචනවලට වඩා හයියෙන් කථා කරන බව මතක තබා ගන්න! මම රූපමය නිරූපණය ලබා දී ඇත)

ඔබ ඔබේ කණ්ඩායම් සාමාජිකයන් සමඟ ව්‍යාපෘතියක වැඩ කරන බවට උදාහරණයක් බලමු. එබැවින් ඔවුන්ගේ ව්‍යාපෘතියේ එක් ප්‍රධාන ශාඛාවක් වනු ඇති අතර සියලුම දායකයින් එය ඔවුන්ගේම දේශීය ගබඩාවට යොමු කළ යුතු අතර පසුව මොඩියුල වෙනස් කිරීමට / එකතු කිරීමට මෙම ප්‍රාදේශීය ශාඛාවේ වැඩ කළ යුතු අතර පසුව ප්‍රධාන ශාඛාවට තල්ලු කළ යුතුය.

ඒ නිසා, මූලික රාජ්ය අතු දෙකක් ඔබ බෙදුනු විට ඔබේ දේශීය නිධිය මත ප්රධාන ව්යාපෘතිය this- හා සමාන වනු ඇත ( A, Bසහ Cමෙම ව්යාපෘතියේ මේ වන විටත් අවසන් ෙම ල)

රූප විස්තරය මෙහි ඇතුළත් කරන්න

දැන්, ඔබට නව මොඩියුලය මත වැඩ ආරම්භ කර ඇත (සිතමු D) සහ ඔබ සම්පූර්ණ කර ඇති විට Dඔබ ප්රධාන ශාඛාව වෙත තල්ලු කිරීමට අවශ්ය මොඩියුලය, එහෙත්, මේ අතර සිද්ධ වෙන්නේ මොකක්ද ඔබේ කණ්ඩායම් මිතුරන්ගේ එක් නව මොඩියුලය වර්ධනය වී ඇති බව ය E, Fහා වෙනස් C.
දැන් සිදුවී ඇති දෙය නම් ව්‍යාපෘතියේ මුල් ප්‍රගතිය පිටුපස ඔබේ දේශීය ගබඩාව නොමැති වීම සහ එමඟින් ඔබේ වෙනස්වීම් ප්‍රධාන ශාඛාවට තල්ලු කිරීම ගැටුමකට තුඩු දිය හැකි අතර ඔබේ මොඩියුලය Dක්‍රියා විරහිත වීමට හේතු විය හැක .

රූප විස්තරය මෙහි ඇතුළත් කරන්න

එවැනි ගැටළු මඟහරවා ගැනීම සහ ව්‍යාපෘතියේ මුල් ප්‍රගතියට සමගාමීව කටයුතු කිරීම ක්‍රම දෙකකි:

1. Git Fetch- මෙය ඔබේ ප්‍රාදේශීය ශාඛාවේ නොමැති මූලාරම්භක / ප්‍රධාන ශාඛා ව්‍යාපෘතියේ සිදු කර ඇති සියලුම වෙනස්කම් බාගත කරනු ඇත. ඔබේ ගබඩාවට හෝ ශාඛාවට ලබා දී ඇති වෙනස්කම් Git Merge විධානය සඳහා බලා සිටිනු ඇත.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

එබැවින් දැන් ඔබට ඔබේ ගබඩාවට ඒකාබද්ධ කිරීමට පෙර එය ප්‍රවේශමෙන් නිරීක්ෂණය කළ හැකිය. Dනවීකරණය කරන ලද නිසා අවශ්‍ය නම් ඔබට වෙනස් කළ හැකිය C.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

2. Git Pull- මෙය ඔබේ දේශීය ශාඛාව මූලාරම්භය / ප්‍රධාන ශාඛාව සමඟ යාවත්කාලීන කරනු ඇත, එනම් ඇත්ත වශයෙන්ම එය කරන්නේ Git Fetch සහ Git එකිනෙක ඒකාබද්ධ කිරීමයි. නමුත් මෙය ගැටුම් ඇතිවීමට හේතු විය හැක, එබැවින් පිරිසිදු පිටපතක් සමඟ Git Pull භාවිතා කිරීම රෙකමදාරු කරනු ලැබේ.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1
ඔබට 'ප්‍රධාන ශාඛාව' 'දුරස්ථ රෙපෝ' ලෙස වෙනස් කළ හැකි නම්, එය හොඳ පිළිතුරකි.
Qibiron Who

87

අපි සරලව කියන්නේ:

git pull == git fetch + git merge

ඔබ ධාවනය කරන්නේ නම් git pull, දත්ත දේශීයව ඒකාබද්ධ කිරීම අවශ්‍ය නොවේ. ඔබ ධාවනය කරන්නේ නම් git fetch, එයින් අදහස් වන්නේ git mergeඔබේ දේශීය යන්ත්‍රයට නවතම කේතය ලබා ගැනීම සඳහා ඔබ ධාවනය කළ යුතු බවයි. එසේ නොමැතිනම්, දේශීය යන්ත්‍ර කේතය ඒකාබද්ධ කිරීමකින් තොරව වෙනස් නොවේ.

එබැවින් Git Gui හි, ඔබ ලබා ගැනීමේදී, දත්ත ඒකාබද්ධ කළ යුතුය. ලබා ගැනීම ඔබේ දේශීය කේත වෙනස් නොකරයි. ඔබ කේතය යාවත්කාලීන කළ විට එය ලබාගෙන බැලූ විට එය පරීක්ෂා කළ හැකිය; කේතය එය වෙනස් නොවේ. එවිට ඔබ ඒකාබද්ධ වේ ... වෙනස් කළ කේතය ඔබට පෙනෙනු ඇත.


3
මම කියන්න කැමතියි git pull == git fetch + git merge:)
melvynkim

2
නමුත්git pull --rebase = git fetch + git rebase
ටිනෝ

83

git fetchඔබේ දේශීය ගබඩාවේ ඇති දුරස්ථ සේවාදායකයේ සිට ඔබේ ලුහුබැඳීමේ ශාඛා වෙත කේතය පහළට ඇද දමයි. ඔබගේ දුරස්ථ ලෙස නම් කර තිබේ නම්, origin(ප්රකෘතිය), පසුව මෙම බැංකු ශාඛා තුළ වනු ඇත origin/උදාහරණයක් ලෙස, origin/master, origin/mybranch-123, ආදිය මෙම ඔබේ වත්මන් ශාඛා නොවේ, ඔවුන් දේශීය සේවාදායකය වෙතින් ඒ අතු පිටපත්.

git pullඑය කරන්නේ git fetchනමුත්, පසුව, හඹායෑම් ශාඛා සිට බව ශාඛාව ඔබේ වත්මන් දේශීය අනුවාදය බවට කේතය සමනල අඩවියෙන්. ඔබ තවමත් එම වෙනස්කම් සඳහා සූදානම් නැතිනම්, git fetchපළමුව.


78

git fetchදුරස්ථ ශාඛා ලබා ගන්නා අතර එමඟින් ඔබට git diffහෝ git mergeවර්තමාන ශාඛාව සමඟ ඒවා කළ හැකිය . git pullවත්මන් ශාඛාව විසින් නිරීක්ෂණය කරන ලද දුරස්ථ වරහන ලබා ගැනීම ක්‍රියාත්මක කර ප්‍රති .ලය ඒකාබද්ධ කරයි. git fetchඔබේ ප්‍රාදේශීය ශාඛාව සමඟ ඒකාබද්ධ කිරීමකින් තොරව දුරස්ථ ශාඛාවට යාවත්කාලීන කිරීම් තිබේදැයි බැලීමට ඔබට භාවිතා කළ හැකිය.


73

Git Fetch

ඔබ ඔබේ ප්‍රාදේශීය ශාඛාවේ වෙනස්කම් ආරම්භයේ සිට ලබා ගැනීම හරහා බාගත කරයි. අනෙක් අය විසින් සිදු කරන ලද සියලු කොමිස් සඳහා දුරස්ථ repo එක ලබා ගැනීමට Fetch ඉල්ලයි. මෙම කොමිස් බාගත කර ඒවා දේශීය ගබඩාවට එක් කරයි.

Git ඒකාබද්ධ කරන්න

ඒකාබද්ධ කිරීමේ විධානය භාවිතා කර ලබා ගැනීම හරහා බාගත කළ වෙනස්කම් යෙදිය හැකිය. ඒකාබද්ධ කිරීමෙන් ලබා ගත් කොමිස් ලබා ගෙන ඒවා ඔබේ ප්‍රාදේශීය ශාඛාවට එක් කිරීමට උත්සාහ කරනු ඇත. ඒකාබද්ධ කිරීම මඟින් ඔබේ දේශීය වෙනස්කම් වල කැපවීමේ ඉතිහාසය තබා ගන්නා අතර එමඟින් ඔබ ඔබේ ශාඛාව තල්ලුව සමඟ බෙදා ගන්නා විට, ඔබගේ වෙනස්කම් අනෙක් අයට ඒකාබද්ධ කළ හැකි ආකාරය Git දැන ගනී.

Git Pull

ලබා ගැනීම සහ ඒකාබද්ධ කිරීම බොහෝ විට ප්‍රමාණවත් වන අතර ඒ දෙක, අදින්න, ඒකාබද්ධ කරන විධානයක් නිර්මාණය විය. අදින්න ඔබේ ප්‍රාදේශීය ශාඛාවට එකතු කිරීම සඳහා අදින්න.


51

අතර ඇති එකම වෙනස git pullහා git fetch: බව ය

git pull දුරස්ථ ශාඛාවකින් ඇද එය ඒකාබද්ධ කරයි.

git fetch දුරස්ථ ශාඛාවෙන් පමණක් ලබා ගන්නා නමුත් එය ඒකාබද්ධ නොවේ

එනම් git pull = git fetch + git merge ...


1
ඔබ කොමිස් පිටුපසින් සිටින බවත්, "වේගයෙන් ඉදිරියට යා හැකි" බවත් ගිට් සිතන්නේ නම් උදව් නොකරන්න, එය මම සියල්ල අවසන් කර නැවත ආරම්භ කළෙමි rm -rf. මෝඩ Git, කරුණාකර මට ධාරාව ලබා ගැනීමට ඉඩ දෙන්න එවිට මට නැවත වැඩට යා හැකිද?
ක්‍රිස් කේ

47

සරලව කිවහොත්, ඔබ කිසිදු අන්තර්ජාල සම්බන්ධතාවයක් නොමැතිව ගුවන් යානයකට නැගීමට සූදානම් නම් ... පිටත්ව යාමට පෙර ඔබට කළ හැකිය git fetch origin <master> . එය ඔබගේ පරිගණකයට සියලු වෙනස්කම් ගෙන එනු ඇත, නමුත් එය ඔබේ ප්‍රාදේශීය සංවර්ධනයෙන් / වැඩබිමෙන් වෙන්ව තබයි.

ගුවන් යානයෙන්, ඔබට ඔබේ දේශීය වැඩබිමෙහි වෙනස්කම් සිදු කළ හැකි අතර පසුව ඔබ ලබාගත් දේ සමඟ එය ඒකාබද්ධ කර අන්තර්ජාලයට සම්බන්ධ නොවී ඒකාබද්ධ වීමේ ගැටුම් නිරාකරණය කළ හැකිය. යමෙකු දුරස්ථ ගබඩාවට නව පරස්පර වෙනස්කම් සිදු නොකළේ නම් ඔබ ගමනාන්තයට පැමිණි පසු ඔබ කළ යුතු දේ git push origin <branch>සහ කෝපි ලබා ගන්න.


මෙම පුදුමාකාර ඇට්ලේෂියන් නිබන්ධනයෙන් :

එම git fetch විධානය බාගත කිරීම් අනාචාරයේ, ගොනු, සහ ඔබේ දේශීය ගබඩාව බවට දුරස්ථ ගබඩාව සිට ආශ්රේයන්.

ලබා ගැනීම යනු අනෙක් සියල්ලන්ම වැඩ කර ඇති දේ බැලීමට ඔබට අවශ්‍ය වූ විට ඔබ කරන දෙයයි . එය SVN යාවත්කාලීනයට සමානය, එය මධ්‍යම ඉතිහාසය ප්‍රගතියක් ලබා ඇති ආකාරය බැලීමට ඔබට ඉඩ සලසයි, නමුත් වෙනස්කම් ඇත්ත වශයෙන්ම ඔබේ ගබඩාවට ඒකාබද්ධ කිරීමට එය බල නොකරයි. පවත්නා දේශීය අන්තර්ගතයෙන් ලබාගත් අන්තර්ගතයන් Git හුදකලා කරයි , එය ඔබගේ ප්‍රාදේශීය සංවර්ධන කටයුතු කෙරෙහි කිසිදු බලපෑමක් ඇති නොකරයි . ලබාගත් අන්තර්ගතය git checkoutවිධානය භාවිතා කර පැහැදිලිව පරීක්ෂා කළ යුතුය . ඔබගේ දේශීය ගබඩාව සමඟ ඒකාබද්ධ කිරීමට පෙර කොමිස් සමාලෝචනය කිරීමට මෙය ආරක්ෂිත ක්‍රමයක් ලබා දෙයි.

දුරස්ථ ගබඩාවකින් අන්තර්ගතය බාගත කිරීමේදී, git pullසහ git fetchකාර්යය ඉටු කිරීම සඳහා විධාන තිබේ. git fetchවිධාන දෙකේ 'ආරක්ෂිත' අනුවාදය ඔබට සලකා බැලිය හැකිය . එය දුරස්ථ අන්තර්ගතය බාගත කරනු ඇත, නමුත් ඔබේ දේශීය ගබඩාවේ වැඩ කරන තත්ත්වය යාවත්කාලීන නොකොට, ඔබගේ වර්තමාන කාර්යය එලෙසම ඉතිරි වේ. git pullවඩාත් ආක්‍රමණශීලී විකල්පය නම්, එය සක්‍රීය දේශීය ශාඛාව සඳහා දුරස්ථ අන්තර්ගතය බාගත git mergeකර නව දුරස්ථ අන්තර්ගතය සඳහා ඒකාබද්ධ කිරීමේ බැඳීමක් ඇති කිරීමට වහාම ක්‍රියාත්මක වේ. ඔබ සතුව ප්‍රගතියේ වෙනස්කම් තිබේ නම් මෙය ගැටුම් ඇති කරන අතර ඒකාබද්ධ ගැටුම් නිරාකරණ ප්‍රවාහය ආරම්භ කරයි.


සමග git pull:

  • ඔබට හුදෙකලා වීමක් ලැබෙන්නේ නැත.
  • එය ඔබේ ප්‍රාදේශීය සංවර්ධනයට බලපායි.
  • එය පැහැදිලිව පරීක්ෂා කිරීම අවශ්‍ය නොවේ. එය ව්‍යංගයෙන් අ git merge.
  • එය මූලික වශයෙන් ආරක්ෂිත නොවේ. එය ආක්‍රමණශීලී ය.
  • git fetchඑය ඔබට පමණක් බලපාන තැන මෙන් නොව .git/refs/remotes, git අදින්න ඔබගේ සහ දෙකටම බලපායි.git/refs/remotes .git/refs/heads/

හ්ම් ... ඉතින් මම වැඩ කරන පිටපත යාවත්කාලීන නොකරන්නේ නම්, මම git fetchවෙනස්කම් කරන්නේ කොහේද? Git ලබා ගැනීම නව කොමිස් ගබඩා කරන්නේ කොහෙන්ද?

නියම ප්‍රශ්නය. එය ඔබගේ වැඩ කරන පිටපතෙන් කොතැනක හෝ හුදෙකලා වේ. නමුත් නැවතත් කොහෙද? අපි සොයා බලමු.

ඔබගේ ව්‍යාපෘති නාමාවලියෙහි (එනම්, ඔබ ඔබේ gitවිධානයන් කරන තැන) කරන්න:

  1. ls. මෙය ගොනු සහ නාමාවලි පෙන්වනු ඇත. කිසිවක් සිසිල් නැත, මම දනිමි.

  2. දැන් කරන්න ls -a. මෙය තිත් ලිපිගොනු පෙන්වනු ඇත , එනම්, .ඔබ සමඟ ආරම්භ වන ලිපිගොනු පසුව නාමාවලියක් දැකගත හැකිය : .git.

  3. කරන්න cd .git. මෙය පැහැදිලිවම ඔබගේ නාමාවලිය වෙනස් කරනු ඇත.
  4. දැන් විනෝදජනක කොටස පැමිණේ; කරන්න ls. ඔබට නාමාවලි ලැයිස්තුවක් පෙනෙනු ඇත. අපි සොයනවා refs. කරන්න cd refs.
  5. සියලුම නාමාවලිවල ඇති දේ දැකීම සිත්ගන්නා කරුණකි, නමුත් අපි ඒවා දෙකක් කෙරෙහි අවධානය යොමු කරමු. headsසහ remotes. ඔවුන් තුළද cdපරීක්ෂා කිරීමට භාවිතා කරන්න .
  6. git fetchඔබ කරන ඕනෑම දෙයක් /.git/refs/remotesනාමාවලියෙහි අයිතම යාවත්කාලීන කරනු ඇත . එය /.git/refs/headsනාමාවලියෙහි කිසිවක් යාවත්කාලීන නොකරනු ඇත .
  7. ඕනෑම අයෙකු git pull පළමුව එය කරනු ඇතgit fetch , /.git/refs/remotesඩිරෙක්ටරියේ අයිතම යාවත්කාලීන කර , පසුව ඔබේ දේශීය සමඟ ඒකාබද්ධ කර /.git/refs/headsඩිරෙක්ටරිය තුළ හිස වෙනස් කරයි .

ඉතා හොඳ සම්බන්ධිත පිළිතුරක් ද 'git fetch' ස්ථානයෙන් සොයාගත හැකිය. .

එසේම, Git ශාඛා නම් කිරීමේ සම්මුති තනතුරෙන් "කප්පාදු අංකනය" සොයා බලන්න . Git විවිධ ඩිරෙක්ටරි වල දේවල් ස්ථානගත කරන්නේ කෙසේද යන්න වඩා හොඳින් තේරුම් ගැනීමට එය ඔබට උපකාරී වේ.


සැබෑ වෙනස බැලීමට

කරන්න:

git fetch origin master
git checkout master

දුරස්ථ මාස්ටර් යාවත්කාලීන කළේ නම් ඔබට මෙවැනි පණිවිඩයක් ලැබෙනු ඇත:

Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

ඔබ එසේ නොකළේ නම් fetchසහ git checkout masterකොමිස් 2 ක් එකතු කර ඇති බව ඔබේ දේශීය ගිටාරය නොදනී. එය මෙසේ කියනු ඇත:

Already on 'master'
Your branch is up to date with 'origin/master'.

නමුත් එය යල් පැන ගිය හා වැරදිය. එයට හේතුව git ඔබට දන්නා දේ මත පදනම්ව ප්‍රතිපෝෂණය ලබා දෙන බැවිනි. එය තවමත් පහතට බැස නැති නව කොමිස් ගැන නොසලකා හැරේ ...


දේශීයව ශාඛාවේ වැඩ කරන අතරතුර දුරස්ථව සිදුකරන ලද නව වෙනස්කම් දැකීමට ක්‍රමයක් තිබේද?

සමහර IDEs (උදා: Xcode) සුපිරි ස්මාර්ට් වන අතර a හි ප්‍රති result ලය භාවිතා කරන git fetchඅතර ඔබේ වර්තමාන වැඩකරන ශාඛාවේ දුරස්ථ ශාඛාවේ වෙනස් කර ඇති කේත රේඛා විවරණය කළ හැකිය. එම රේඛාව දේශීය වෙනස්වීම් සහ දුරස්ථ ශාඛා දෙකෙන්ම වෙනස් කර ඇත්නම්, එම රේඛාව රතු පැහැයෙන් විවරණය වේ. මෙය ඒකාබද්ධ කිරීමේ ගැටුමක් නොවේ. එය විභව ඒකාබද්ධ කිරීමේ ගැටුමකි. git pullදුරස්ථ ශාඛාවෙන් සිදු කිරීමට පෙර අනාගත ඒකාබද්ධ කිරීමේ ගැටුම නිරාකරණය කිරීමට ඔබට භාවිතා කළ හැකි හෙඩ්සප් එකකි .

රූප විස්තරය මෙහි ඇතුළත් කරන්න


විනෝදජනක ඉඟිය:

ඔබ දුරස්ථ ශාඛාවක් ලබා ගත්තේ නම් උදා:

git fetch origin feature/123

එවිට මෙය ඔබගේ දුරස්ථ නාමාවලියට යයි. එය තවමත් ඔබේ දේශීය නාමාවලියට ලබා ගත නොහැක. කෙසේ වෙතත්, එය ඔබගේ දුරස්ථ ශාඛාවට DWIM විසින් ඔබගේ පිටවීම සරල කරයි (මා අදහස් කරන දේ කරන්න):

git checkout feature/123

ඔබට තවදුරටත් කිරීමට අවශ්‍ය නැත:

git checkout -b feature/123 origin/feature/123

වැඩි විස්තර සඳහා මෙහි කියවන්න


1
මම මෙම පිළිතුරට කැමතියි
Kid_Learning_C

44

අළුත් කළ පසු කාලානුක්‍රමිකව පැරණි කොමිස් යෙදීමට Git ඉඩ දෙයි. මේ හේතුව නිසා, ගබඩාවන් අතර කොමිස් මාරු කිරීමේ ක්‍රියාව පියවර දෙකකට බෙදා ඇත:

  1. දේශීය දුරස්ථ ශාඛාව තුළ මෙම දුරස්ථ ශාඛාවේ පිටපත සඳහා දුරස්ථ ශාඛාවෙන් නව කොමිස් පිටපත් කිරීම.

    (repo to repo operation) master@remote >> remote/origin/master@local

  2. ප්‍රාදේශීය ශාඛාවට නව කොමිස් ඒකාබද්ධ කිරීම

    (ඇතුළත-රෙපෝ මෙහෙයුම) remote/origin/master@local >> master@local

පියවර 2 කිරීමට ක්‍රම දෙකක් තිබේ. ඔබට පුළුවන්:

  1. අන්තිම පොදු මුතුන් මිත්තෙකුගෙන් පසු දේශීය ශාඛාව වෙත ගොස් දේශීය ගබඩාවට ආවේණික වූ කොමිස් වලට සමාන්තරව නව කොමිස් එකතු කරන්න.
  2. අන්තිම පොදු මුතුන් මිත්තන්ට පසුව නව කොමිස් ඇතුළු කර දේශීය ගබඩාවට අනන්‍ය වූ අයදුම්පත් නැවත යොදන්න.

දී gitපාරිභාෂික ශබ්ද මාලාව පියවර 1 git fetch, පියවර 2 වේ git mergeහෝgit rebase

git pullයනු git fetchසහgit merge


37

Git විධාන දෙකක් භාවිතා කරමින් දුරස්ථ සිට දේශීය දක්වා නවතම අනුවාදයේ ශාඛාව ලබා ගනී:

  1. git fetch: දුරස්ථ සිට දේශීය දක්වා Git නවතම අනුවාදය ලබා ගැනීමට යන්නේ, නමුත් එය ස්වයංක්‍රීයව ඒකාබද්ධ නොවේ.      git fetch origin master git log -p master..origin/master git merge origin/master

         ඉහත විධානයන්හි අර්ථය වන්නේ ප්‍රධාන ශාඛාවේ නවතම අනුවාදය දුර සිට සිට ප්‍රධාන ශාඛාව දක්වා බාගත කිරීමයි. ඉන්පසු දේශීය ප්‍රධාන ශාඛාව හා සම්භවය ප්‍රධාන ශාඛාව සංසන්දනය කරයි. අවසාන වශයෙන්, ඒකාබද්ධ කරන්න.

  2. git pull: Git දුරස්ථයෙන් නවතම අනුවාදය ලබාගෙන දේශීයව ඒකාබද්ධ කිරීමට යයි.

        git pull origin master

         ඉහත විධානය සමාන git fetchහා සහ git mergeවේ. ප්‍රායෝගිකව, git fetchසමහර විට වඩාත් ආරක්ෂිත වන්නේ ඒකාබද්ධ වීමට පෙර අපට වෙනස්කම් දැකගත හැකි අතර ඒකාබද්ධ කළ යුතුද යන්න තීරණය කළ හැකි බැවිනි.


37

git pullසහ අතර ඇති වෙනස git fetchකුමක්ද?

මෙය වටහා ගැනීම සඳහා, ඔබේ දේශීය ගබඩාව ඔබේ දේශීය ගබඩාව පමණක් නොව දුරස්ථ ගබඩාවේ දේශීය පිටපතක් ද පවත්වාගෙන යන බව ඔබ මුලින්ම තේරුම් ගත යුතුය.

git fetchඔබගේ දුරස්ථ ගබඩාවේ දේශීය පිටපත යාවත්කාලීනව ගෙන එයි. උදාහරණයක් ලෙස, ඔබේ දුරස්ථ නිධිය GitHub නම් - දුරස්ථ ගබඩාවේ සිදුකරන ලද යම් වෙනසක් ඔබගේ දේශීය පිටපතට දුරස්ථ ගබඩාවට ගෙන ඒමට ඔබට අවශ්‍ය විය හැකිය. සංසන්දනය කිරීම හෝ ඒකාබද්ධ කිරීම වැනි මෙහෙයුම් සිදු කිරීමට මෙය ඔබට ඉඩ සලසයි.

git pullඅනෙක් අතට දුරස්ථ ගබඩාවේ ඇති වෙනස්කම් ඔබ ඔබේ කේතය තබා ගන්නා ස්ථානයට ගෙන එනු ඇත. සාමාන්යයෙන්, git pullයම් කරන්නේ git fetchමේ දක්වා දුරස්ථ ගබඩාව දක්වා දේශීය පිටපතක් ගෙන ඒමට ප්රථම, ඉන්පසු එය ඔබගේ ම කේතය ගබඩාව හා ඇතැම් ඔබගේ ක්රියාකාරී පිටපතක් බවට වෙනස්වීම් ඒකාබද්ධ වනු ඇත.


35

git pull == (git fetch + git merge)

git fetch දේශීය ශාඛාවලට වෙනස් නොවේ.

අපේක්ෂිත ව්‍යාපෘතිය සඳහා දුරස්ථ සැකසුමක් සහිත දේශීය ගබඩාවක් ඔබ සතුව තිබේ නම්, ඔබට දැනට පවතින දුරස්ථය සඳහා සියලු ශාඛා සහ ටැග් ලබා ගත හැකිය. ... දේශීය ශාඛාවල කිසිදු වෙනසක් සිදු නොකෙරේ, එබැවින් ඔබට අලුතින් ලබා ගත හැකි වෙනස්කම් ඇතුළත් කිරීම සඳහා දුරස්ථ ශාඛාවක් යුගලනය කළ දේශීය ශාඛාවක් සමඟ ඒකාබද්ධ කිරීමට අවශ්‍ය වේ. ගිතූබ් සිට


34

පැහැදිලි හා සරල වීමට උත්සාහ කිරීම.

මෙම GIT අදින්න විධානය ඇත්තටම වේ shortcutසඳහා GIT බෝගයන්ගේ විසින් අනුගමනය GIT ඒකාබද්ධ හෝ GIT rebase ඔබගේ සැකසුම් මත පදනම්ව විධාන. ඔබට ඔබේ Git නිධිය වින්‍යාසගත කළ හැකි වන අතර එමඟින් git pull යනු නැවත ලබා ගැනීමකි.


33

ආරම්භකයින් සඳහා සරල චිත්‍රක නිරූපණයක්,

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මෙහි,

git pull  

ගබඩාවෙන් කේත ලබාගෙන ඔබේ දේශීය සමඟ නැවත ප්‍රතිස්ථාපනය කරනු ඇත ... git pull මඟින් නව කොමිස් නිර්මාණය වීමේ හැකියාව ඇත.

නමුත් ඇතුළත,

git fetch

නිධිය වෙතින් කේතය ලබා ගන්නා අතර එය භාවිතා කිරීමෙන් අපි එය අතින් ප්‍රතිනිර්මාණය කළ යුතුය git rebase

උදා: මම සේවාදායක ස්වාමියාගෙන් ලබාගෙන එය මගේ ප්‍රාදේශීය මාස්ටර් වෙත නැවත ලබා දෙන්නෙමි.

1) git pull (නැවත ගෙවීම ස්වයංක්‍රීයව සිදු වේ):

git pull origin master

මෙහි මූලාරම්භය ඔබේ දුරස්ථ රෙපෝ මාස්ටර් ඔබේ ශාඛාවයි

2) git fetch (අතින් නැවත ප්‍රතිස්ථාපනය කිරීමට අවශ්‍යය):

git fetch origin master

එය ආරම්භයේ සිට සේවාදායක වෙනස්කම් ලබා ගනී. ඔබ එය තනිවම ප්‍රතිනිර්මාණය කරන තෙක් එය ඔබගේ දේශීයව පවතිනු ඇත. කේත පරික්ෂා කිරීමෙන් අපට අතින් අතින් ගැටුම් නිරාකරණය කළ යුතුය.

git rebase origin/master

මෙය දේශීයව කේතය නැවත ප්‍රතිස්ථාපනය කරයි. ඊට පෙර ඔබ නිවැරදි ශාඛාවක සිටින බව සහතික කරන්න.


හොඳ ප්‍රස්ථාරයක්, නමුත් ප්‍රස්ථාරය "ඒකාබද්ධ කරන්න" යැයි පැවසූ විට ඔබ "නැවත භාවිතා කිරීම" භාවිතා කරන්නේ මන්දැයි පැහැදිලි කිරීමට ඔබට අවශ්‍ය විය හැකිය.
ගුන්ට්‍රම් බ්ලොම් මොනිකා

2
ඒකාබද්ධ කිරීම තවත් ශාඛා බැඳීමක් නියෝජනය කරන අතර යොමු කිරීමක් ලෙස කොමිස් අඩංගු නව බැඳීමක් ඇති කරයි. නමුත් නැවත ප්‍රතිස්ථාපනය කිරීමෙන් එය නැවත ප්‍රතිස්ථාපනය කරනවාට වඩා නව බැඳීමක් ඇති නොකරනු ඇත
මොහදීන් බින් මොහොමඩ්

33

ඇත්ත වශයෙන්ම Git ඔබේම කේතයේ පිටපතක් සහ දුරස්ථ ගබඩාව පවත්වාගෙන යයි.

git fetchදුරස්ථ ගබඩාවෙන් දත්ත ලබා ගැනීමෙන් විධානය මඟින් ඔබේ දේශීය පිටපත යාවත්කාලීන කරයි. අපට මෙය අවශ්‍ය වීමට හේතුව වෙනත් අයෙකු කේතයේ යම් යම් වෙනස්කම් සිදු කර ඇති අතර ඔබට ඔබව යාවත්කාලීනව තබා ගැනීමට අවශ්‍ය වීමයි.

විධානය git pullදුරස්ථ ගබඩාවේ වෙනස්කම් ඔබ ඔබේ කේතය තබා ගන්නා ස්ථානයට ගෙන එයි. සාමාන්‍යයෙන් git pullමෙය කරන්නේ දුරස්ථ ගබඩාවේ දේශීය පිටපත යාවත්කාලීනව ගෙන ඒමට පළමුව 'git fetch' කිරීමෙනි, පසුව එය ඔබගේම කේත ගබඩාවට සහ සමහර විට ඔබේ වැඩ කරන පිටපතට වෙනස්කම් ඒකාබද්ධ කරයි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.