Git හි HEAD යනු කුමක්ද?


1050

Git ප්‍රලේඛනය වැනි දේ පවසන බව ඔබට පෙනේ

ශාඛාව සම්පූර්ණයෙන්ම HEAD සමඟ ඒකාබද්ධ කළ යුතුය.

නමුත් Git යනු HEADකුමක්ද?



Answers:


789

ඔබට HEAD "වත්මන් ශාඛාව" ලෙස සිතිය හැකිය. ඔබ ශාඛා සමඟ මාරු git checkoutවන විට, නව ශාඛාවේ කෙළවරට යොමු කිරීම සඳහා HEAD සංශෝධනය වෙනස් වේ.

කිරීමෙන් HEAD පෙන්වා දෙන දේ ඔබට දැක ගත හැකිය:

cat .git/HEAD

මගේ නඩුවේදී, ප්‍රතිදානය:

$ cat .git/HEAD
ref: refs/heads/master

ශාඛා නාමයක් හා සම්බන්ධ නොවන විශේෂිත සංශෝධනයක් වෙත HEAD වෙත යොමු විය හැකිය. මෙම තත්වය වෙන්වූ හෙඩ් ලෙස හැඳින්වේ .


54
ඉතින් git HEAD යනු සන්දර්භය මත රඳා පවතින්නේ ඔබ කුමන බ්රාන්ච් මතද, නිවැරදිද? ඊටත් වඩා, ඔබ සංවර්ධකයෙකු ලෙස? මම හිතන්නේ මම අහන්නේ, Git HEAD යනු ගබඩාවක් පුරා පැතිර ඇති ගෝලීය දෙයක්ද, නැතහොත් එක් එක් දේ සඳහා තනි පුද්ගලයෙක්ද?
bobobobo

92
@bobobobo: ඒක හරි, HEAD වත්මන් ශාඛාවට යොමු වන දර්ශකයක් වැනි ය. ඔබ වෙනත් ශාඛාවක් පරික්ෂා කරන විට, නව ශාඛාව වෙත යොමු වීමට HEAD වෙනස් වේ. වර්තමාන HEAD සෑම ගබඩාවකටම දේශීය වන අතර එම නිසා එක් එක් සංවර්ධකයා සඳහා තනි වේ.
ග්‍රෙග් හෙව්ගිල්

16
En මෙං මෙය මට උදව් කළා, එය උපකාරී වේ යැයි සිතමු
රෆායෙල්

56
AD 動靜 能量: හෙඩ් හට ඕනෑම කැපවීමකට යොමු විය හැකිය , එය ඕනෑම ශාඛාවක අවසාන කැපවීම විය යුතු නොවේ. (ශාඛාවක අවසාන බැඳීම නොවන බැඳීමක් HEAD පෙන්වා දෙන විට, එය “වෙන්වූ HEAD” වේ).
ග්‍රෙග් හෙව්ගිල්

130
පධානියා වන නොවේ "වත්මන් ශාඛා". යනු වැඩ කරන ගසෙහි වත්මන් තත්වය ආරම්භ කරන ලද බැඳීමට දෙන නමයි. වඩාත් ප්‍රායෝගිකව ගත් කල, එය පරික්‍ෂා කළ කැපවීම පිළිබඳ සංකේතාත්මක යොමු කිරීමක් ලෙස සිතිය හැකිය.
බෙන් කොලින්ස්

189

වෙනත් පුද්ගලයින් උපුටා දැක්වීමට :

හිසක් යනු හුදෙක් කැපවූ වස්තුවකට යොමු දැක්වීමකි. සෑම හිසකටම නමක් ඇත (ශාඛා නම හෝ ටැග් නම ආදිය). පෙරනිමියෙන්, මාස්ටර් නමින් හැඳින්වෙන සෑම ගබඩාවකම හිසක් ඇත. නිධියකට ඕනෑම හිස් ගණනක් අඩංගු විය හැකිය. ඕනෑම වේලාවක එක් හිසක් “වත්මන් හිස” ලෙස තෝරා ගනු ලැබේ. මෙම හිස HEAD වෙත අන්වර්ථ කර ඇත, සෑම විටම අගනගරවල ".

මෙම වෙනස සැලකිල්ලට ගන්න: “හිස” (සිම්පල්) යනු ගබඩාවේ නම් කර ඇති ඕනෑම ශීර්ෂයක් ගැන ය; “හෙඩ්” (ලොකු අකුර) යන්නෙන් අදහස් කරන්නේ දැනට ක්‍රියාකාරී හිසට පමණි. මෙම වෙනස Git ප්‍රලේඛනයේ නිතර භාවිතා වේ.

Git හි අභ්‍යන්තර ක්‍රියාකාරිත්වය ඉක්මනින් ආවරණය කරන තවත් හොඳ ප්‍රභවයක් (සහ ඒ අනුව හිස් / HEAD පිළිබඳ වඩා හොඳ අවබෝධයක්) මෙහි සොයාගත හැකිය . යොමු කිරීම් (ref :) හෝ හිස් හෝ අතු පශ්චාත්-සටහන් සටහන් ලෙස සැලකිය හැකිය. සාමාන්යයෙන් ඔවුන් අනාචාරයේ මාලාවක් අග යොමු, නමුත් ඔවුන් සමග පමණ මාරු කල හැකි git checkoutහෝ git resetආදිය


