'Git reset' අහෝසි කරන්නේ කෙසේද?


1346

අහෝසි කිරීමට ඇති සරලම ක්‍රමය කුමක්ද?

git reset HEAD~

විධානය? දැනට, මට සිතිය හැකි එකම ක්‍රමය දුරස්ථ repo එකකින් "git clone http: // ..." කිරීමයි.


2
යමෙක් දෘ reset යළි පිහිටුවීම අහෝසි කරන්නේ කෙසේදැයි සොයන්නේ නම්, git reset අහෝසි කිරීම පරීක්ෂා කරන්න --hard HEAD ~ 1 . විසඳුම් ඉතා සමාන ය.


3
එය සම්බන්ධ ප්‍රශ්නවල අනුපිටපතක් නොවේ --hard! අහම්බෙන් මෙම විධානය ක්‍රියාත්මක කිරීමේ අවදානම බෙහෙවින් වැඩි ය. උදාහරණයක් ලෙස, ඔබට තනි ගොනුවක් සමඟ වේදිකා ගත කිරීමට අවශ්‍යය git reset foo-file. ඔබ ලිපිගොනු නාමයේ පළමු කොටස පමණක් ලියන්න, ස්වයංක්‍රීයව සම්පුර්ණ කිරීම සඳහා ටැබ් එක ඔබන්න, එය ඇත්ත වශයෙන්ම ශාඛා නාමයකට සම්පුර්ණ වේ, ඔබ එය නොදකින අතර git reset foo-branchඒ වෙනුවට විධානය ක්‍රියාත්මක කරන්න. Voilà
Yushin Washio

Answers:


2443

කෙටි පිළිතුර:

git reset 'HEAD@{1}'

දිගු පිළිතුර:

Git සියළුම ref යාවත්කාලීන කිරීම් වල ලොගයක් තබා ගනී (උදා: පිටවීම, යළි පිහිටුවීම, කැපවීම, ඒකාබද්ධ කිරීම). ටයිප් කිරීමෙන් ඔබට එය නැරඹිය හැකිය:

git reflog

මෙම ලැයිස්තුවේ කොතැනක හෝ ඔබට අහිමි වූ කැපවීම වේ. අපි දැන් ටයිප් git reset HEAD~කර එය අහෝසි කිරීමට අවශ්‍ය යැයි කියමු . මගේ පරාවර්තනය මේ වගේ ය:

$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]

පළමු පේළියේ HEADස්ථාන 0 කට පෙර (වෙනත් වචන වලින් කිවහොත්, වත්මන් පිහිටීම) 3f6db14; එය නැවත සැකසීමෙන් ලබා ගන්නා ලදි HEAD~. දෙවන පේළියේ සඳහන් වන්නේ HEAD1 ස්ථානයට පෙර (වෙනත් වචන වලින් කිවහොත්, යළි පිහිටුවීමට පෙර තත්වය) d27924e බවයි. එය ලබාගෙන ඇත්තේ විශේෂිත බැඳීමක් පරීක්ෂා කිරීමෙනි (එය දැන් වැදගත් නොවේ). එබැවින්, යළි පිහිටුවීම අහෝසි කිරීමට, ධාවනය කරන්න git reset HEAD@{1}(හෝ git reset d27924e).

අනෙක් අතට, ඔබ එතැන් සිට වෙනත් විධානයන් කිහිපයක් ක්‍රියාත්මක කර ඇත්නම්, එම යාවත්කාලීනය HEAD නම්, ඔබට අවශ්‍ය කැපවීම ලැයිස්තුවේ ඉහළින්ම නොපවතින අතර, ඔබ හරහා සෙවිය යුතුය reflog.

එක් අවසාන සටහනක්: reflogඔබට නැවත සැකසීමට අවශ්‍ය විශේෂිත ශාඛාව දෙස බැලීම පහසු විය හැකිය , ඒ වෙනුවට ස්වාමියා කියන්න HEAD:

$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]

මෙය සාමාන්‍යයට වඩා අඩු ශබ්දයක් තිබිය යුතුය HEAD reflog.


29
reflogමෙම අරමුණු සඳහා වඩාත් දෘශ්‍ය හා වඩා හොඳ විකල්පයක් ලෙස , මම භාවිතා කිරීමට කැමතියි git log --graph --decorate --oneline $(git rev-list -g --all). එය නම් නොකල අතු
දල්වන සියලු කොමිස්

1
දැනට පවතින ලිපිගොනු සහිත නාමාවලියක් මා සතුව ඇති බව කියමු. මෙම නාමාවලිය තුළ මම දුවමි git init, පසුව එය ක්‍රියාත්මක git reset --hardවේ. ආරම්භ කිරීම සඳහා කිසිදු ප්‍රත්‍යාවර්තයක් හෝ කිසිදු ලොගයක් නොමැත. මෙම ලිපිගොනු දැන් සව්දිය පුරවනවාද?
ඇලන්ස්

