වෙන්වූ හෙඩ් මාස්ටර් / සම්භවය සමඟ සංසන්දනය කරන්නේ කෙසේද?


1572

මම Git හි අතු බෙදීම් සංකීර්ණතාවයට අලුත් ය. මම සෑම විටම තනි ශාඛාවක වැඩ කරන අතර වෙනස්කම් සිදු කර වරින් වර මගේ දුරස්ථ සම්භවයට තල්ලු කරමි.

කොහේ හරි මෑතකදී, මම සමහර ලිපිගොනු නැවත සකස් කර ඒවා වේදිකාගත කිරීමෙන් ඉවත් කර, පසුව rebase -iමෑත කාලීන දේශීය කොමිස් යුවළක් ඉවත් කිරීමට උත්සාහ කළෙමි . දැන් මම ඉන්නේ මට නොතේරෙන තත්වයක.

මගේ සේවා git logස්ථානයේ, මම අපේක්ෂා කරන දේ හරියටම පෙන්වයි - මම යන්නට අකමැති කොමිස් සහ එහි නව ඒවා ආදිය සමඟ මම නිවැරදි දුම්රියේ ගමන් කරමි.

නමුත් මම දැන් දුරස්ථ ගබඩාවට තල්ලු කළෙමි, එහි ඇති දෙය වෙනස් ය - නැවත ගෙවීමේදී මා විසින් killed ාතනය කරන ලද කැපවීම් කිහිපයක් තල්ලු වී ඇති අතර, දේශීයව සිදු කරන ලද නව ඒවා එහි නොමැත.

මම සිතන්නේ "මාස්ටර් / සම්භවය" හෙඩ් වෙතින් වෙන්වී ඇති නමුත් එහි තේරුම, විධාන රේඛා මෙවලම් සමඟ එය දෘශ්‍යමාන කරන්නේ කෙසේද සහ එය නිවැරදි කරන්නේ කෙසේද යන්න පිළිබඳව 100% ක් පැහැදිලි නැත.


නැවත ගෙවීමට පෙර ඔබ කොමිස් තල්ලු කර තිබේද?
manojlds

@manojlds: ඔබ අදහස් කරන්නේ කුමක්දැයි විශ්වාස නැත. මම නැවත පැමිණීමට පෙර යම් කාලයක් තල්ලු කළෙමි, නමුත් වහාම ඊට පෙර නොවේ.
බෙන් සොටෝ

ඔබ කලින් ඉවත් කළ කොමිස් නැවත පෙරළා දැමූ ආකාරයටම - අයි .. ඔබේ පිළිතුරෙන් මම නොසිතමි.
manojlds

@manojlds: නිවැරදි. මම killed ාතනය කළේ නවතම තල්ලුවට වඩා මෑත කාලීන වූ කොමිස් පමණි. (මා සඳහන් කළ පරිදි, සෑම දෙයක්ම හරි යැයි සිතූ බැවින් මම එතැන් සිට තල්ලු කර ඇත්තෙමි)
බෙන් සොටෝ

ඔබ I did a reset of some files to get them out of commit stagingඅර්ධ වශයෙන් කළ දේ ඔබට පැහැදිලි කළ හැකිද ? ප්‍රශ්න වලට කණගාටුයි :)
manojlds

Answers:


2547

පළමුව, හෙඩ් යනු කුමක්ද සහ එය වෙන් වූ විට එයින් අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කරමු .

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
    එය සංකේතාත්මක යොමු කිරීමක් නොවන බැවින්, එය සෘජුවම කැපවීමට යොමු විය යුතුය.

අපට ඇති HEAD17a02998078923f2d62811326d130de991d1a95a