මෙයින්: "සෑම හිසකටම නමක් ඇත". “එක් හිසක්“ වත්මන් හිස ”ලෙස තෝරාගෙන ඇත. මෙම හිස HEAD වෙත අන්වර්ථ කර ඇත ". එබැවින් මම මෙයින් නිගමනය කරන්නේ “හෙඩ්” යන්නෙන් “වෙන්වූ හෙඩ්” තත්වයට යොමු නොවන බවයි.
gxyd

1
xgxyd හෙඩ් 'හිසට' යොමු නොවන්නේ නම්, එය වෙන්වූ හෙඩ් ය. එය යොමු කර ඇත්තේ ඔබ විසින් නියම කරන ලද බැඳීමේ හැඳුනුම්පත වෙතය (උදාහරණයක් ලෙස භාවිතා කරමින් git checkout HEAD~2), එය දන්නා හිසකගේ බැඳීම් හැඳුනුම්පත නොවේ. වඩාත් සවිස්තරාත්මක පැහැදිලි කිරීමක් සඳහා eagain.net/articles/git-for-computer-scientists හි ලිපිය බලන්න .
සිල්ෆීඩ්

1
Il සිල්ෆීඩ්: සාමාන්‍යයෙන් මම සිතන්නේ මෙම පිළිතුර පිළිගත් පිළිතුරට වඩා සංකල්පමය වශයෙන් වඩා හොඳ බවය (ශාඛාවක් හැඳින්වීමට කුඩා "හිස" භාවිතා කළද බොහෝ අය ව්‍යාකූල වේ). කෙසේ වෙතත්, git revertඅත්තක් කෙළවරට නොපැමිණීම සඳහා හොඳ උදාහරණයක් නොවේ, මන්ද යත් git revertනව කොමිස් කිහිපයක් නිර්මාණය කර වත්මන් ශාඛාව (නව) කෙළවරේ තබන බැවිනි.
LarsH

1
“එය දන්නා හිසකගේ බැඳීම් හැඳුනුම්පත නොවේ” - ඇත්ත වශයෙන්ම, වෙන්වූ හෙඩ් එකක් කැපවීමේ හැඳුනුම්පතකට යොමු කළ හැකි අතර එය දන්නා හිසකගේ (හෝ හිස් කිහිපයක්) බැඳීම් හැඳුනුම්පත වේ. එය වෙන් කර තැබීමට හේතුව හෙඩ් සෘජුවම යොමු වන්නේ කැපවීමේ හැඳුනුම්පතට මිස හිසට නොවේ. මෙම අනාගත හැසිරීම බලපානු ඇත commits, resetආදිය, ගේ
LarsH

1
Ar ලාර්ෂ්: වෙන් කරන ලද හෙඩ් එකක හොඳ ලක්ෂ්‍යයක් යොමු කිරීමක් වෙනුවට බැඳීම් හැඳුනුම්පතක් වෙත යොමු කරයි. .Git / HEAD බැලීමෙන් ඔබට මෙය සත්‍ය වශයෙන්ම සත්‍යාපනය කළ හැකිය. එය වෙන් කර ඇත්නම්, එය දන්නා හිසක් හා සමාන බැඳීමක් වුවද, එය බැඳීමේ හැෂ් අඩංගු වේ. එය අමුණා තිබේ නම්, එය හිසට යන මාර්ගය අඩංගු වේ (එනම් 'ref: refs / head / bob'). ආපසු හැරවීමේ විධානය සම්බන්ධයෙන් ගත් කල, අවුරුදු 8 කට පසු මම කිසි විටෙකත් එම යතුරු ලියනය අල්ලා ගත්තේ නැත. Git reset යනු යම් කැපවීමක් වෙත යොමු කිරීම සඳහා විශේෂිත හිසක් සකස් කිරීමට ඔබට ඉඩ සලසයි.
සිල්ෆීඩ්

63

හෙඩ් යනු ඔබ දැනට සිටින දේශීය ශාඛාවට යොමු කරන විශේෂ දර්ශකයක් පමණි.

සිට Pro Git පොත, පරිච්ඡේදය 3.1 Git අතු - ඉතා කෙටියෙන් කියනවා නම් ශාඛා , කොටසේ නව ශාඛාව නිර්මාණය :

ඔබ නව ශාඛාවක් නිර්මාණය කළහොත් කුමක් සිදුවේද? හොඳයි, එසේ කිරීමෙන් ඔබට එහා මෙහා යාමට නව දර්ශකයක් නිර්මාණය වේ. ඔබ නව පරීක්ෂණයක් නමින් නව ශාඛාවක් නිර්මාණය කරන බව කියමු. ඔබ මෙය කරන්නේ git branch විධානයෙනි:

$ git branch testing 

මෙය ඔබ දැනට සිටින කැපවීමෙන්ම නව දර්ශකයක් නිර්මාණය කරයි

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

ඔබ දැනට සිටින්නේ කුමන ශාඛාවදැයි Git දන්නේ කෙසේද? එය HEAD නමින් විශේෂ දර්ශකයක් තබා ගනී. උපසිරැසි හෝ සීවීඑස් වැනි ඔබ භාවිතා කළ හැකි වෙනත් VCS වල HEAD සංකල්පයට වඩා මෙය බොහෝ වෙනස් බව සලකන්න. Git හි, මෙය ඔබ දැනට සිටින දේශීය ශාඛාවට යොමු කිරීමකි. මෙම අවස්ථාවේ දී, ඔබ තවමත් ස්වාමියා ය. Git ශාඛා විධානය මඟින් නව ශාඛාවක් පමණක් නිර්මාණය කරන ලදි - එය එම ශාඛාවට මාරු නොවීය.

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