Lan ඇලන්ස්, කනගාටුවට කරුණක් නම් මා දන්නා තරමින් එම ලිපිගොනු සව්දිය පුරවා තිබීමයි. ඔබ කිසි විටෙකත් කර නොමැති නම් git add(එනම් කිසි විටෙකත් එම ගොනුවේ අනුවාදය වේදිකා ගත කර නැත), git checkoutඑසේත් නැතිනම් git reset --hardඋපස්ථයක් නොමැති එකම පිටපත (වැඩ කරන නාමාවලිය) පුපුරවා හරිනු ඇත. මම හිතනවා ඒක එහෙම වුණේ නැහැ කියලා.
මාර්ක් ලොඩාටෝ

2
git reset HEAD~12git reset HEAD@{12}අපොයි ... නෑ .. ගලවා ගැනීම සඳහා 'git reflog'! ඔහ් එය සාධාරණයිgit reset HEAD@{1}
ඩෙනිස්

විශිෂ්ට git-scm.com/blog/2011/07/11/reset.html git-reset ලිපිය කියවීමෙන් පසු , මම ටිකක් අද්භූත ය.
ඇන්ඩ්‍රි ඩ්‍රොස්ඩියුක්

200

පැරණි ප්‍රශ්නය, සහ පළ කරන ලද පිළිතුරු විශිෂ්ට ලෙස ක්‍රියා කරයි. මම වෙනත් විකල්පයක් සමඟ සම්බන්ධ වෙමි.

git reset ORIG_HEAD

ORIG_HEADකලින් සඳහන් කළ කැපවීම HEADසඳහන් කරයි.


1
මෙය විශිෂ්ටයි - ඔබට විස්තාරණය කළ හැකිද? මෙහි “ඔරිග්” කෙටි වන්නේ “මුල්” සඳහාද නැතහොත් “සම්භවය” සඳහාද? … එනම්, එය වඳුරන් ආරම්භ කිරීමට පෙර හෙඩ් සිටි ස්ථානයට නැවත සකස් වේද? නැතහොත් හෙඩ් ආරම්භයේ කොතැනද? ඔබ මීට පෙර කිහිප වතාවක් හෙඩ් ගෙන ගියහොත් කුමක් සිදුවේද git reset ORIG_HEAD? ස්තූතියි.
බෙන්ජොන්

ORIG යනු මුල් පිටපතයි, ORIG_HEAD යන්නෙන් අදහස් වන්නේ මුල් HEAD, යළි පිහිටුවීමට පෙර
සෑම් ගැලගර්

"ඒකාබද්ධ කිරීම සහ යළි පිහිටුවීම වැනි ඇතැම් මෙහෙයුම්, HEAD හි පෙර අනුවාදය ORIG_HEAD හි නව අගයකට සැකසීමට පෙර පටිගත කරන්න. ඔබට ORIG_HEAD භාවිතා කර පෙර තත්වයට යථා තත්ත්වයට පත් කිරීමට හෝ ආපසු හැරවීමට හෝ සංසන්දනයක් කිරීමට හැකිය." පොතෙන් උපුටා ගැනීම: "Git සමඟ අනුවාද පාලනය"
අමිරේසා

57

මගේ තත්වය තරමක් වෙනස්, මම git reset HEAD~තුන් වතාවක් කළා.

එය අහෝසි කිරීමට මට කළ යුතුව තිබුණි

git reset HEAD@{3}

එබැවින් ඔබට එය කළ හැකි විය යුතුය

git reset HEAD@{N}

නමුත් ඔබ git reset භාවිතා කර තිබේ නම්

git reset HEAD~3

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

git reset HEAD@{1}

Mark N} නිරූපණයෙහි දැක්වෙන පරිදි මාර්ක් පෙන්වා දුන් පරිදි reflog හි මෙහෙයුම් ගණන නිරූපණය කරයි.


2
පිළිගත් විකල්පය ඉදිරියට යාමට උදාහරණයක් සපයන්නේ නැත. පැයකට පෙර මට 1 ට වඩා ඉදිරියට යැවීමට අවශ්‍ය වූ තත්වයක එන්.අයි. එය මෙහි එක් කිරීමට අවශ්‍ය විය. Git reset HEAD ~ 3 සමඟ යළි පිහිටුවීම අහෝසි කිරීමට බලාපොරොත්තු වන අයට ප්‍රයෝජනවත් වනු ඇත
zainengineer

3
නමුත් සමහර එක GIT යළි පිහිටුවීමේ හිස ~ 3 කර ඇති නම්, ඔහු ඉක්මනින් {3} reflog GIT යළි පිහිටුවීමේ හිස ~ 3 ආදිය නොගොස් අවශ්ය වේ එය ඉවත් කිරීමට ආකාරය අපට දැකගත හැකිය, GIT යළි පිහිටුවීමේ හිස @ පොදු තත්ත්වය
zainengineer

1
මම හිතන්නේ {1} / {2 see දකින ඕනෑම කෙනෙකුට එම අංකය ඕනෑම සංශෝධන අංකයක් විය හැකි බව reflogවැටහෙනු ඇත. ~ 3 / @ {3 direction දිශාවට සංඛ්‍යා එක හා සමාන බව ඔබ එකඟ වූ නමුත් ඇත්ත වශයෙන්ම නව පිළිතුරක් අවශ්‍ය නොවීය.
ක්ලින්ට්

31

1. git reflogසියලුම යොමු යාවත්කාලීන කිරීම් ලබා ගැනීමට භාවිතා කරන්න.

2.git reset <id_of_commit_to_which_you_want_restore>

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.