වෙන්වූ හෙඩ් සමඟ මතක තබා ගත යුතු වැදගත්ම දෙය නම්, එය යොමු කරන ලද කැපවීම වෙනත් ආකාරයකින් යොමු නොකෙරේ නම් (වෙනත් කිසිදු යොමු කිරීමකට එය ළඟා විය නොහැක), ඔබ වෙනත් කැපවීමක් පරීක්ෂා කර බලන විට එය “කරදරකාරී” වනු ඇත. අවසානයේදී, එවැනි කසළ එකතු කිරීම කසළ එකතු කිරීමේ ක්‍රියාවලිය හරහා කප්පාදු කරනු ලැබේ (පෙරනිමියෙන් ඒවා අවම වශයෙන් සති 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, නමුත් එය ඔබට වළක්වා ගැනීමට අවශ්‍ය අමතර නැවත සකස් කිරීමක් කරයි (එය හෙඩ් මුල් ශාඛාව වෙත ගෙන ගොස් එය නැවත මුල් බැඳීමට යලි සකසයි, එමඟින් අප ඉහත කළ සමහර කාර්යයන් අහෝසි කරනු ඇත).


6
සිත්ගන්නාසුලු man git-symbolic-ref: "අතීතයේ දී, .git/HEADසංකේතාත්මක සබැඳියක් පෙන්වා දී තිබුණි refs/heads/master. අපට වෙනත් ශාඛාවකට මාරුවීමට අවශ්‍ය වූ විට, අපි එසේ කළෙමු, අප ln -sf refs/heads/newbranch .git/HEADකුමන ශාඛාවෙහි සිටිනවාදැයි සොයා ගැනීමට අවශ්‍ය වූ විට අපි එසේ කළෙමු readlink .git/HEAD. නමුත් සංකේතාත්මක සම්බන්ධතා සම්පූර්ණයෙන්ම අතේ ගෙන යා නොහැක , එබැවින් ඒවා දැන් අතහැර දමා ඇති අතර සංකේතාත්මක යොමු (පෙර විස්තර කර ඇති පරිදි) පෙරනිමියෙන් භාවිතා වේ.
දිමිත්‍රි මින්කොව්ස්කි

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

37
මෙය හොඳ පිළිතුරකි, නමුත් තාවකාලික ශාඛාවේ අවශ්‍යතාවයක් නැතැයි මම සිතමි (මම සාමාන්‍යයෙන් එකක් භාවිතා කළද). git branch -f master HEAD && git checkout masterප්‍රමාණවත් - ඔබේ ඉලක්කය උපකල්පනය කරන්නේ ඔබේ වර්තමාන හිස තබා ගැනීම නමුත් එය එසේ නම් කිරීමයි master. වෙනත් අරමුණු ද අර්ථවත් වන අතර වෙනත් වට්ටෝරු සඳහා කැඳවුම් කරන්න.
ඒඩ්‍රියන් රත්නපාල

38
අදහස් දැක්වීමේ දිග ගැන දිග හැරෙන්න. “ඔබගේ තත්වයෙන් සුවය ලබා ගැනීම සඳහා [...]” යැයි කියන රේඛාව කරා ළඟා වන තෙක් අප සෙසු අය සරලව පරිලෝකනය කර එතැනින් යන්න - අපට කියවිය හැකි ප්‍රයෝජනවත් හොඳින් පැහැදිලි කළ පසුබිමක් ඇති බව මානසික සටහනක් තබන අතරතුර වැසි දිනයක. මෙම විකල්පය තව තවත් කියවීමට නො වන්නේ, නමුත් එය කරන්නේ අන් අය යහපත කිරීමට ස්ථාවරය.
underscore_d

6
මේ නිසා තමයි මම git ට වෛර කරන්නේ.
මොනිකා හෙඩ්නෙක්

629

මෙය කරන්න:

git checkout master

නැතහොත්, ඔබට තබා ගැනීමට අවශ්‍ය වෙනස්කම් තිබේ නම්, මෙය කරන්න:

git checkout -b temp
git checkout -B master temp

61
මෙය භයානක ප්‍රතිචාරයකි. මෙම පිළිතුරට පැමිණෙන පුද්ගලයින්ට විවිධ ප්‍රාන්ත ඇති අතර “එය නිවැරදි කිරීමට මෙය කරන්න” ප්‍රතිචාර ප්‍රශ්න වලට පිළිතුරු සපයන්නේ නැත. මෙම තැනැත්තාට පහසුවෙන් වැඩ විනාශ කළ හැකිය.
පුරාවිද්‍යා

17
වෙන්වූ හිස ස්වාමියාගේ කොටසක් නොවන්නේ නම් "git checkout master" සියලු වෙනස්කම් නැති වීමට හේතු වේ !!
ටෝනි

3
La බ්ලවුහර්න් ඔබ බොහෝ විට කැපවීම සිදු කළේ ශාඛාව නොව. ශාඛාව තවමත් එකම කැපවීමකට යොමු කරයි, නමුත් ඔබ සිටින්නේ වෙනත් 'මාදිලියක' ය.
ඩැනියෙල් ඇලෙක්සියුක්

1
git resetඅනතුරු ඇඟවීමක් සමඟ පැමිණිය යුතුය "ඔබ කරන්නේ කුමක්දැයි ඔබට අදහසක් නැත්නම්, එය නවත්වන්න". පැයක භීෂණයකින් සුවය ලැබුවා මට පසුගිය සතියේ වැඩ අහිමි වේ යැයි සිතමින්. ස්තූතියි!
Opus1217

1
R ආචොනික් සමඟ එකඟ වන්න ඔබ ඕනෑම විධානයක් අන්ධ ලෙස ක්‍රියාත්මක කිරීමට පෙර git ක්‍රියා කරන ආකාරය තේරුම් ගැනීම වැදගත්ය. විශාල පිළිතුර කියවීමෙන් ඔබට කාලය ඉතිරි කර ගත හැකි නමුත් ඔබේ වැඩ නැති වුවහොත් වැඩි කාලයක් අහිමි විය හැකිය.
යූසුෆාලි 2205

135

මම මෙම ප්‍රශ්නයට මුහුණ දුන් අතර ඉහළ ඡන්දය දුන් පිළිතුර කියවන විට:

HEAD යනු දැනට පරීක්ෂා කර ඇති බැඳීම සඳහා සංකේතාත්මක නමයි.

මම හිතුවා: අහ්-හා! කරන්ට්ල් චෙක්පට් කැපවීමේ HEADසංකේතාත්මක නම නම් , මට එය ප්‍රතික්ෂේප masterකිරීමෙන් එය ප්‍රතිසන්ධානය කළ හැකිය master:

git rebase HEAD master

මෙම විධානය:

  1. පරීක්ෂා කරයි master
  2. මවුපියන් විසින් HEADආපසු හරවන ලද ස්ථානයට ආපසු හරවන බව හඳුනා HEADගනීmaster
  3. එම කොමිස් ඉහළින් වාදනය කරයි master

අවසාන ප්‍රති result ලය වනුයේ එවකට පැවති HEADනමුත් නොකළ සියලු කොමිස් ද ඇතුළත්වීමයි . ඉතිරිව ඇත.mastermastermaster


දුරස්ථය සම්බන්ධයෙන්:

නැවත ගෙවීමේදී මා විසින් killed ාතනය කරන ලද කොමිස් කිහිපයක් තල්ලු වී ඇති අතර, දේශීයව සිදු කරන ලද නව ඒවා එහි නොමැත.

ඔබගේ ප්‍රාදේශීය ඉතිහාසය භාවිතා කරමින් දුරස්ථ ඉතිහාසය තවදුරටත් වේගයෙන් ඉදිරියට යැවිය නොහැක. git push -fදුරස්ථ ඉතිහාසය නැවත ලිවීමට ඔබට බල කිරීම ( ) අවශ්‍ය වේ. ඔබට කිසියම් සහකරුවෙකු සිටී නම්, ඔවුන් සමඟ මෙය සම්බන්ධීකරණය කිරීම සාමාන්‍යයෙන් අර්ථවත් වන බැවින් සියලු දෙනා එකම පිටුවක සිටිති.

ඔබ තල්ලු පසු masterදුෂ්කර origin, ඔබගේ දුරස්ථ ෙසොයා ගැනීෙම් ශාඛා origin/masterඑකම බව හඳුන්වා යාවත්කාලීන කිරීම ද සිදු කරනු ලැබේ ලෙස සිදු master.


3
git: "පළමුව, ඔබේ කාර්යය නැවත ඉහළට ඔසවා තැබීමට හිස පෙරළන්න ... වේගයෙන් ඉදිරියට යන ස්වාමියා හෙඩ් වෙත." මම: "හොඳයි!"
බෙන්ජමින්

මෙම යෝජනාව මගින් සියලු ආකාරයේ සමාන්තර විශ්වයන් නිර්මාණය කරන ලදී FML
eonist

අයියෝ. එය ඇසීම ගැන කණගාටුයි. ඔබේ ශාඛාව නැවත සැකසීමට ඔබට ඇති කැපවීම සොයා ගැනීම සලකා බලා ඔබේ ශාඛාව git reflogඒ සඳහා නැවත සකසන්නgit rest —hard $commit
දිමිත්‍රි මින්කොව්ස්කි

83

වෙන්වූ හිස පිළිබඳ මූලික පැහැදිලි කිරීම සඳහා මෙහි බලන්න:

http://git-scm.com/docs/git-checkout

එය දෘශ්‍යමාන කිරීමට විධාන රේඛාව:

git branch

හෝ

git branch -a

ඔබට පහත පරිදි ප්‍රතිදානය ලැබෙනු ඇත:

* (no branch)
master
branch1

* (no branch)ඔබ වෙන්ව සිටින බව පෙන්වන සංදර්ශන.

git checkout somecommitආදිය කිරීමෙන් ඔබට මෙම තත්වයට පැමිණිය හැකි අතර එය පහත සඳහන් කරුණු සමඟ ඔබට අනතුරු අඟවනු ඇත:

ඔබ සිටින්නේ 'වෙන්වූ හෙඩ්' තත්වයේ ය. ඔබට අවට බැලීමට, පර්යේෂණාත්මක වෙනස්කම් කිරීමට සහ ඒවා සිදු කිරීමට හැකි අතර, වෙනත් පිරික්සීමක් සිදු කිරීමෙන් කිසිදු ශාඛාවකට බලපෑමක් නොකර මෙම තත්වය තුළ ඔබ කරන ඕනෑම කැපවීමක් ඉවත දැමිය හැකිය.

ඔබ විසින් නිර්මාණය කරන ලද කොමිස් රඳවා තබා ගැනීම සඳහා නව ශාඛාවක් නිර්මාණය කිරීමට ඔබට අවශ්‍ය නම්, නැවත පිරික්සුම් විධානය සමඟ -b භාවිතා කිරීමෙන් ඔබට (දැන් හෝ පසුව) එසේ කළ හැකිය. උදාහරණයක්:

git checkout -b new_branch_name

දැන්, ඒවා ස්වාමියා වෙත ලබා ගැනීමට:

කිසිවක් කරන්න git reflogහෝ පවා හුදෙක් git logඔබේ අනාචාරයේ කරුණාවෙන්. දැන් git checkout masterසහ git mergeකොමිස්.

git merge HEAD@{1}

සංස්කරණය කරන්න:

එකතු කිරීමට, git rebase -iඔබට අවශ්‍ය නොවන කොමිස් මකා දැමීමට / killing ාතනය කිරීමට පමණක් නොව, ඒවා සංස්කරණය කිරීමටද භාවිතා කරන්න. බැඳීම් ලැයිස්තුවේ "සංස්කරණය" සඳහන් කරන්න, එවිට ඔබට ඔබගේ කැපවීම සංශෝධනය git rebase --continueකර ඉදිරියට යාමට අවශ්‍යතාවයක් නිකුත් කළ හැකිය. ඔබ කිසි විටෙකත් වෙන්වූ හෙඩ් වෙත නොපැමිණෙන බවට මෙය සහතික වනු ඇත.


මෙහි විස්තර සහ විශිෂ්ට තොරතුරු දර්ශකයන්ට ස්තූතියි. පැහැදිලි ඒකාබද්ධ කිරීමක් අවශ්‍ය නොවන බවක් පෙනේ, නමුත් මෙය මා වෙත ආපසු යන සංකල්ප කිහිපයක් දෘශ්‍යමාන කළේය. ස්තූතියි.
බෙන් සොටෝ

7
"@ {1}" කරන්නේ කුමක්ද?
ebi

36

ඔබේ වෙන්වූ බැඳීම එහි ශාඛාවට ලබා ගන්න

සරලව ධාවනය කරන්න git checkout -b mynewbranch.

ඉන්පසු ධාවනය කරන්න git log, එවිට HEADමෙම නව ශාඛාව මත එම කැපවීම ඇති බව ඔබට පෙනෙනු ඇත.


මම මෙය කරන්නේ mynewbranchනම්, කිසිවක් සම්බන්ධ වේද?
බෙන්ජොන්

1
ඔව්, එය වෙන්වූ හිස සවි කර ඇති ස්ථානයට සම්බන්ධ වේ, එය මට අවශ්‍ය දේමයි. ස්තූතියි!
බෙන්ජොන්

22

ඔබට ප්‍රධාන ශාඛාවක් තිබේ නම් සහ “සංවර්ධනය” කිරීමට හෝ අංගයක් වෙත ආපසු යාමට අවශ්‍ය නම් මෙය කරන්න:

git checkout origin/develop

සටහන: සම්භවය පරීක්ෂා කිරීම / සංවර්ධනය කිරීම .

ඔබ සිටින්නේ HEAD තත්වයේය . ඔබට අවට බැලීමට, පර්යේෂණාත්මක වෙනස්කම් කිරීමට සහ ඒවා සිදු කිරීමට හැකි අතර, වෙනත් පිරික්සීමක් සිදු කිරීමෙන් කිසිදු ශාඛාවකට බලපෑමක් නොකර මෙම තත්වය තුළ ඔබ කරන ඕනෑම කැපවීමක් ඉවත දැමිය හැකිය ...

එවිට

git checkout -b develop

එය වැඩ කරනවා :)