4
වෙන්වූ හෙඩ් නඩුව පෙන්වන පින්තූරයක් භාවිතා කිරීම සතුටක්
දොන් හැච්

On ඩොන් හැච්, වෙන්වූ HEAD stackoverflow.com/a/35301963/1074179
ඇලෙක්සැන්ඩර්

3
හොඳ පිළිතුරක්. ශාඛා යනු ලේබල් කරන ලද කොමිස් මිස අන් කිසිවක් නොවේ, ඔබ නව කොමිස් කරන විට, මෙම ලේබලය නව නව බැඳීම වෙත ගෙන යනු ලැබේ. ඔබ ලේබලයක් නොමැති බැඳීමක් පරීක්ෂා කර බලන විට, එය වෙන්වූ HEAD තත්වයේ පවතී. ඒ කියන්නේ HEAD යන්නෙන් පෙන්නුම් කරන්නේ ශාඛා ලේබලයක් නොමැති බැඳීමක්. 34ac2ඉහත උදාහරණයෙන් ඔබ පිටව ගියහොත් , දැන් හෙඩ් එම කැපවීමට යොමු වන අතර එය වෙන්වූ හෙඩ් ලෙස හැඳින්වේ. මෙම තත්වය තුළ, ඔබට වෙනස්කම්, අත්හදා බැලීම් සහ වෙනස්කම් සිදු කළ හැකිය, නමුත් ඔබ වෙනත් ශාඛාවක් පරික්ෂා කිරීමෙන් පසු, ඔබ නව ශාඛාවක් නිර්මාණය නොකරන්නේ නම්, ඔබගේ සියලු වෙනස්කම් ඔබට අහිමි වනු ඇත.
රුක්ෂාන් මාරපන

2
sleepsleepwalkerfx, නමුත් ඔබට ශාඛා ලේබලයක් ඇති බැඳීමක් පරීක්ෂා කර බලා තවමත් වෙන්ව පවතින ප්‍රධාන තත්වයේ සිටිය හැකි නිසා ඔබේ හෙඩ් තවදුරටත් ශාඛා ලේබලය වෙත යොමු නොවන නමුත් ශාඛාවේ කැපවීමේ හැඳුනුම්පත
මාක්

1
sleepsleepwalkerfx මම හිතන්නේ අපි මේ මොහොතේ අර්ථ නිරූපණය ගැන කතා කරනවා. ඔබ නිවැරදියි ශාඛා ලේබලය යනු යම් කැපවීමකට පෙළ යොමු කිරීමකි. කෙසේ වෙතත් එය බැඳීමක් නොවේ. එබැවින් ඔබ එය කර එවැනි git logදෙයක් ලබා ගත්තා commit ad0265... HEAD -> foo ...නම් එයින් අදහස් වන්නේ fooශාඛාව හැඳුනුම්පත කිරීම සඳහා යොමු කිරීමක් බවයි ad0265. පෙළ යොමු fooකිරීම පරීක්ෂා කිරීම වෙන් කළ හිසක් නොවේ. බැඳීම් හැඳුනුම්පත ad0265පිරික්සීමෙන් හිස වෙන් වී යනු ඇත. සමහර විට ඔබ සන්නිවේදනය කරන දේවල යම් සියුම් බවක් මට මග හැරී ඇත. මෙම පා wall යේ බිත්තිය මට අහිමි වූ ස්ථානය සොයා ගැනීමට උපකාරී වනු ඇතැයි මම බලාපොරොත්තු වෙමි.
මාක්

62

මම මෙම අර්ථ දැක්වීම ගිතුබ් සංවර්ධක ස්කොට් චකොන්ගෙන් නිර්දේශ කරමි [ වීඩියෝ යොමු කිරීම ]:

හිස යනු ඔබේ වර්තමාන ශාඛාවයි. එය සංකේතාත්මක යොමු කිරීමකි. එය ශාඛාවකට යොමු කිරීමකි. ඔබට සැමවිටම HEAD ඇත, නමුත් HEAD මෙම අනෙක් දර්ශකයන්ගෙන් එකක් වෙත යොමු වනු ඇත, ඔබ සිටින ශාඛා වලින් එකකට. එය ඔබගේ ඊළඟ කැපවීමේ මවුපියයි. එය ඔබගේ වැඩ කරන නාමාවලිය වෙත අවසන් වරට පරීක්ෂා කළ දේ විය යුතුය ... මෙය ඔබගේ වැඩ කරන නාමාවලිය කුමක් දැයි අවසන් වරට දන්නා තත්වයයි.

මුළු වීඩියෝ පටයම සමස්ත git පද්ධතියට සාධාරණ හැඳින්වීමක් ලබා දෙනු ඇත, එබැවින් කාලය තිබේ නම් ඒ සියල්ල නැරඹීමට මම ඔබට නිර්දේශ කරමි.


34
එබැවින් සැබෑ ඩෙෆ් යනු "ඔබගේ ඊළඟ
කැපවීමේ මාපිය

1
තවද "ඊළඟ ශාඛාව වෙත යොමු වන දෙය"
නිකොලස්

@nicolas - එය සත්‍ය යැයි මම නොසිතමි . HEAD හට ඕනෑම කැපවීමකට යොමු විය හැකිය, එය අනිවාර්යයෙන්ම ශාඛාවකට යොමු කිරීම අවශ්‍ය නොවේ - එය නොමැති විට, ඔබ සිටින්නේ "වෙන්වූ HEAD" මාදිලියේ ය.
scubbo

