පළමුව, හෙඩ් යනු කුමක්ද සහ එය වෙන් වූ විට එයින් අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කරමු .
HEAD යනු දැනට පරීක්ෂා කර ඇති බැඳීම සඳහා සංකේතාත්මක නමයි. HEAD වෙන් නොකෙරෙන විට (“සාමාන්ය” 1 තත්වය: ඔබට ශාඛාවක් පරීක්ෂා කර ඇත), HEAD ඇත්ත වශයෙන්ම ශාඛාවේ “ref” වෙත යොමු වන අතර ශාඛාව බැඳීමට යොමු වේ. මේ අනුව හෙඩ් ශාඛාවකට “අමුණා” ඇත. ඔබ නව කැපවීමක් කරන විට, HEAD පෙන්වා දෙන ශාඛාව නව බැඳීම වෙත යොමු කිරීම සඳහා යාවත්කාලීන වේ. HEAD ශාඛාවට යොමු වන බැවින් ස්වයංක්රීයව අනුගමනය කරයි.
git symbolic-ref HEADields ලදාව refs/heads/master
“ස්වාමියා” නම් වූ ශාඛාව පරීක්ෂා කරනු ලැබේ.
git rev-parse refs/heads/masterඅස්වැන්න 17a02998078923f2d62811326d130de991d1a95a
එම කැපවීම ප්රධාන ශාඛාවේ වත්මන් ඉඟිය හෝ “හිස” වේ.
git rev-parse HEADද සම්පාදනය කරයි 17a02998078923f2d62811326d130de991d1a95a
මෙම එය "සංකේතාත්මක ref" ලෙස අදහස් කරන්නේ මෙයයි. එය වෙනත් යොමු කිරීමක් හරහා වස්තුවකට යොමු කරයි.
(සංකේතාත්මක යොමු කිරීම් මුලින් සංකේතාත්මක සබැඳි ලෙස ක්රියාත්මක කරන ලද නමුත් පසුව අමතර අර්ථ නිරූපණයන් සහිත සරල ලිපිගොනු ලෙස වෙනස් කරන ලද අතර ඒවා සිම්ලින්ක් නොමැති වේදිකාවල භාවිතා කළ හැකිය.)
අපට ඇති HEADඇතුළුවන්න → refs/heads/masterඇතුළුවන්න →17a02998078923f2d62811326d130de991d1a95a
හෙඩ් වෙන් වූ විට, එය ශාඛාවක් හරහා වක්රව යොමු කිරීම වෙනුවට එය කෙළින්ම බැඳීමකට යොමු කරයි. වෙන් කළ හෙඩ් නම් නොකළ ශාඛාවක සිටින බව ඔබට සිතිය හැකිය.
git symbolic-ref HEAD සමඟ අසමත් වේ fatal: ref HEAD is not a symbolic ref
git rev-parse HEADඅස්වැන්න 17a02998078923f2d62811326d130de991d1a95a
එය සංකේතාත්මක යොමු කිරීමක් නොවන බැවින්, එය සෘජුවම කැපවීමට යොමු විය යුතුය.
අපට ඇති HEAD→17a02998078923f2d62811326d130de991d1a95a
වෙන්වූ හෙඩ් සමඟ මතක තබා ගත යුතු වැදගත්ම දෙය නම්, එය යොමු කරන ලද කැපවීම වෙනත් ආකාරයකින් යොමු නොකෙරේ නම් (වෙනත් කිසිදු යොමු කිරීමකට එය ළඟා විය නොහැක), ඔබ වෙනත් කැපවීමක් පරීක්ෂා කර බලන විට එය “කරදරකාරී” වනු ඇත. අවසානයේදී, එවැනි කසළ එකතු කිරීම කසළ එකතු කිරීමේ ක්රියාවලිය හරහා කප්පාදු කරනු ලැබේ (පෙරනිමියෙන් ඒවා අවම වශයෙන් සති 2 ක්වත් තබා ඇති අතර HEAD හි පරාවර්තනය මගින් යොමු කිරීමෙන් වැඩි කාලයක් තබා ගත හැක).
1
වෙන්වූ හෙඩ් සමඟ “සාමාන්ය” වැඩ කිරීම ඉතා සුදුසුය, ඔබ ඉතිහාසය මසුන් ඇල්ලීමෙන් වළක්වා ගැනීම සඳහා ඔබ කරන්නේ කුමක්ද යන්න පිළිබඳව අවධානයෙන් සිටිය යුතුය.
අන්තර්ක්රියාකාරී ප්රතිප්රහාරයක අතරමැදි පියවරයන් වෙන් කරන ලද HEAD සමඟ සිදු කෙරේ (සක්රීය ශාඛාවේ පරාවර්තනය දූෂණය වීම වළක්වා ගැනීම සඳහා අර්ධ වශයෙන්). ඔබ සම්පූර්ණ ප්රතිව්යුහගත කිරීමේ ක්රියාවලිය අවසන් කළහොත්, එය නැවත ලබා ගැනීමේ ක්රියාවලියේ සමුච්චිත ප්රති result ලය සමඟ ඔබේ මුල් ශාඛාව යාවත්කාලීන කර මුල් ශාඛාවට HEAD නැවත සම්බන්ධ කරයි. මගේ අනුමානය නම්, ඔබ කිසි විටෙකත් නැවත ගෙවීමේ ක්රියාවලිය සම්පුර්ණ කර නැත; ප්රතිචක්රීකරණ මෙහෙයුම මගින් මෑතකදී ක්රියාවට නංවන ලද කැපවීම වෙත ඇඟිල්ල දිගු කරන ලද හෙඩ් එකක් මෙය ඔබට ලබා දෙනු ඇත.
ඔබගේ තත්වයෙන් යථා තත්ත්වයට පත්වීම සඳහා, ඔබ විසින් වෙන් කරන ලද හෙඩ් විසින් දැනට පෙන්වා දී ඇති බැඳීම පෙන්වා දෙන ශාඛාවක් ඔබ විසින් නිර්මාණය කළ යුතුය:
git branch temp
git checkout temp
(මෙම විධානයන් දෙක කෙටියෙන් දැක්විය හැක git checkout -b temp)
මෙය ඔබගේ HEAD නව tempශාඛාවට නැවත සම්බන්ධ කරනු ඇත .
ඊළඟට, ඔබ වත්මන් කැපවීම (සහ එහි ඉතිහාසය) ඔබ වැඩ කිරීමට බලාපොරොත්තු වූ සාමාන්ය ශාඛාව සමඟ සැසඳිය යුතුය:
git log --graph --decorate --pretty=oneline --abbrev-commit master origin/master temp
git diff master temp
git diff origin/master temp
(ඔබට බොහෝ විට ලොග් විකල්ප සමඟ අත්හදා බැලීමට අවශ්ය වනු ඇත: එකතු කරන්න -p, --pretty=…සම්පූර්ණ ලොග් පණිවිඩය බැලීමට ඉවත්ව යන්න .)
ඔබගේ නව tempශාඛාව හොඳ පෙනුමක් තිබේ නම්, ඔබට එය යොමු කිරීමට යාවත්කාලීන කිරීමට (උදා) masterඅවශ්ය විය හැකිය:
git branch -f master temp
git checkout master
(මෙම විධානයන් දෙක කෙටියෙන් දැක්විය හැක git checkout -B master temp)
එවිට ඔබට තාවකාලික ශාඛාව මකා දැමිය හැකිය:
git branch -d temp
අවසාන වශයෙන්, නැවත ස්ථාපනය කරන ලද ඉතිහාසය තල්ලු කිරීමට ඔබට අවශ්ය වනු ඇත:
git push origin master
--forceදුරස්ථ ශාඛාව නව බැඳීමට “වේගයෙන් ඉදිරියට” යැවිය නොහැකි නම් තල්ලු කිරීම සඳහා ඔබට මෙම විධානයේ අවසානයට එකතු කිරීමට අවශ්ය විය හැකිය (එනම් ඔබ අතහැර දැමීම, හෝ දැනට පවතින යම් යම් කැපවීම් නැවත ලිවීම හෝ වෙනත් ඉතිහාසයක් නැවත ලිවීම).
ඔබ නැවත ගෙවීමේ මෙහෙයුමක යෙදී සිටියේ නම් ඔබ එය පිරිසිදු කළ යුතුය. නාමාවලිය සෙවීමෙන් නැවත ගෙවීමක් සිදුවී ඇත්දැයි ඔබට පරීක්ෂා කළ හැකිය .git/rebase-merge/. එම නාමාවලිය මකා දැමීමෙන් ඔබට ප්රගතියේ ඇති ප්රතිප්රහාරය අතින් පිරිසිදු කළ හැකිය (උදා: සක්රීය නැවත ගෙවීමේ ක්රියාවලියේ අරමුණ සහ සන්දර්භය ඔබට තවදුරටත් මතක නැතිනම්). සාමාන්යයෙන් ඔබ භාවිතා කරනු ඇත git rebase --abort, නමුත් එය ඔබට වළක්වා ගැනීමට අවශ්ය අමතර නැවත සකස් කිරීමක් කරයි (එය හෙඩ් මුල් ශාඛාව වෙත ගෙන ගොස් එය නැවත මුල් බැඳීමට යලි සකසයි, එමඟින් අප ඉහත කළ සමහර කාර්යයන් අහෝසි කරනු ඇත).