7
මා වෙනුවෙන් වැඩ කර ඇත්තේ 'git checkout සම්භවය / සංවර්ධනය' නොව 'git checkout develop' යන්නයි. 'සම්භවය / සංවර්ධනය' භාවිතා කිරීමෙන් සෑම විටම කිසිදු වෙනසක් සිදු නොවූ අතර එමඟින් "මූලාරම්භයේ / සංවර්ධනය වූ හෙඩ් හි රැඳී පවතී." 'සම්භවය' කොටස මඟ හැරීම සියල්ල නිවැරදි කළේය.
DrStrangepork

21

ඔබගේ දැනට වෙන් කර ඇති හෙඩ් තල්ලු කිරීමට ඔබට අවශ්‍ය නම් ( git logපෙර පරීක්ෂා කරන්න ), උත්සාහ කරන්න:

git push origin HEAD:master

ඔබේ වෙන්වූ හෙඩ් ආරම්භයේ සිටම ප්‍රධාන ශාඛාවට යැවීමට. ඔබගේ තල්ලුව ප්‍රතික්ෂේප වුවහොත්, git pull origin masterආරම්භයේ සිට වෙනස්කම් ලබා ගැනීමට පළමුව උත්සාහ කරන්න . ඔබ ආරම්භයේ සිට සිදු වූ වෙනස්කම් ගැන තැකීමක් නොකරන්නේ නම් සහ එය ප්‍රතික්ෂේප කරනු ලැබේ, මන්ද ඔබ යම්කිසි හිතාමතා ප්‍රතිප්‍රහාරයක් කළ නිසා සහ සම්භවය / ස්වාමියා වෙනුවට දැනට වෙන් කර ඇති ශාඛාව වෙනුවට ආදේශ කිරීමට ඔබට අවශ්‍ය නම් - එවිට ඔබට එය බල කළ හැකිය ( -f). ඔබට පෙර කළ කොමිස් වලට යම් ප්‍රවේශයක් අහිමි වුවහොත්, ඔබට git reflogසෑම ශාඛාවකින්ම ඉතිහාසය බැලීමට ධාවනය කළ හැකිය.