23
වීඩියෝව විශිෂ්ටයි, නමුත් අවාසනාවකට මෙන්, එය ස්ටැක් පිටාර ගැලීම සඳහා නුසුදුසු පිළිතුරක් ලබා දෙයි. අනාගතයේ දී වීඩියෝව පහත් කළහොත් කුමක් කළ යුතුද? එවිට ඔබේ සබැඳිය කිසි දෙයකට යොමු නොවනු ඇත. වඩා හොඳ පිළිතුරකට වීඩියෝවේ ස්කොට් පවසන දේවල පිටපතක් ඇතුළත් වේ.

2
ස්කොට් පවසන්නේ HEAD යනු ශාඛාවකට යොමුකරන්නෙකු බවයි. නමුත් හෙඩ්ට පැරණි කොමිස් ද පෙන්වා දිය හැකිය. මෙය අවුල් සහගතය.
Fixee

40

එය "වෙන්වූ හෙඩ්" යනුවෙන් හැඳින්වෙන විශේෂ අවස්ථාවක් නොවන බව උපකල්පනය කිරීම, එසේ නම්, ඕ'රෙයිලි ගිට් පොතේ සඳහන් පරිදි, 2 වන සංස්කරණය, පි .69, HEADමෙයින් අදහස් කරන්නේ:

HEADසෑම විටම වර්තමාන ශාඛාව පිළිබඳ නවතම කැපවීම ගැන සඳහන් කරයි. ඔබ ශාඛා වෙනස් කරන විට HEAD, නව ශාඛාවේ නවතම බැඳීම වෙත යාවත්කාලීන වේ.

නිසා

HEADවන වත්මන් ශාඛාව "තොරතුරක්" .

අපි භාවිත කළ හැකි සටහන HEADවඩාත් ම මෑත සිදු, සහ භාවිතා වෙත යොමු කිරීමට HEAD~ද ඔත්තුව පෙර සිදු, සහ HEAD~~හෝ HEAD~2එසේ පිටතට පවා මීට පෙර සිදු ලෙස, හා.


31

මෙම පිළිතුරු ගණනක, සමහර විට සියුම්, නමුත් වැදගත් වැරදි වැටහීමක් ඇත. මම හිතුවා ඒක ඉවත් කරන්න මගේ පිළිතුර එකතු කරන්න.

කුමක්ද HEAD?

හිස ඔබයි

HEADඔබගේ කැපවීමේ ඉතිහාසයේ ඔබ කොතැනක සිටියත් යොමු කරන සංකේතාත්මක යොමු කිරීමකි. ඔබ යන ඕනෑම තැනක, ඔබ කරන ඕනෑම දෙයක්, සෙවණැල්ලක් මෙන් එය ඔබව අනුගමනය කරයි. ඔබ කැපවීමක් HEADකළහොත්, ඉදිරියට යනු ඇත. ඔබ යමක් පරීක්ෂා කර බැලුවහොත්, HEADචලනය වනු ඇත. ඔබ කුමක් කළත්, ඔබ ඔබගේ කැපවීමේ ඉතිහාසයේ අළුත් තැනකට මාරු වී ඇත්නම්, ඔබ සමඟ ඉදිරියට HEADගොස් ඇත. එක් පොදු වැරදි වැටහීමකට විසඳුම් සෙවීම සඳහා: ඔබට ඔබව වෙන් කළ නොහැක HEAD. වෙන්වූ හෙඩ් තත්වය එය නොවේ. ඔබ කවදා හෝ සිතන්නේ නම්: "අනේ නෑ, මම ඉන්නේ හෙඩ් තත්වයේ! මට මගේ හිස නැති වෙලා!" මතක තබා ගන්න, එය ඔබේ හිස. හෙඩ් ඔබ ය. ඔබ හෙඩ් වෙතින් වෙන් වී නැත, ඔබ සහ ඔබේ හෙඩ් වෙනත් දෙයකින් වෙන් වී ඇත.

HEAD සමඟ සම්බන්ධ විය හැක්කේ කුමක් ද?

HEADබැඳීමක් පෙන්වා දිය හැකිය, ඔව්, නමුත් සාමාන්‍යයෙන් එය එසේ නොවේ. මට එය නැවත කියන්නට ඉඩ දෙන්න. සාමාන්‍යයෙන් කැපවීමකට HEADයොමු නොවේ. එය ශාඛා යොමු කිරීමකට යොමු කරයි. එය එම ශාඛාවට අනුයුක්ත කර ඇති අතර, ඔබ යම් යම් දේ කරන විට (උදා: commitහෝ reset), අමුණා ඇති ශාඛාව ඉදිරියට ගමන් කරයි HEAD. කබාය යටින් බැලීමෙන් ඔබට එය යොමු වන්නේ කුමක් දැයි ඔබට දැක ගත හැකිය.

cat .git/HEAD

සාමාන්‍යයෙන් ඔබට මේ වගේ දෙයක් ලැබෙනු ඇත:

ref: refs/heads/master

සමහර විට ඔබට මේ වගේ දෙයක් ලැබෙනු ඇත:

a3c485d9688e3c6bc14b06ca1529f0e78edd3f86

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

ඔබ පහත දැක්වෙන අභ්‍යාසය උත්සාහ කරන්නේ නම් ඔබට මෙය ප්‍රස්තාරිකව බැලීමට හැකිය. Git ගබඩාවක සිට මෙය ක්‍රියාත්මක කරන්න. ඔබට තරමක් වෙනස් දෙයක් ලැබෙනු ඇත, නමුත් ඒවායේ යතුරු බිටු ඇත. බැඳීම කෙලින්ම පරීක්ෂා කර බැලීමට කාලය පැමිණි විට, පළමු නිමැවුමෙන් ඔබට ලැබෙන ඕනෑම කෙටි හැෂ් එකක් භාවිතා කරන්න (මෙන්න එයයි a3c485d).

git checkout master
git log --pretty=format:"%h:  %d" -1
# a3c485d:   (HEAD -> master)

git checkout a3c485d -q # (-q is for dramatic effect)
git log --pretty=format:"%h:  %d" -1   
# a3c485d:   (HEAD, master)

හරි, එබැවින් මෙහි ප්‍රතිදානයේ කුඩා වෙනසක් ඇත. බැඳීම කෙලින්ම පරීක්ෂා කිරීමෙන් (ශාඛාව වෙනුවට) අපට ඊතලයක් වෙනුවට කොමාවක් ලබා දේ. ඔබ සිතන්නේ කුමක්ද, අප සිටින්නේ වෙන්වූ හෙඩ් තත්වයකද? HEAD තවමත් යොමු දක්වන්නේ ශාඛා නාමයක් හා සම්බන්ධ විශේෂිත සංශෝධනයකට ය. අප තවමත් ඉන්නේ මත ස්වාමියා ශාඛා, අපි නොවේ ද?

දැන් උත්සාහ කරන්න:

git status
# HEAD detached at a3c485d

නෑ. අපි ඉන්නේ 'වෙන්වූ හෙඩ්' තත්වයේ.

ඔබ එම නියෝජන බලන්න පුළුවන් (HEAD -> branch)එදිරිව (HEAD, branch)සමග git log -1.

අවසන් තීරණයේ දී

HEADඔයාද. එය ඔබ කොතැනක සිටියත් ඔබ පරීක්ෂා කළ ඕනෑම දෙයකට යොමු කරයි. සාමාන්‍යයෙන් එය බැඳීමක් නොවේ, එය ශාඛාවකි. නම් HEAD කරන්නේ ශාඛාවක් ද පෙන්නුම් එය සිදු (හෝ ටැග් එකක්) ද එය එසේ ම ය පවා නම්, සිදු (හෝ ටැග් එකක්) සඳහා ලකුණු, ඔබ (සහ HEAD) ශාඛා ඉහලට ඔසවා ඇත. ඔබට ශාඛාවක් අමුණා නැති නිසා, ඔබ නව කොමිස් කරන විට ශාඛාව ඔබ සමඟ නොයනු ඇත. HEADකෙසේ වෙතත්, එසේ වනු ඇත.


1
මම මෙම පිළිතුරට කැමතියි, මන්ද ප්‍රලේඛනය සත්‍යය විස්තර කරන අතර මෘදුකාංගය සත්‍යය අර්ථ දක්වයි. .git/HEADමෘදුකාංගය හෙඩ් ලෙස සලකයි.
දොන් බ්‍රැන්සන්

3
එහි සංකල්පීය අර්ථ දැක්වීම සඳහා පමණක් මෙය පිළිගත් පිළිතුර විය යුතුය.
ata

23

HEADඔබගේ වැඩ කරන පිටපත පෙන්වා දෙන වර්තමාන බැඳීම, එනම් ඔබ දැනට පරීක්ෂා කර ඇති බැඳීම යන්නෙන් අදහස් කෙරේ. සිට Git සංශෝධන නියම නිල ලිනක්ස් න්යෂ්ඨි ප්රලේඛනය :

HEAD වැඩ කරන ගසෙහි වෙනස්කම් ඔබ පදනම් කරගත් කැපවීම නම් කරයි.

කෙසේ වෙතත්, Git හි ඉදිරියට එන 1.8.4 අනුවාදයේ , Git දායකයා වන ජූනියෝ සී හමානෝ විසින් ඔහුගේ Git Blame බ්ලොග් අඩවියේ සඳහන් කර ඇති පරිදි , @එය කෙටිමං ලෙසද භාවිතා කළ හැකි බව සලකන්න .HEAD

"HEAD" ටයිප් කරනවා වෙනුවට ඔබට "@" යැයි පැවසිය හැකිය, උදා: "git log @".

ස්ටොක් පිටාර ගැලීමේ පරිශීලක VonC තවත් ප්‍රශ්නයකට පිළිතුරු වශයෙන් කෙටිමං ලෙස තෝරාගත්තේ ඇයිද යන්න පිළිබඳ රසවත් තොරතුරු@ කිහිපයක් සොයා ගත්තේය .

උනන්දුව ද, සමහර පරිසරයන්හි HEAD, විශේෂයෙන් සිද්ධි-සංවේදී නොවන ගොනු පද්ධති භාවිතා කරන මෙහෙයුම් පද්ධතිවල, විශේෂයෙන් වින්ඩෝස් සහ ඕඑස් එක්ස් භාවිතා කිරීම අවශ්‍ය නොවේ .


17

අතු සෑදීම සහ සෙල්ලම් කිරීම දෙස බලන්න

HEAD යනු ඇත්ත වශයෙන්ම HEAD විචල්‍යය සඳහන් වන ස්ථානය තීරණය කරන ගොනුවකි:

$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed

මෙම ගබඩාවේ, HEAD ගොනුවේ අන්තර්ගතය refs / head / master නම් දෙවන ගොනුවට යොමු වේ . ගොනුවේ refs / head / master හි ප්‍රධාන ශාඛාවේ නවතම කැපවීමේ හැෂ් අඩංගු වේ.

මෙහි ප්‍රති result ලය වන්නේ .git / refs / head / master ගොනුවෙන් ලැබෙන ප්‍රධාන ශාඛාවට HEAD ලකුණු කිරීමයි .

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