ප්‍රධාන ශාඛාවක් වෙත ආපසු යාමට, වෙනස්කම් තබා ගනිමින්, පහත දැක්වෙන විධානයන් උත්සාහ කරන්න:

git rebase HEAD master
git checkout master

බලන්න: Git: "දැනට කිසිදු ශාඛාවක නොමැත." වෙනස්කම් තබා ගනිමින් ශාඛාවක් වෙත ආපසු යාමට පහසු ක්‍රමයක් තිබේද?


2
මෙය සැබවින්ම වෙන්වූ කොමිස් සම්භවය / ස්වාමියා වෙත යවයි. : දේශීය ශාඛාව වෙත හිස අනුයුක්ත කිරීමට මේ stackoverflow.com/a/17667057/776345
Paschalis

මම මෙය කරන විට මෙම ගබඩාව Git LFS සඳහා වින්‍යාස කර ඇති නමුත් 'git-lfs' ඔබේ මාර්ගයේ හමු නොවීය. ඔබ තවදුරටත් Git LFS භාවිතා කිරීමට අකමැති නම්, .git / කොකු / පශ්චාත්-පිරික්සුම ඉවත් කිරීමෙන් මෙම කොක්ක ඉවත් කරන්න.
user2568374

17

සොයන විට මට මෙම ප්‍රශ්නය හමු විය You are in 'detached HEAD' state.

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