1
ප්‍රවේශම් වන්න: gitguys.com සබැඳිය නවතා ඇති වසමකට යොමු වී ඇති බව පෙනේ.
MKesper

14

ග්‍රෙග් හෙව්ගිල්ගේ පිළිගත් පිළිතුරෙහි කරුණු කිහිපයක් විස්තර කිරීමට මම කැමතියි. අනුව Git පොකට් මාර්ගෝපදේශය

ශාඛාව:

ශාඛාවම අර්ථ දැක්වෙන්නේ නම් කරන ලද බැඳීමෙන් (ශාඛාවේ “ඉඟිය”) බැඳීම් ප්‍රස්ථාරයට ළඟා විය හැකි සියලුම කරුණු ලෙස ය.

හිස: විශේෂ වර්ගයේ Ref

විශේෂ ref HEAD මඟින් ඔබ සිටින්නේ කුමන ශාඛාවේද යන්න තීරණය කරයි ...

Refs

Git විසින් යොමු කිරීම් දෙකක් අර්ථ දක්වයි, නැතහොත් නම් කරන ලද දර්ශක, එය “refs” ලෙස හැඳින්වේ:

  • සරල ref එකක්, එය සෘජුවම වස්තු හැඳුනුම්පතකට යොමු කරයි (සාමාන්‍යයෙන් බැඳීමක් හෝ ටැගයක්)
  • සංකේතාත්මක ref (හෝ සමමිතිය), එය වෙනත් ref වෙත යොමු කරයි (සරල හෝ සංකේතාත්මක)

ග්‍රෙග් සඳහන් කළ පරිදි, HEAD “වෙන්වූ තත්වයක” පැවතිය හැකිය. එබැවින් HEAD සරල ref (වෙන් කළ HEAD සඳහා) හෝ සමමිතියක් විය හැකිය.

HEAD යනු පවත්නා ශාඛාවක් සඳහා සංකේතාත්මක යොමු කිරීමක් නම්, ඔබ එම ශාඛාව “මත” ඇත. අනෙක් අතට, හෙඩ් යනු එහි SHA-1 හැඳුනුම්පත මගින් සෘජුවම බැඳීමක් නම් කිරීම සරල යොමු කිරීමක් නම්, ඔබ සිටින්නේ කිසිදු ශාඛාවක් මත නොව “වෙන්වූ හෙඩ්” ප්‍රකාරයේදී ය. පරීක්ෂා කිරීමට කැප වන්න.


ස්තූතියි, මයික්! ඔබ කලින් කළ බැඳීමක් පරීක්ෂා කළ විට කුමක් සිදුවේද යන්න පැහැදිලි කරන පළමු පිළිතුර මෙයයි. Git වෙබ් අඩවියේ ඇති පොත දෙස බලන විට මට හැඟී ගියේ “වෙන්වූ හෙඩ්” යනු ඔබ යම් ව්‍යාකූල තත්වයක් ඇති කළහොත් පමණක් ඔබ එයට ඇතුල් වූ බවයි. නමුත් කලින් කළ කැපවීමක් පරීක්ෂා කිරීම අමුතු දෙයක් නොවන අතර, ඔබ එය කරන විට, HEAD යනු "වත්මන් ශාඛාවේ ඔත්තුව" නොවේ. ඉතින් මට ඇත්තටම තේරෙනවා වගේ දැනෙන පළමු අවස්ථාව මෙයයි.
Nat Kuhn

7

මම හිතන්නේ 'හෙඩ්' යනු වර්තමාන පරීක්ෂා කිරීමේ කැපවීමයි. වෙනත් වචන වලින් කිවහොත්, 'HEAD' මඟින් දැනට පරීක්ෂා කර ඇති බැඳීම පෙන්වා දෙයි.

ඔබ දැන් ක්ලෝන කර පරීක්ෂා කර නොමැති නම්, එයින් ඇඟවෙන්නේ කුමක්දැයි මම නොදනිමි, බොහෝ විට වලංගු නොවන ස්ථානයක්.


ඔව්, විශේෂ සඳහන HEADනම් ඔබ දැනට පරීක්ෂා කර ඇති ඕනෑම කැපවීමකි. විස්තර සඳහා අත්පොත බලන්න (අදාළ ඡේදය වහාම රූපය 3.4 අනුගමනය කරයි).
කැල්රියන්

1
ඔබ නිධියක් ක්ලෝන කරන්නේ නම්, git පෙරනිමියෙන් masterශාඛාව පරීක්ෂා කරනු ඇත - එබැවින් HEAD ප්‍රධාන දෙසට යොමු වේ.
sleske

1
lesleske ඔබ විශේෂ විකල්පයක් නොමැති ගබඩාවක් ක්ලෝන කළහොත් දුරස්ථ හිස පරීක්ෂා කරනු ඇත. එය සාමාන්‍යයෙන් master, නමුත් එය සැමවිටම නොවේ. බලන්නremote set-head
ඩි නොවෝ

remote set-headදේශීය පෙරනිමි ශාඛාවට පමණක් බලපාන, සහ සේවාදායකයේ පෙරනිමිය වෙනස් නොකරන, යොමු කිරීම හැර මගේ පෙර අදහස නිවැරදි විය .
ඩි නොවෝ

5

නිවැරදි පිළිතුරු වලින් දක්වා ඇති කාරණය ගෙදර ගෙනයාමට හොඳ ක්‍රමයක් වන්නේ ධාවනය git reflog HEADකිරීමයි, හෙඩ් පෙන්වා ඇති සියලුම ස්ථානවල ඉතිහාසය ඔබට ලැබෙනු ඇත.


5

පෙර පිළිතුරු සියල්ලම කියවීමෙන් පසුව, මට තව පැහැදිලි කිරීමක් අවශ්‍ය විය. නිල git වෙබ් අඩවිය වන http://git-scm.com/blog හි මෙම බ්ලොගය මා සොයන දේ මට ලබා දුන්නේය:

හෙඩ්: අන්තිම ස්නැප්ෂොට් කිරීමට යොමු කරන්න, ඊළඟ දෙමව්පියන්

Git හි ඇති HEAD යනු වර්තමාන ශාඛා යොමු කිරීම සඳහා වන දර්ශකය වන අතර, එය ඔබ විසින් කරන ලද අවසන් කැපවීම හෝ ඔබේ වැඩ කරන නාමාවලිය තුළට පරීක්ෂා කරන ලද අවසාන කැපවීම පිළිබඳ දර්ශකයකි . එයින් අදහස් වන්නේ එය ඔබ කරන ඊළඟ කැපවීමේ මවුපියන් වනු ඇති බවයි. HEAD යනු ඔබේ අන්තිම කැපවීමේ ඡායාරූපය බැවින් එය සිතීම සාමාන්‍යයෙන් සරල ය.


1
හෙඩ්: අවසන් වරට කළ ඡායාරූපය, ඊළඟ දෙමව්පියන් නිවැරදි නොවේ. HEADබැඳීමක් නොවේ; එය පෙන්නුම් එකක්.
jub0bs

උපහාසය අවශ්‍ය නැත; ඔබගේ සංස්කරණයට පෙර, උපුටා දැක්වීම නිවැරදි වුවද, විශාල තද අකුරු සරල කිරීම සහ ටිකක් නොමඟ යවන සුළුය. දැන්, එය වඩා හොඳය.
jub0bs

1
ඔබ ඊළඟ එක කියවන්න නම්: ප්රධාන Git දී ඇත පහිටුම් දක්වනය නිහඬ තුළ ඇති වත්මන් ශාඛා සඳහනක් වෙත අවධානය යොමුකළ අවසන් කිරීමට ඔබට සිදු හෝ පසුගිය ඔබගේ වැඩකරන බහලුම තුලට ක් පරීක්ෂා කරන ලදී සිදු නසාගන්නවා. - කරුණාකර එහි “දර්ශකය” යන වචනය භාවිතා කිරීම සැලකිල්ලට ගන්න.
user3751385

1
“අන්තිම කැපවීමේ ස්නැප්ෂොට්” විස්තරය මඟින් හෙඩ් සාමාන්‍යයෙන් භාවිතා කළ යුතු ආකාරය පිළිබඳ සංකල්පීය හැඟීමක් ලබා දෙන අතර එය ඇත්ත වශයෙන්ම නිවැරදි නොවේ. මම කැපවීමක් කළහොත්, වෙනත් ශාඛාවකට මාරුවන්න, HEAD අන්තිම කැපවීමේ ඡායාරූපයට යොමු නොකරයි. එය මා මාරු කළ ශාඛාවේ අවසන් කැපවීමේ ඡායාරූපය වෙත යොමු කරයි. මම නම් checkout HEAD^, දැන් හෙඩ් කිසිදු ශාඛාවක අවසන් කැපීමේ ඡායාරූපය වෙත යොමු නොකරයි.
LarsH

1
"ඔබගේ මීළඟ කැපවීමේ මවුපියන් (ඔබ මේ මොහොතේම කැපවී සිටියේ නම්)" වඩාත් නිවැරදියි, නමුත් කැපවීම හැරුණු විට තවත් බොහෝ ක්‍රියාකාරකම් හෙඩ් හි බලපෑමට ලක්ව ඇත. ඇත්තටම, අවසානයේ දී, හිස හිස වන අතර, එහි ස්වභාවය ඒ වගේ විධාන බලපාන ආකාරය විසින් අර්ථ commit, merge, rebase, log, ආදී එහෙත් සංකල්පමය සමහරවිට "(හේතුවම) වර්තමාන තත්ත්වය" හොඳ සාරාංශයකි.
LarsH

5

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

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

ඔබේ ගබඩාවේ .git ෆෝල්ඩරයක් ඇත. මෙම ස්ථානයේ ගොනුව විවෘත කරන්න: .git \ refs \ හිස්. එම ගොනුවේ (sha-1 hash) කේතය (බොහෝ අවස්ථාවන්හි ප්‍රධානියා) නවතම කැපවීම වනු ඇත, එනම් විධානයේ ප්‍රතිදානයේ දක්නට ලැබෙන කේතය git log. .Git ෆෝල්ඩරය පිළිබඳ වැඩි විස්තර: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html


1
වර්තමාන ශාඛාවේ ඔත්තුව නවතම කැපවීම වෙත යොමු වීම පොදු වැරදි මතයකි. සාමාන්‍යයෙන් එය සත්‍යයකි, නමුත් එය ද සාමාන්‍ය දෙයක් නොවේ git reset HEAD^, පසුව නවතම කැපවීම (කලින් ඉඟිය) තවදුරටත් ශාඛාවේ අගයෙන් පෙන්වා නැත.
LarsH

3

එය HEADඔබ පරික්ෂා කළ අවසන් කැපවීම සඳහා වූ ටැගයක් පමණක් යැයි හැඟේ .

මෙය විශේෂිත ශාඛාවක ඔත්තුව විය හැකිය ("ස්වාමියා" වැනි) හෝ ශාඛාවක බැඳීම් අතර ("වෙන්වූ හිස")