මගේ සාමාන්‍ය ප්‍රවාහය:

git checkout master
git fetch
git checkout my-cool-branch
git pull

මේ වතාවේ මම කළේ:

git checkout master
git fetch
git checkout origin/my-cool-branch
# You are in 'detached HEAD' state.

ගැටලුව වන්නේ මම අහම්බෙන් කළ දෙයයි:

git checkout origin/my-cool-branch

ඊට වඩා:

git checkout my-cool-branch

නිවැරදි කිරීම (මගේ තත්වය තුළ) හුදෙක් ඉහත විධානය ක්‍රියාත්මක කර ප්‍රවාහය දිගටම කරගෙන යාමයි:

git checkout my-cool-branch
git pull

පරිපූර්ණ විසඳුමක්.
තිරුමාල් ශක්තිවේල්

12

පහත සඳහන් දෑ මා වෙනුවෙන් වැඩ කළේය (ශාඛා මාස්ටර් පමණක් භාවිතා කරමින්):

git push origin HEAD:master
git checkout master        
git pull

පළමුවැන්න වෙන්වූ HEAD දුරස්ථ සම්භවයට තල්ලු කරයි.

දෙවැන්න ශාඛා මාස්ටර් වෙත ගමන් කරයි.

තුන්වැන්න ශාඛා මාස්ටර් සමඟ සම්බන්ධ වන හෙඩ් නැවත ලබා ගනී.

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


වැඩ කළේ නැත, මට ලැබුණි: මෙම ගබඩාව Git LFS සඳහා වින්‍යාස කර ඇති නමුත් 'git-lfs' ඔබේ මාර්ගයේ හමු නොවීය. ඔබ තවදුරටත් Git LFS භාවිතා කිරීමට අකමැති නම්, .git / කොකු / පෙර-තල්ලු කිරීමෙන් මෙම කොක්ක ඉවත් කරන්න. ඔබ දැනට ශාඛාවක නොමැත. කරුණාකර ඔබට ඒකාබද්ධ වීමට අවශ්‍ය ශාඛාව සඳහන් කරන්න.
user2568374

11

මම අද මෙම ගැටලුව වෙත දිව ගිය අතර එය කිරීමෙන් මම එය විසඳූ බව මට විශ්වාසයි:

git branch temp
git checkout master
git merge temp

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


Ar ස්ටාර්ෂයින් කෙනෝර්බ් එය සවි කළේය. දැන් එය ඔබගේ වෙන් කළ බැඳීම් නව ශාඛාවකට ඉතිරි කරයි, තාවකාලිකයි, මාස්ටර් වෙත මාරු වේ, සහ තාවකාලික මාස්ටර් සමඟ ඒකාබද්ධ කරයි.
සීස් ටිමර්මන්

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