1

සියලු අර්ථ දැක්වීම් වලට අමතරව, මගේ මනසෙහි රැඳී ඇති දෙය නම්, ඔබ කැපවීමක් කරන විට, GIT ගබඩාව තුළ බැඳීම් වස්තුවක් නිර්මාණය කරයි. බැඳීම් වස්තූන් සඳහා දෙමව්පියන් සිටිය යුතුය (හෝ එය ඒකාබද්ධ කිරීමේ බැඳීමක් නම් බහු දෙමව්පියන්). දැන්, වර්තමාන කැපවීමේ මවුපියන් git දන්නේ කෙසේද? එබැවින් HEAD යනු වර්තමාන බැඳීමේ මවුපියන් බවට පත්වන අවසාන කැපවීම (යොමු කිරීම) වෙත යොමු කිරීමකි.


0

මේ දෙදෙනා ඔබව ව්‍යාකූල කළ හැකිය:

හිස

මෑතකදී ඉදිරිපත් කරන ලද ශාඛාවක් නම් කරන ලද යොමු කිරීම් වෙත යොමු කිරීම. ඔබ ඇසුරුම් යොමුව භාවිතා නොකරන්නේ නම්, හිස් සාමාන්‍යයෙන් ගබඩා කර ඇත්තේ $ GIT_DIR / refs / head /.

හිස

වත්මන් ශාඛාව හෝ ඔබේ වැඩ කරන ගස සාමාන්‍යයෙන් උත්පාදනය වන්නේ HEAD පෙන්වා ඇති ගසෙනි. ඔබ වෙන් කළ හෙඩ් එකක් භාවිතා කරන්නේ නම් හැර, හෙඩ් හිසට යොමු විය යුතුය.


0

Http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is දෙස බලන්න

රූපය 3-5. HEAD ගොනුව ඔබ සිටින ශාඛාවට යොමු කරයි.


4
සබැඳි පමණක් පිළිතුරු සාමාන්‍යයෙන් ස්ටැකෝවර්ෆ්ලෝ වෙත යොමු වේ, කරුණාකර ඔබේ පිළිතුරෙහි අදාළ තොරතුරු ඇතුළත් කරන්න.
හස්කල් එලිෆන්ට්

2
මෙය සම්පූර්ණයෙන්ම නිවැරදි නොවේ. කුමක්ද HEADයන්නෙන් ඔබ-හිස් නොවන ණයකට එදිරිව හිස් ගැන කතා කරන්නේ ද යන්න මත රඳා පවතී. හිස් නොවන රෙපෝවක සන්දර්භය තුළ, එය effectively ලදායී ලෙස යොමු කරනුයේ දැනට පරීක්ෂා කර ඇති බැඳීම සඳහා වන අතර, එයට ශාඛාවක් සවි කිරීම අවශ්‍ය නොවේ (එනම් වෙන්වූ HEADතත්වයේ සිටින විට).

0

ශාඛා ඇත්තටම එවැනි ලෙස සිදු හැඳුනුම්පත හිමි බව පෙන්නුම් කරන්නක් වේ 17a5 . HEAD යනු පරිශීලකයා දැනට වැඩ කරමින් සිටින ශාඛාවකට යොමු කිරීමකි.

HEAD හි විමර්ශන පෙරහනක් ඇත, එය මේ ආකාරයෙන් පෙනේ:

ref:

ඔබ .git/HEAD .git/refsවැඩ කරන ගබඩාවේ ඇති ප්‍රවේශයන් මඟින් ඔබට මෙම ලිපිගොනු පරීක්ෂා කළ හැකිය .


0

Gitසියල්ලම කොමිස් ගැන.
හා Headපෙන්වාදෙමින් ඔබ දැනට ක් පරීක්ෂා කරන නසාගන්නවා.

$ git cat-file -t HEAD
commit

ඔබ ශාඛාවක් පරීක්ෂා කරන සෑම අවස්ථාවකම, HEAD එම ශාඛාවේ නවතම කැපවීම පෙන්වා දෙයි. HEAD හි අන්තර්ගතය පහත පරිදි පරීක්ෂා කළ හැකිය (ප්‍රධාන ශාඛාව සඳහා):

$ cat .git/refs/heads/master
  b089141cc8a7d89d606b2f7c15bfdc48640a8e25

0

HEAD ඇත්ත වශයෙන්ම වත්මන් ශාඛා තොරතුරු ගබඩා කිරීම සඳහා වූ ගොනුවක් පමණි

ඔබගේ git විධානයන්හි ඔබ HEAD භාවිතා කරන්නේ නම් ඔබ යොමු කරන්නේ ඔබේ වර්තමාන ශාඛාවටයි

ඔබට මෙම ගොනුවේ දත්ත දැක ගත හැකිය cat .git/HEAD


-5

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

“පිරිසිදු” ගබඩාවක් තිබීමට නම්, ඔබ නම් කරන ලද ශාඛාවකට එක් හිසක් තිබිය යුතු අතර ඔබ දේශීයව වැඩ කිරීමෙන් පසු සෑම විටම නම් කරන ලද ශාඛාවකට ඒකාබද්ධ කරන්න.

මර්කුරියල් සඳහාද මෙය සත්‍යයකි .


4
මෙය මර්කුරියල් සඳහා සත්‍ය වේ, නමුත් Git සඳහා නොවේ .
මොනිකා නැවත ස්ථාපනය කරන්න - නොට්මෙනාර්ඩ්
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.