9

හෙඩ් යනු හොඳ තත්වය බව ඔබට සම්පූර්ණයෙන්ම විශ්වාස නම්:

git branch -f master HEAD
git checkout master

ඔබේ ස්වාමියා මූලාරම්භයෙන් iver ත් වී ඇති බැවින් ඔබට සම්භවය කරා තල්ලු විය නොහැක. වෙනත් කිසිවෙකු repo භාවිතා නොකරන බව ඔබට විශ්වාස නම්, ඔබට බලෙන් තල්ලු කළ හැකිය:

git push -f

ඔබ භාවිතා කරන්නේ විශේෂාංග ශාඛාවක නම් වඩාත් ප්‍රයෝජනවත් වේ.


7

ඔබ කළ යුතුව ඇත්තේ 'git checkout [branch-name]' [ශාඛා-නම] යනු ඔබ වෙන්වූ ප්‍රධාන තත්වයට පත්වූ මුල් ශාඛාවේ නමයි. (Asdfasdf වෙතින් වෙන් කරන ලද) අතුරුදහන් වනු ඇත.

උදාහරණයක් ලෙස, 'dev' ශාඛාවේදී ඔබ කැපවීම asdfasd14314 -> පරීක්ෂා කරන්න

'git checkout asdfasd14314'

ඔබ දැන් සිටින්නේ ප්‍රධාන තත්වයක ය

'git branch' -> වැනි දෙයක් ලැයිස්තුගත කරයි

* (detached from asdfasdf)
  dev
  prod
  stage

නමුත් වෙන්වූ ප්‍රධාන තත්වයෙන් ඉවත් වී නැවත dev -> වෙත යන්න

'git checkout dev'

ඉන්පසු 'git branch' ලැයිස්තුගත වනු ඇත ->

* dev
  prod
  stage

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


6

ක්‍රිස් පෙන්වා දුන් පරිදි, මට පහත සඳහන් තත්වයන් තිබුණි

git symbolic-ref HEAD සමඟ අසමත් වේ fatal: ref HEAD is not a symbolic ref

කෙසේ වෙතත් git rev-parse refs/heads/master, මට සුවය ලබා ගත හැකි ස්ථානයෙන් හොඳ කැපවීමක් යොමු විය (මගේ නඩුවේ අවසාන කැපවීම සහ භාවිතා කිරීමෙන් එම කැපවීම ඔබට දැක ගත හැකියgit show [SHA]

ඊට පස්සේ මම ගොඩක් අවුල් සහගත දේවල් කළා, නමුත් ස්ථිර කර ඇති බවක් පෙනේ,

git symbolic-ref HEAD refs/heads/master

හිස නැවත සවි කර ඇත!


1
ස්තූතියි! මගේ ඔළුව වෙන් වෙලා. මට එය මාස්ටර් වෙත හසු කර ගත හැකි නමුත් ඔවුන් සිදු වූයේ කැපවීමට යොමු වූ මාස්ටර් වෙත හිස යොමු කරනවාට වඩා එකම කැපවීමකට ය. හොඳ ඉඟිය = D
RagingRoosevelt

4

කරනවා වෙනුවට git checkout origin/master

කරන්න git checkout master

එවිට git branchඔබේ ශාඛාව තහවුරු කරනු ඇත.


4

අද මට මෙම ගැටළුව ඇති අතර, එහිදී මම උප මොඩියුලයක් යාවත්කාලීන කළ නමුත් කිසිදු ශාඛාවක නොසිටියේය. මම ඒ වන විටත් කැපවී සිටිමි, එබැවින් තැන්පත් කිරීම, පිටවීම, අස්ථිර කිරීම ක්‍රියා නොකරනු ඇත. වෙන්වූ හිසෙහි කැපවීම මම චෙරි තෝරා ගැනීම අවසන් කළෙමි. ඒ නිසා මම කැපවීමෙන් පසු (තල්ලු කිරීම අසාර්ථක වූ විට) මම කළේ:

git checkout master
git cherry-pick 99fe23ab

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


3

ඔබ ස්වාමියාට ඉහළින් යම් යම් කැපවීම් කරmaster එහි “පසුපසට ඒකාබද්ධ වීමට” අවශ්‍ය නම් (එනම් ඔබට masterපෙන්වා දීමට අවශ්‍ය නම් HEAD), එක් ලයිනර් එකක් වනුයේ:

git checkout -B master HEAD
  1. masterඑය දැනටමත් පැවතියද (එය චලනය වනවා masterහා අපට අවශ්‍ය වන්නේ එයයි) නමින් නව ශාඛාවක් නිර්මාණය කරයි .
  2. අලුතින් සාදන ලද ශාඛාව HEADඔබ සිටින තැනට යොමු කිරීමට සකසා ඇත.
  3. නව ශාඛාව පරීක්ෂා කර ඇති බැවින් ඔබ masterපසුව ක්‍රියාත්මක වේ.

උප ගබඩාවලදී මෙය විශේෂයෙන් ප්‍රයෝජනවත් බව මට පෙනී ගියේය, එය බොහෝ විට වෙන්වූ තත්වයක පවතී.


3

මට එකම ගැටලුව ඇති අතර පහත පියවරයන් අනුගමනය කිරීමෙන් මම එය විසඳා ඇත්තෙමි.

ඔබේ වෙනස්කම් තබා ගැනීමට ඔබට අවශ්‍ය නම්

  1. පළමුවෙන්ම ඔබව git checkout masterනැවත ශාඛා ශාඛාවට යොමු කිරීම සඳහා විධානය ක්‍රියාත්මක කළ යුතුය.
  2. ඔබ ක්රියාත්මක ඔබේ වෙනස්කම් තබා ගැනීමට අවශ්ය නම් git checkout -b changesහා git checkout -B master changes

ඔබේ වෙනස්කම් ඔබට අවශ්‍ය නැතිනම්

  1. ඔබගේ ශාඛා ධාවනයෙන් ඉවත් නොකළ සියලුම ගොනු ඉවත් කිරීමට git clean -df.

  2. එවිට ඔබ ඔබේ ගබඩාව තුළ අස්ථායි වෙනස්කම් සියල්ලම ඉවත් කළ යුතුය. එය සිදු කිරීම සඳහා ඔබ ධාවනය කළ යුතුයgit checkout --

  3. අවසාන වශයෙන් ඔබ git checkout masterවිධානය භාවිතා කර ඔබේ ශාඛාව නැවත ප්‍රධාන ශාඛාවට දැමිය යුතුය .


3

මට එය ප්‍රාදේශීය ශාඛාව නැවත මකා දැමීම තරම් පහසු විය, මන්ද මට තල්ලු කිරීමට අවශ්‍ය දේශීය කොමිස් කිසිවක් මා සතුව නොතිබුණි:

ඉතින් මම කළා:

git branch -d branchname

ඉන්පසු ශාඛාව නැවත පරීක්ෂා කිරීම:

git checkout branchname

1

මා නොසිටින විට මා යම් යම් වෙනස්කම් සිදු කර ඇති බව මා පෞද්ගලිකව සොයාගත් විට master(එනම් HEADඉහළින් වෙන් masterකර ඇති අතර ඒ අතර කිසිදු කැපවීමක් නොමැත) ගබඩා කිරීම උපකාරී වේ:

git stash # HEAD has same content as master, but we are still not in master
git checkout master  # switch to master, okay because no changes and master
git stash apply  # apply changes we had between HEAD and master in the first place

1

සරල වචන වලින් කිවහොත්, වෙන්වූ HEAD තත්වය යනු ඔබ කිසිදු ශාඛාවක HEAD (හෝ ඉඟිය) වෙත පරීක්ෂා නොකිරීමයි .

උදාහරණයක් සමඟ තේරුම් ගන්න

බොහෝ අවස්ථාවන්හි ශාඛාවක් යනු බහු කොමිස්වල අනුක්‍රමයයි:

බැඳීම 1: ස්වාමියා -> ශාඛාව_හීඩ් (123be6a76168aca712aea16076e971c23835f8ca)

කැපවීම 2: මාස්ටර් -> 123be6a76168aca712aea16076e971c23835f8ca -> branch_HEAD (100644a76168aca712aea16076e971c23835f8ca)

කොමිස් අනුපිළිවෙලකදී ඔබට ඉහත දැකිය හැකි පරිදි, ඔබේ ශාඛාව ඔබගේ නවතම කැපවීම වෙත යොමු කරයි. ඒ නිසා එම නඩුව ඔබ සිදු කිරීමට ලොව පුරාවටම නම් 123be6a76168aca712aea16076e971c23835f8ca ඔබ වෙන් හිස රාජ්ය ඔබේ ශාඛා ලකුණු හිස සිට වනු 100644a76168aca712aea16076e971c23835f8ca හා තාක්ෂණික නැහැ, ඔබ ශාඛා ප්රධානී දී පරීක්ෂා කර ඇත. එබැවින් ඔබ සිටින්නේ වෙන්වූ හෙඩ් තත්වයේ ය.

න්‍යායාත්මක පැහැදිලි කිරීම

මෙම බ්ලොග් අඩවියේ එය පැහැදිලිවම කියා සිටින්නේ Git නිධියක් යනු කැපවීමේ ගසක් වන අතර, එක් එක් බැඳීම් ලක්ෂ්‍යය සමඟ එහි මුතුන් මිත්තන්ට යොමු කරන සෑම බැඳීමක්ම යාවත්කාලීන වන අතර සෑම ශාඛාවකටම මෙම දර්ශකයන් .git / refs උප නාමාවලිවල ගබඩා කර ඇත. ටැග් .git / refs / tags වලද ශාඛා .git / refs / head වලද ගබඩා කර ඇත. ඔබ කිසියම් ලිපිගොනුවක් බැලුවහොත්, සෑම ටැගයක්ම අක්ෂර 40 කින් යුත් හෑෂ් එකක් සහිත තනි ගොනුවකට අනුරූප වන අතර ඉහත විස්තර කර ඇති පරිදි ක්‍රිස් ජොන්සන් සහ @ යාරොස්ලාව් නිකිටෙන්කෝ විසින් ඔබට මෙම යොමු කිරීම් පරීක්ෂා කළ හැකිය.


0

මම ඇත්තටම මෝඩ තත්වයකට පත්වෙලා, වෙන කවුරුහරි මේක ප්‍රයෝජනවත් වෙයි කියලා මට සැකයි .... ඒත් එක්ක

git ls-remote origin
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        HEAD
6f96ad0f97ee832ee16007d865aac9af847c1ef6        refs/heads/HEAD
0d2ab882d0dd5a6db93d7ed77a5a0d7b258a5e1b        refs/heads/master

අවසානයේදී මම එය සවි කළෙමි

git push origin :HEAD

0

මෙය මට හොඳින් වැඩ කළා:

1. git stashඔබගේ දේශීය වෙනස් කිරීම් සුරැකීමට

ඔබට වෙනස්කම් ඉවත දැමීමට අවශ්‍ය නම්,
git clean -df
git checkout -- .
git clean විසින් ඉවත් නොකළ සියලුම ලිපිගොනු ඉවත් කරයි (අනතුරු ඇඟවීම: .gitignore හි සෘජුවම සඳහන් කර ඇති නොසලකා හරින ලද ගොනු මකා නොදමනු ඇත, එය ෆෝල්ඩර වල ඇති නොසලකා හරින ලද ගොනු මකා දැමිය හැක) සහ git checkout මඟින් අස්ථායී සියළු වෙනස්කම් ඉවත් කරයි.

2. git checkout masterප්‍රධාන ශාඛාවට මාරුවීම (ඔබට මාස්ටර් භාවිතා කිරීමට අවශ්‍ය යැයි උපකල්පනය කිරීම)
3. git pullමාස්ටර් ශාඛාවෙන් අවසන් කැපවීම
4. git statusසෑම දෙයක්ම පරික්ෂා කිරීම සඳහා විශිෂ්ටයි

On branch master
Your branch is up-to-date with 'origin/master'.

0

මගේ නඩුවේදී, මම දිව්වා git status, මගේ වැඩ කරන නාමාවලියෙහි සොයා නොගත් ලිපිගොනු කිහිපයක් ඇති බව මම දුටුවෙමි.

නැවත සකස් කිරීම සඳහා, මට ඒවා පිරිසිදු කිරීමට සිදු විය (මට ඒවා අවශ්‍ය නොවන බැවින්).


0

ඔබ සූර්යග්‍රහණයේ EGit භාවිතා කරන්නේ නම් : ඔබේ ප්‍රධානියා ඔබේ ප්‍රධාන සංවර්ධන ශාඛාව යැයි උපකල්පනය කරන්න

  • ඔබ ශාඛාවකට වෙනස්කම් සිදු කරන්න, සාමාන්‍යයෙන් නව එකක්
  • ඉන්පසු දුරස්ථයෙන් අදින්න
  • ඉන්පසු ව්‍යාපෘති නෝඩය මත දකුණු ක්ලික් කරන්න, කණ්ඩායම තෝරන්න සහ ඉතිහාසය පෙන්වන්න
  • ඉන්පසු මාස්ටර් මත දකුණු ක්ලික් කරන්න, පරීක්ෂා කරන්න තෝරන්න
  • සූර්යග්‍රහණය ඔබට පැවසුවහොත්, එක් දේශීය දුරස්ථව ස්වාමිවරුන් දෙදෙනෙකු සිටී, දුරස්ථය තෝරන්න

මෙයින් පසු ඔබට මූලාරම්භක මාස්ටර් වෙත නැවත සම්බන්ධ වීමට හැකි විය යුතුය.


-1

මටත් ඒ වගේ ප්‍රශ්නයක් තිබුණා. මම මගේ වෙනස්වීම් නවතා git stashදමා කලින් කළ කැපවීමකට දේශීයව ශාඛාව නැවත සකස් කරමි (මම සිතුවේ එය එයට හේතු වූ බවය) පසුව එය කළ git pullඅතර මට දැන් එම හිස වෙන් වී නැත. git stash applyඔබගේ වෙනස්කම් නැවත කිරීමට අමතක නොකරන්න .


-2
git checkout checksum  # You could use this to peek previous checkpoints
git status # You will see HEAD detached at checksum
git checkout master # This moves HEAD to master branch
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.