Git හි නවතම දේශීය කොමිස් ඉවත් කරන්නේ කෙසේද?


21068

මම වැරදීමකින් වැරදි ලිපිගොනු Git වෙත භාර දුන්නෙමි, නමුත් මම තවම සේවාදායකයට බැඳී නොමැත.

දේශීය ගබඩාවෙන් එම මුදල් අහෝසි කරන්නේ කෙසේද?


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

92
Git අවශ්‍ය දේ ඔබ දන්නවාද? git undo, ඒක තමයි. එවිට අප විසින් සිදුකරන ලද වැරදි හසුරුවා ගැනීම සඳහා කීර්තිනාමයට ඇති කීර්තිය නැති වී යයි. කිසියම් gitවිධානයක් ක්‍රියාත්මක කිරීමට පෙර වත්මන් තත්වය git stack මතට තල්ලු කිරීමෙන් ක්‍රියාත්මක කරන්න . එය ක්‍රියාකාරීත්වයට බලපානු ඇත, එබැවින් එය සක්‍රීය කළ යුතුද යන්න පිළිබඳව වින්‍යාස ධජයක් එක් කිරීම වඩාත් සුදුසුය.
යිමින් රොං

11
ImYiminRong එය Git හි aliasවිශේෂාංගයෙන් කළ හැකිය : git-scm.com/book/en/v2/Git-Basics-Git-Aliases
Edric

3
Om රොමේන් වැලරි - අහෝසි කිරීම අනෙක් සෑම තැනකම ක්‍රියාත්මක වේ.
යිමින් රොං

1
ImYiminRong එය මිලදී ගැනීම නොවේ. මිනිසුන් තවමත් පැකිලී ගොස් අහෝසි නොකළ යුතු දේ අහෝසි කරනු ඇත. නමුත් වඩා වැදගත් දෙය නම්, git reflogඔබ විස්තර කරන දෙයට දැනටමත් සමීපව ඇති නමුත් කළ යුතු දේ පිළිබඳව පරිශීලකයාට වැඩි පාලනයක් ලබා දීමයි. නමුත් කරුණාකර, නැත, "අහෝසි කිරීම" සෑම තැනකම එක හා සමානව ක්‍රියා නොකරන අතර, විශේෂාංගය සාක්ෂාත් කර ගැනීම සඳහා මිනිසුන් විවිධ දේ බලාපොරොත්තු වේ. අවසන් කැපවීම අහෝසි කරන්න? අවසන් ක්‍රියාව අහෝසි කරන්න? අවසාන ක්‍රියාව තල්ලුවක් නම්, හරියටම නිවැරදි කරන්න, (යළි පිහිටුවීම සහ තල්ලු කිරීම) හෝ (ආපසු හරවා තල්ලු කිරීම)?
රොමේන් වලරි

Answers:


22869

බැඳීමක් අහෝසි කර නැවත කරන්න

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. ඔබට අවලංගු කිරීමට අවශ්‍ය වන්නේ මෙයයි.
  2. මෙය ඔබගේ වැඩ කරන ගසට කිසිවක් නොකරයි (තැටියේ ඇති ඔබගේ ලිපිගොනු වල තත්වය), නමුත් බැඳීම ඉවත් කර ඔබ සිදු කළ වෙනස්කම් අස්ථිරව තබයි (එබැවින් ඒවා "කැපවීම සඳහා වේදිකාගත නොවූ වෙනස්කම්" ලෙස දිස්වනු ඇත git status, එබැවින් ඔබට අවශ්‍ය වනු ඇත කැපවීමට පෙර ඒවා නැවත එක් කරන්න). ඔබ නම් පමණක් කිරීමට අවශ්ය එක් පෙර තවත් වෙනස්කම් සිදු හෝ පණිවුඩය සිදු වෙනස් 1 , ඔබ භාවිතා කළ හැකි git reset --soft HEAD~මෙන් වන, ඒ වෙනුවට git reset HEAD~2 එහෙත්, ඔබේ දැනට පවතින වෙනස්කම් නිරත පිටත් වේ.
  3. වැඩ කරන ගස් ලිපිගොනු වල නිවැරදි කිරීම් කරන්න.
  4. git add ඔබගේ නව කැපවීමට ඇතුළත් කිරීමට අවශ්‍ය ඕනෑම දෙයක්.
  5. පැරණි බැඳීම් පණිවිඩය නැවත භාවිතා කරමින් වෙනස්කම් සිදු කරන්න. resetපැරණි හිස පිටපත් කළේ .git/ORIG_HEAD; commitසමඟ -c ORIG_HEADසංස්කාරකයක් විවෘත කරනු ඇත, එය මුලින් පැරණි බැඳීම් වලින් ලොග් පණිවිඩය අඩංගු වන අතර එය සංස්කරණය කිරීමට ඔබට ඉඩ සලසයි. ඔබට පණිවිඩය සංස්කරණය කිරීමට අවශ්‍ය නොවේ නම්, ඔබට -Cවිකල්පය භාවිතා කළ හැකිය.

කෙසේ වෙතත්, ඔබ දර්ශකයට කිසියම් නව වෙනස්කමක් එකතු කර ඇත්නම්, භාවිතා commit --amendකිරීමෙන් ඒවා ඔබගේ පෙර කැපවීමට එකතු වනු ඇත.

කේතය දැනටමත් ඔබේ සේවාදායකයට තල්ලු කර ඇති අතර ඉතිහාසය නැවත ලිවීමට ඔබට අවසර තිබේ නම් (නැවත ප්‍රතිස්ථාපනය කරන්න) එවිට:

git push origin master --force

ඔබට මෙම පිළිතුර දෙස බැලිය හැකිය:

HEAD පෙර ස්ථානයකට ගෙන යන්නේ කෙසේද? (වෙන්වූ හිස) සහ අහෝසි කරන්න

ඉහත පිළිතුර මඟින් ඔබට git reflog,ආපසු හැරවීමට බලාපොරොත්තු වන SHA-1 යනු කුමක්දැයි සොයා ගැනීමට භාවිතා කරනු ඇත. ඉහත විස්තර කර ඇති පරිදි විධාන අනුක්‍රමය භාවිතා කිරීම අහෝසි කිරීමට අවශ්‍ය ස්ථානය ඔබ සොයාගත් පසු.


1 කෙසේ වෙතත්, ඔබ ඔබගේ කැපවීමේ පණිවිඩයේ වැරැද්දක් කර ඇත්නම් කලින් කළ කැපවීමකට නැවත සැකසීමට අවශ්‍ය නොවන බව සලකන්න . git resetපහසුම විකල්පය නම් (ඔබ එතැන් සිට සිදුකරන ලද කිසියම් වෙනස්කමක් අස්ථිර කිරීම) සහ පසුව git commit --amend, අවසාන කැපවීමේ පණිවිඩය සමඟ පූර්ව ජනගහනය සහිත ඔබගේ පෙරනිමි බැඳීම් පණිවිඩ සංස්කාරකය විවෘත කරනු ඇත.

2 HEAD~ සමාන වේ HEAD~1. එසේම, බලන්න හි ඇති හෙඩ් යනු කුමක්ද? . ඔබට බහු කොමිස් ඉවත් කිරීමට අවශ්‍ය නම් එය ප්‍රයෝජනවත් වේ.


472
කැපවීම වැරදි ශාඛාවකට නම්, ඔබට git checkout theRightBranchසියලු වෙනස්වීම් අදියරයන් සමඟ කළ හැකිය . මට කරන්න තිබුනා වගේ.
ෆ්‍රෑන්ක් ෂෙයාර්

491
ඔබ ඩොස් හි වැඩ කරන්නේ නම්, ඒ වෙනුවට git reset --soft HEAD^ඔබ භාවිතා කළ git reset --soft HEAD~1යුතුය. OS යනු ඩොස් හි අඛණ්ඩ අක්‍ෂරයකි, එබැවින් එය නිසියාකාරව ක්‍රියා නොකරනු ඇත. එසේම, --softපෙරනිමිය වේ, එබැවින් ඔබට කැමති නම් එය අතහැර දමා පැවසිය git reset HEAD~1හැකිය.
රයන් ලුන්ඩි

119
zsh පරිශීලකයින්ට ලැබිය හැකිය: zsh: no matches found: HEAD^- ඔබට පැන යා යුතුය ^ එනම්git reset --soft HEAD\^
tnajdek

7
අහම්බෙන් කිවහොත්, git commit -aඑය -aඅතහැර දැමිය යුතු අවස්ථාව නිකුත් කළේ නම් පිළිතුර නිවැරදි නොවේ . කුමන අවස්ථාවක දී, --soft(එහි --mixedප්‍රති result ලය පෙරනිමිය වනු ඇත) ඉවත්ව යාම වඩා හොඳය , එවිට ඔබ සිදු කිරීමට අදහස් කළ වෙනස්කම් නැවත ආරම්භ කළ හැකිය.
dmansfield

6
YIcyBrk git add යනු විධානයකි. git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--chmod=(+|-)x] [--] [<pathspec>…​]
අෂ්රෆ්.ෂ්ක් 786

10736

බැඳීමක් අවලංගු කිරීම එය ක්‍රියාත්මක වන්නේ කෙසේදැයි ඔබ නොදන්නේ නම් එය ටිකක් බියකරු ය. ඔබ තේරුම් ගන්නේ නම් එය ඇත්තෙන්ම පුදුම සහගතය.

ඔබට මෙය ඇති බව පවසන්න, එහිදී C යනු ඔබේ HEAD වන අතර (F) ඔබේ ලිපිගොනු වල තත්වය වේ.

   (F)
A-B-C
    ↑
  master

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

git reset --hard HEAD~1

ප්රති result ලය:

 (F)
A-B
  ↑
master

දැන් B යනු HEAD ය. ඔබ භාවිතා කළ නිසා --hard, ඔබගේ ලිපිගොනු B හි ඔවුන්ගේ තත්වයට යලි සකසනු ලැබේ.

අහ්, නමුත් සී සිදු කිරීම ව්‍යසනයක් නොවේ යැයි සිතමු, නමුත් ටිකක් .තින්. ඔබට කැපවීම අහෝසි කිරීමට අවශ්‍ය නමුත් වඩා හොඳ කැපවීමක් කිරීමට පෙර ඔබේ වෙනස්කම් ටිකක් සංස්කරණය කිරීම සඳහා තබා ගන්න . C වෙතින් ඔබේ හිස ලෙස නැවත මෙතැන් සිට ආරම්භ වේ:

   (F)
A-B-C
    ↑
  master

ඔබට මෙය කළ හැකිය --hard:

git reset HEAD~1

මෙම අවස්ථාවේ දී ප්රති result ලය:

   (F)
A-B-C
  ↑
master

මෙම අවස්ථා දෙකෙහිම, HEAD යනු නවතම කැපවීම පිළිබඳ දර්ශකයක් පමණි. ඔබ එය කරන විට git reset HEAD~1, ඔබ ගිට්ට කියනවා හෙඩ් පොයින්ටරය එක කැපවීමකින් පසුපසට ගෙන යන්න. නමුත් (ඔබ භාවිතා නොකරන්නේ නම් --hard) ඔබ ඔබේ ලිපිගොනු එලෙසම තබයි. දැන් git statusඔබ සී වෙත පරීක්ෂා කළ වෙනස්කම් පෙන්වයි. ඔබට කිසිවක් අහිමි වී නැත!

සැහැල්ලු ස්පර්ශය සඳහා, ඔබට ඔබගේ බැඳීම අහෝසි කළ හැකි නමුත් ඔබේ ලිපිගොනු සහ දර්ශකය තබන්න :

git reset --soft HEAD~1

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

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

නෑ, එය නැවත ලබා ගැනීමට තවමත් ක්‍රමයක් තිබේ. ටයිප් කරන්න git reflog, ඔබ එහා මෙහා ගෙන ගිය (අර්ධ වශයෙන්) ෂැස් (එනම් හැෂ්) ලැයිස්තුවක් ඔබට පෙනෙනු ඇත. ඔබ විනාශ කළ කැපවීම සොයාගෙන මෙය කරන්න:

git checkout -b someNewBranchName shaYouDestroyed

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


15
පරෙස්සම් වන්න! ඔබගේ වැරදිසහගත කැපවීම (වේගයෙන් ඉදිරියට) ඒකාබද්ධ කිරීමක් නම් මෙය ඔබ අපේක්ෂා කරන දේ නොකරනු ඇත! ඔබේ හිස ඒකාබද්ධ කිරීමේ කැපවීමක සිටී නම් (උදා: ඒකාබද්ධ ශාඛා අංගය මාස්ටර් බවට පත් කරයි), git reset --hard~1විශේෂාංග ශාඛාව තුළ ඇති අවසාන කැපවීම සඳහා ප්‍රධාන ශාඛාව යොමු කරයි. මෙම අවස්ථාවෙහිදී සාපේක්ෂ විධානය වෙනුවට නිශ්චිත බැඳීම් හැඳුනුම්පත භාවිතා කළ යුතුය.
ක්‍රිස් කෙරෙක්ස්

90
තීරණාත්මක කරුණක් මග හැරී ඇත: එම කැපවීම කලින් දුරස්ථයට තල්ලු කරනු ලැබුවේ නම්, ඕනෑම 'අහෝසි' මෙහෙයුමක්, කෙතරම් සරල වුවත්, ඔවුන්ගේ දේශීය පිටපතෙහි මෙම කැපවීම ඇති අනෙක් පරිශීලකයින්ට ඉමහත් වේදනාවක් හා වේදනාවක් ඇති කරයි, ඔවුන් අනාගතයේදී 'git pull' කරන විට. එබැවින්, බැඳීම දැනටමත් 'තල්ලු' කර ඇත්නම්, ඒ වෙනුවට මෙය කරන්න: git revert <bad-commit-sha1-id> git push origin:
FractalSpace

12
RactFractalSpace, එය "දැවැන්ත වේදනාවක් හා දුක් වේදනා" ඇති නොකරයි. කණ්ඩායමක් සමඟ Git භාවිතා කරන විට මම බල තල්ලු කිහිපයක් කර ඇත. ඒ සඳහා අවශ්‍ය වන්නේ සන්නිවේදනය පමණි.
රයන් ලුන්ඩි

14
Y කයිරෙලාසා මගේ සේවා ස්ථානයේ, මුළු කණ්ඩායමේම කාර්ය ප්‍රවාහය අවුල් කර, පසුව * * නිවැරදි කරන්නේ කෙසේදැයි ඔවුන්ට පැවසීම 'සන්නිවේදනය' ලෙස හැඳින්වේ. git history re-write යනු විනාශකාරී මෙහෙයුමක් වන අතර එමඟින් repo හි කොටස් කුණු කූඩයට දමනු ලැබේ. පැහැදිලි සහ ආරක්ෂිත විකල්ප ඇති අතර එහි භාවිතය සඳහා අවධාරනය කිරීම වගකීම් විරහිත ය.
FractalSpace

14
මට අවශ්‍ය වූයේ බැඳීමක් නිරුවත් කර නැවත එය කිසි විටෙකත් නොදැකීමයි. මම ඔබේ ආදර්ශය භාවිතා කළ --hardනමුත් මා නොදැන සිටි දෙය නම්, මගේ වැඩ කරන ගසෙහි මා විසින් සිදුකරන ලද අස්ථිර වෙනස්කම් සියල්ලම නිරුවත් වන බවයි! පසුකාලීන බැඳීමක කොටසක් ලෙස මම මෙම ලිපිගොනු සිදු කිරීමට ගියෙමි. දැන් මෙම ලිපිගොනු නැවත ලබා ගත නොහැකි බව පෙනේ - ඔබ විසින් පළ කරන ලද විසඳුම පවා මම උත්සාහ කළෙමි, reflogනමුත් මෙය කලින් සැලසුම් නොකළ වෙනස්කම් යථා තත්වයට පත් කළේ නැත.
ඇඩම් බර්ලි

2131

ඔබ ඔබේ කැපවීම දැනටමත් ප්‍රසිද්ධ කර තිබේද නැද්ද යන්න මත පදනම්ව (ඔබගේ දුරස්ථ ගබඩාවට තල්ලු කර ඇත) ඔබේ අවසාන කැපවීම "අහෝසි කිරීමට" ක්‍රම දෙකක් තිබේ:

දේශීය බැඳීමක් අහෝසි කරන්නේ කෙසේද

මම දේශීයව කැපවූ බව කියමු, නමුත් දැන් මට එම කැපවීම ඉවත් කිරීමට අවශ්‍යය.

git log
    commit 101: bad commit    # Latest commit. This would be called 'HEAD'.
    commit 100: good commit   # Second to last commit. This is the one we want.

කැපවෙන්නේ පසුගිය කිරීමට පෙර එය මාර්ගය නැවත සියල්ල නැවත, අපි අවශ්ය resetපෙර සිදු කිරීමට HEAD:

git reset --soft HEAD^     # Use --soft if you want to keep your changes
git reset --hard HEAD^     # Use --hard if you don't care about keeping the changes you made

දැන් git logඅපගේ අවසාන කැපවීම ඉවත් කර ඇති බව පෙන්වනු ඇත.

මහජන බැඳීමක් අවලංගු කරන්නේ කෙසේද

ඔබ දැනටමත් ඔබගේ බැඳීම් ප්‍රසිද්ධ කර තිබේ නම්, ඔබට නව බැඳීමක් නිර්මාණය කිරීමට අවශ්‍ය වනු ඇති අතර එමඟින් ඔබගේ පෙර කැපවීමේ (වත්මන් HEAD) ඔබ විසින් සිදු කරන ලද වෙනස්කම් "ආපසු හරවනු" ඇත.

git revert HEAD

ඔබගේ වෙනස්කම් දැන් ආපසු හරවා ඔබ කැපවීමට සූදානම් වනු ඇත:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

වැඩි විස්තර සඳහා, Git Basics - අහෝසි කරන දේවල් බලන්න .


101
මට මෙම පිළිතුර වඩාත් පැහැදිලිව හමු විය. git revert HEAD^පෙර නොවේ, පෙර පැවති පෙර වේ. මම කළා: git revert HEADපසුව නැවත තල්ලු කර එය ක්‍රියාත්මක වුණා :)
nacho4d

Git ඔබෙන් ඇසුවොත් "තවත්?" ඔබ මෙම විධානයන් උත්සාහ කරන විට, මෙම පිළිතුරෙහි විකල්ප සින්ටැක්ස් භාවිතා කරන්න: stackoverflow.com/a/14204318/823470
tar

1745

ඔබට අවශ්‍ය ආකාරයට දේවල් ලබා ගැනීමට ගොනු එක් කරන්න / ඉවත් කරන්න:

git rm classdir
git add sourcedir

ඉන්පසු බැඳීම සංශෝධනය කරන්න:

git commit --amend

නව දර්ශක තත්වය පිළිබිඹු කිරීම සඳහා පෙර, වැරදි කැපවීම සංස්කරණය කරනු ලැබේ - වෙනත් වචන වලින් කිවහොත්, ඔබ කිසි විටෙකත් වැරැද්ද මුලින් නොකළාක් මෙන් වනු ඇත.

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


2
FYI: මෙය මගේ සියලුම ලිපිගොනු ඉවත් කරන අතර මට වෙනස්කම් නැති විය.
egorlitvinenko

UPD: කෙසේ වෙතත්, මම එය reflog භාවිතා කර ප්‍රතිෂ් ored ාපනය කර ඇත. නමුත් රිසිට්පත ආරම්භක බැඳීම සඳහා ක්‍රියා කළේ නැත.
egorlitvinenko

1
git rm --cachedලිපිගොනු ගොනු පද්ධතියේ තබා ගැනීමට භාවිතා කර ඒවා git දර්ශකයෙන් පමණක් මකා දමන්න!
xuiqzy

1017
git rm yourfiles/*.class
git commit -a -m "deleted all class files in folder 'yourfiles'"

හෝ

git reset --hard HEAD~1

අවවාදයයි: ඉහත විධානය මඟින් .javaඔබට කිරීමට අවශ්‍ය වූ ගොනු (සහ වෙනත් ඕනෑම ගොනු) වල වෙනස් කිරීම් ස්ථිරවම ඉවත් කරනු ඇත .

මෙම hard resetකිරීමට HEAD-1සිදු ඔබේ වැරදි පෙර සිදු රාජ්ය ඔබේ ක්රියාකාරී පිටපතක් සකස් කරනු ඇත.


19
git commit -a -m ""හෝ git commit -am ""ස්වභාවයෙන්ම! :]
trejder

තවත් 'කෙටිමං' තොගයක් භාවිතා කිරීම; ඔබට සෑම දෙයක්ම වේදිකා ගත කිරීමට අවශ්‍ය නම් (git add අහෝසි කරන්න) git stash, එසේ නම්git stash pop
seanriordan08

778

අන්තිම බැඳීම වෙනස් කිරීමට

දර්ශකයේ ඇති ගොනු ප්රතිස්ථාපනය කරන්න:

git rm --cached *.class
git add *.java

එය පුද්ගලික ශාඛාවක් නම්, බැඳීම සංශෝධනය කරන්න:

git commit --amend

නැතහොත්, එය හවුල් ශාඛාවක් නම්, නව කැපවීමක් කරන්න:

git commit -m 'Replace .class files with .java files'


( පෙර බැඳීමක් වෙනස් කිරීමට , නියම අන්තර්ක්‍රියාකාරී නැවත භාවිතා කිරීම භාවිතා කරන්න .)


ProTip ™: එක් කරන්න *.classවෙත gitignore නැවත මේ සිදුවෙමින් නතර කිරීමට.


බැඳීමක් ආපසු හැරවීමට

අවසාන කැපවීම වෙනස් කිරීමට ඔබට අවශ්‍ය නම් බැඳීමක් සංශෝධනය කිරීම වඩාත් සුදුසු විසඳුමකි, නමුත් වඩාත් පොදු විසඳුමකි reset.

පහත දැක්වෙන ඕනෑම බැඳීමකට ඔබට Git නැවත සැකසිය හැකිය:

git reset @~N

Nපෙර කොමිස් ගණන කොහේද HEAD, සහ @~පෙර කැපවීමට නැවත සකසනු ලැබේ.

එබැවින්, බැඳීම සංශෝධනය කරනවා වෙනුවට, ඔබට මෙය භාවිතා කළ හැකිය:

git reset @~
git add *.java
git commit -m "Add .java files"

පරීක්ෂා කරන්න git help reset, පිළිබඳව විශේෂයෙන් කොටස් --soft --mixedහා --hardමෙම කරන්නේ කුමක්ද යන්න පිළිබඳ වඩා හොඳ අවබෝධයක් සඳහා,.

Reflog

ඔබ අවුල් වුවහොත්, අතහැර දැමූ කොමිස් සොයා ගැනීමට ඔබට සෑම විටම reflog භාවිතා කළ හැකිය:

$ git reset @~
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~
2c52489 HEAD@{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started



2
අනාගතයේදී කියවන අය සඳහා - git revertඑය වෙනම විධානයක් බව කරුණාවෙන් සලකන්න - එය මූලික වශයෙන් තනි කොමිසමක් 'නැවත සකසයි'.
BKSpurgeon

682

භාවිතා කරන්න git revert <commit-id>.

බැඳීම් හැඳුනුම්පත ලබා ගැනීමට, භාවිතා කරන්න git log.


15
එයින් අදහස් කරන්නේ කුමක්ද, චෙරි කැපවීම තෝරා ගන්න? මගේ නඩුවේදී, මම ගොනුවක් සංස්කරණය කරන විට වැරදි ශාඛාවක සිටියෙමි. මම එය කළ විට මම තේරුම් ගත්තා මම වැරදි ශාඛාවක සිටින බව. "Git reset --soft HEAD ~ 1" භාවිතා කිරීමෙන් මා කැපවීමට මොහොතකට පෙර නැවත පැමිණියේය, නමුත් දැන් මම නිවැරදි ශාඛාව පරීක්ෂා කර බැලුවහොත්, වැරදි ශාඛාවක ඇති ගොනුවේ වෙනස්කම් අහෝසි කරන්නේ කෙසේ ද? ගොනුව) නිවැරදි ශාඛාවේද?
තාරකා විද්‍යා

මම දැන් භාවිතා git revert commit-idකළේ චාම් එකක් වගේ. ඇත්ත වශයෙන්ම එවිට ඔබට ඔබගේ වෙනස්කම් තල්ලු කිරීමට අවශ්‍ය වනු ඇත.
කේසි රොබින්සන්

8
මම විශ්වාස කරන්නේ එය git cherry-pick <<erroneous-commit-sha>>@astronomerdave වනු ඇති බවයි . සිට, අවුරුදු 2 කට ආසන්න-සිට-පක්ෂයට.
ටොම් හොවාර්ඩ්

Ris ක්‍රිස්: චෙරි පික් වෙනුවට නැවත භාවිතා කරන්න. එය උසස් චෙරි අච්චාරු නිසා
ඉයුජන් කොන්කොව්

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

532

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

git reset --hard HEAD^1

(මෙම විධානය මඟින් ඔබගේ සම්පූර්ණ කැපවීම නොසලකා හරිනු ඇති අතර ඔබගේ වෙනස්කම් ඔබගේ දේශීය වැඩ කරන ගසෙන් සම්පූර්ණයෙන්ම නැති වී යනු ඇත). ඔබට ඔබගේ බැඳීම අහෝසි කිරීමට අවශ්‍ය නම්, නමුත් ඔබට වේදිකා ගතවන ස්ථානයෙහි ඔබගේ වෙනස්කම් අවශ්‍ය නම් (ඊට පසුව සිදු කිරීමට පෙර git add) පහත දැක්වෙන විධානය කරන්න.

git reset --soft HEAD^1

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

git reset HEAD

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

තව


13
@ එස්එම්ආර්, ඔබේ උදාහරණයේ දී, සියල්ලම යොමු වන්නේ වත්මන් හෙඩ් වෙත පමණි. HEAD ^ = HEAD ^ 1. මෙන්ම HEAD ^ 1 = HEAD ~ 1. ඔබ HEAD ~ 2 භාවිතා කරන විට, ~ සහ ^ සංකේත අතර වෙනසක් ඇත. ඔබ ~ 2 භාවිතා කරන්නේ නම් “පළමු දෙමව්පියන්ගේ පළමු දෙමව්පියන්” හෝ “ආච්චිලා සීයලා” යන්නයි.
මධන් අයියාසාමි

501

ඔබ Git Extras ස්ථාපනය කර ඇත්නම්, ඔබට git undoනවතම බැඳීම අහෝසි කිරීමට ධාවනය කළ හැකිය . git undo 3අන්තිම කොමිස් තුන අහෝසි කරනු ඇත.


470

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

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To git@bitbucket.org:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

25
හවුල් ගබඩාවක ඉතිහාසය නැවත ලිවීම සාමාන්‍යයෙන් ඉතා නරක අදහසකි. ඔබ කරන්නේ කුමක්දැයි ඔබ දන්නවා යැයි මම සිතමි, අනාගත පා readers කයින් ද එසේ කරනු ඇතැයි මම බලාපොරොත්තු වෙමි.
බ්‍රැඩ් කොච්

ඔව් පෙරළීම භයානකයි. ඔබ තල්ලු කිරීමට පෙර ඔබේ වැඩ කරන පිටපත අපේක්ෂිත තත්වයේ පවතින බවට වග බලා ගන්න. තල්ලු කරන විට අනවශ්‍ය කොමිස් ස්ථිරවම මැකෙනු ඇත.
neoneye

6
"සැබෑ ලෝකයේ මෙන්ම, ඔබට ඉතිහාසය නැවත ලිවීමට අවශ්‍ය නම්, ඔබට කුමන්ත්‍රණයක් අවශ්‍යය: සෑම කෙනෙකුම කුමන්ත්‍රණයට සම්බන්ධ විය යුතුය (අවම වශයෙන් ඉතිහාසය ගැන දන්නා සෑම කෙනෙකුම, එනම් ශාඛාවෙන් ඉවත් වූ සෑම කෙනෙකුම) . " මුලාශ්‍රය: stackoverflow.com/a/2046748/334451
මිකෝ රන්ටලයිනන්

440

මම git rebase -iමෙම රැකියාව සඳහා භාවිතා කිරීමට කැමැත්තක් දක්වන්නෙමි, මන්ද මට හොඳ ලැයිස්තුවක් පැන නගින අතර එයින් මිදීමට මට කළ හැකි දේ තෝරා ගත හැකිය. එය මෙහි වෙනත් පිළිතුරු තරම් සෘජු නොවිය හැකි නමුත් එය නිවැරදි යැයි හැඟේ .

ඔබට ලැයිස්තුගත කිරීමට කොපමණ කොමිස් ප්‍රමාණයක් තෝරන්න, ඉන්පසු මේ ආකාරයට ආයාචනා කරන්න (අවසාන තුන බඳවා ගැනීමට)

git rebase -i HEAD~3

නියැදි ලැයිස්තුව

pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support

එවිට Git ඔබ ඉවත් කරන ඕනෑම රේඛාවක් සඳහා වන කොමිස් ඉවත් කරයි.


422

පෙර දේශීය බැඳීම නිවැරදි කරන්නේ කෙසේද

ඉටු කිරීම සඳහා git-gui (හෝ ඊට සමාන) භාවිතා කරන්න git commit --amend. GUI වෙතින් ඔබට බැඳීම් වලින් තනි ගොනු එකතු කිරීමට හෝ ඉවත් කිරීමට හැකිය. ඔබට බැඳීම් පණිවිඩය වෙනස් කළ හැකිය.

පෙර දේශීය බැඳීම අහෝසි කරන්නේ කෙසේද

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

අනතුරු ඇඟවීමේ වචනය : නොසැලකිලිමත් ලෙස භාවිතා කිරීම git resetඔබේ වැඩ කරන පිටපත අවුල් සහගත තත්වයකට ගෙන ඒමට හොඳ ක්‍රමයකි. Git නවකතාවන්ට හැකි නම් මෙය වළක්වා ගන්නා ලෙස මම නිර්දේශ කරමි.

මහජන බැඳීමක් අවලංගු කරන්නේ කෙසේද

වෙනස්කම් අහෝසි කිරීම සඳහා ප්‍රතිලෝම චෙරි පික් ( git-revert ) සිදු කරන්න.

ඔබ තවමත් ඔබේ ශාඛාවට වෙනත් වෙනස්කම් කර නොමැති නම්, ඔබට සරලවම කළ හැකිය ...

git revert --no-edit HEAD

ඉන්පසු ඔබගේ යාවත්කාලීන කළ ශාඛාව හවුල් ගබඩාවට තල්ලු කරන්න.

බැඳීම් ඉතිහාසය විසින් කොමිස් දෙකම වෙන වෙනම පෙන්වනු ඇත .


උසස්: පොදු ගබඩාවේ පෞද්ගලික ශාඛාව නිවැරදි කිරීම

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

තවද සටහන් කරන්න: වෙනත් අයෙකු ශාඛාවේ වැඩ කරන්නේ නම් ඔබට මෙය කිරීමට අවශ්‍ය නැත.

git push --delete (branch_name) ## remove public version of branch

ඔබේ ශාඛාව දේශීයව පිරිසිදු කර නැවත සකස් කරන්න ...

git push origin (branch_name)

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


8
gitk --all $(git reflog | cut -c1-7)&ඔබට '--amend' බැඳීමක් අහෝසි කිරීමට අවශ්‍ය නම් පෙර සංශෝධනය සොයා ගැනීමට උපකාරී වේ.
නොබාර්

4
හවුල් ගබඩාවකට තල්ලු කිරීමට පෙර ඔබ රහස් තොරතුරු ඉවත් කිරීමට උත්සාහ කරන්නේ නම්, ආපසු හැරවීමක් කිරීම ඔබට උදව් නොකරනු ඇත, මන්ද එම තොරතුරු පෙර කැපවීමේ ඉතිහාසය තුළ තවමත් පවතින බැවිනි. වෙනස කිසි විටෙකත් අන් අයට නොපෙනෙන බව සහතික කිරීමට ඔබට අවශ්‍ය නම්git reset
ජෙරිකෝ

මම හිතන්නේ 'පුද්ගලික' / 'පොදු' වඩාත් නිවැරදිව 'දේශීය' / 'දුරස්ථ' වනු ඇත.
නොබාර්

දුරස්ථ ගබඩාවක පෞද්ගලික ශාඛාවක් නිවැරදි කිරීම ද සරලව කළ හැකියgit push origin (branch_name) --force
නොබාර්

336

ඔබට එය ස්ථිරවම අහෝසි කිරීමට අවශ්‍ය නම් සහ ඔබ යම් ගබඩාවක් ක්ලෝන කර ඇත

කැපවීමේ හැඳුනුම්පත දැකිය හැකිය

git log 

එවිට ඔබට කළ හැකිය -

git reset --hard <commit_id>

git push origin <branch_name> -f

ඔබ "<commit_id>" භාවිතා නොකර "git reset --hard" භාවිතා නොකරන්නේ නම් කුමක් කළ යුතුද? මට සාමාන්‍යයෙන් අවශ්‍ය වන්නේ මා මෙතෙක් කර නොමැති මගේ නවතම යාවත්කාලීනයන් ඉවත් කර මා කළ නවතම කැපවීම වෙත ආපසු යාමටයි, මම සෑම විටම "git reset --hard" භාවිතා කරමි.
ජයිම් මොන්ටෝයා

3
AJaimeMontoya ඔබට භාවිතා කළ හැකි නවතම වෙනස්කම් අහෝසි කිරීමට git reset --hard, නමුත් ඔබට අවසාන "n" ඉවත් කිරීමට සිදු වුවහොත් ඔබ SHA
poorva සඳහන් කරන්න

334

ඔබ අවුල් සහගත නමුත් තල්ලු නොකළේ නම්,

git reset --soft HEAD~1

HEAD ~ 1 යනු හිසට පෙර කැපවීම සඳහා වූ කෙටි යෙදුමකි. ඔබට නැවත සැකසීමට අවශ්‍ය නම් විකල්පයක් ලෙස ඔබට හැෂ් හි SHA-1 වෙත යොමු විය හැකිය . --soft විකල්පය මඟින් බැඳීම මකා දැමිය හැකි නමුත් එය ඔබගේ වෙනස් කළ ලිපිගොනු සියල්ලම "කැපවිය යුතු වෙනස්කම්" වලට ඉඩ දෙනු ඇත.

හිසෙහි " --හාර්ඩ් " භාවිතා කිරීමට පෙර කැපවීමෙන් පසුව වැඩ කරන ගසෙහි ලුහුබැඳ ඇති ලිපිගොනු වල යම් වෙනස්කමක් ඉවත් කිරීමට ඔබට අවශ්‍ය නම් .

හෝ

ඔබ දැනටමත් තල්ලු කර යමෙකු ඇදගෙන ගියහොත් එය සාමාන්‍යයෙන් මගේ කාරණය නම්, ඔබට git reset භාවිතා කළ නොහැක . කෙසේ වෙතත් ඔබට git revert එකක් කළ හැකිය ,

git revert HEAD

මෙය අහම්බෙන් සිදු වූ බැඳීම මගින් හඳුන්වා දුන් සියල්ල ආපසු හරවන නව බැඳීමක් නිර්මාණය කරනු ඇත.


මම 2 වන නඩුවේ සිටිමි, නමුත් මම "git revert HEAD" කරන විට එය පවසන්නේ "දෝෂය: කැපවීම [ID] ඒකාබද්ධ කිරීමක් නමුත් කිසිදු විකල්පයක් ලබා නොදුනි. මාරාන්තික: ප්‍රතිවර්තනය අසාර්ථක විය". යෝජනා තිබේද?
metaforge

2
එක් වරකට වඩා වැඩි ගණනක් 'අහෝසි කිරීමට' අවශ්‍ය වූ විට ඔබට ප්‍රයෝජනවත් හෝ HEAD~1ප්‍රදර්ශනය කර ඇති පරිදි සැබෑ හැෂ් භාවිතා කළ හැකි බව සඳහන් කිරීම වටී . git log --statgit reflog
ccpizza

284

මත SourceTree (GitHub සඳහා අතුරු මුහුණත්), ඔබ සිදු වන අතර 'ප්රතිවිකුණුම් කැප' නැහැ දකුණු-ක්ලික් කරන්න හැක. මෙය ඔබගේ වෙනස්කම් අහෝසි කළ යුතුය.

පර්යන්තය මත:

ඔබට විකල්පයක් ලෙස භාවිතා කළ හැකිය:

git revert

හෝ:

git reset --soft HEAD^ # Use --soft if you want to keep your changes.
git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes.

263

තනි විධානයක්:

git reset --soft 'HEAD^' 

අවසාන දේශීය බැඳීම අහෝසි කිරීමට එය විශිෂ්ටයි!


11
මට git reset --soft "HEAD ^" ද්විත්ව උපුටා දැක්වීම් සමඟ ලිවීමට අවශ්‍ය විය, මන්ද මම එය වින්ඩෝස් විධාන විමසුමෙන් ලියමි.
එනා

253

පහත විධානය භාවිතා කරමින් එය නැවත සකසන්න git:

git reset --soft HEAD~1

පැහැදිලි කරන්න: කුමක් git resetකරන්නේද, එය මූලික වශයෙන් resetඔබ ආපසු යාමට කැමති ඕනෑම කැපවීමකට ය, එවිට ඔබ එය --softයතුර සමඟ ඒකාබද්ධ කළහොත් එය ආපසු යනු ඇත, නමුත් ඔබේ ගොනුවේ (ය) වෙනස්කම් තබා ගන්න, එවිට ඔබ නැවත වේදිකාවට පිවිසෙනු ඇත ගොනුව දැන් එකතු HEADකර ඇති අතර එය ශාඛාවේ ප්‍රධානියා වන අතර ඔබ ~1(මෙම අවස්ථාවේදී ඔබත් භාවිතා කරයි HEAD^) සමඟ සංයුක්ත වුවහොත් , එය ආපසු යන්නේ ඔබට අවශ්‍ය දේ එක් කැපවීමක් පමණි ...

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

Git හි අවසන් කොමිසම අහෝසි කරන්නේ කෙසේද?


239

අන්තිම Git බැඳීම අහෝසි කරන්නේ කෙසේද?

අන්තිම බැඳීමට පෙර තිබූ ආකාරයට සියල්ල නැවත යථා තත්ත්වයට පත් කිරීම සඳහා, අපි HEAD ට පෙර බැඳීමට නැවත සකස් කළ යුතුය.

  1. ඔබ විසින් සිදු කරන ලද වෙනස්කම් තබා ගැනීමට ඔබට අවශ්‍ය නැතිනම්:

    git reset --hard HEAD^
    
  2. ඔබගේ වෙනස්කම් තබා ගැනීමට ඔබට අවශ්‍ය නම්:

    git reset --soft HEAD^
    

දැන් ඔබේ git ලොගය පරීක්ෂා කරන්න. එය අපගේ අවසාන කැපවීම ඉවත් කර ඇති බව පෙන්වනු ඇත.


193

"වැඩ කරන ගස අවසාන කැපවීමට නැවත සකසන්න"

git reset --hard HEAD^ 

"වැඩ කරන ගසෙන් නොදන්නා ලිපිගොනු පිරිසිදු කරන්න"

git clean    

බලන්න - Git Quick Reference

සටහන: මෙම විධානය මඟින් ඔබගේ පෙර බැඳීම මකා දමනු ඇත, එබැවින් ප්‍රවේශමෙන් භාවිතා කරන්න! git reset --hardආරක්ෂිතයි.


190

නිවැරදි තත්වයක් සොයා ගැනීමට reflog භාවිතා කරන්න

git reflog

පෙර reflog කරන්න නැවත සැකසීමට පෙර නැවත පුරවන්න

නිවැරදි reflog එක තෝරන්න (මගේ නඩුවේ f3cb6e2) ටයිප් කරන්න

git reset --hard f3cb6e2

ඉන්පසු READ HEAD එම HEADid වෙත නැවත සැකසෙනු ඇත ප්‍රතිස්ථාපන බලපෑම LOG

අවසාන වශයෙන් reflog එක පහත පින්තූරය මෙන් පෙනේ

පසු විපරම් කරන්න අවසාන කොටස නැවත යොමු කරන්න


164

පළමු ධාවනය:

git reflog

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

ඉන්පසු කරන්න:

git reset --hard ActionIdFromRefLog

155

අවසන් කැපවීම අහෝසි කරන්න:

git reset --soft HEAD^ හෝ git reset --soft HEAD~

මෙය අවසාන කැපවීම අහෝසි කරනු ඇත.

මෙහි --softතේරුම වේදිකාවට යළි පිහිටුවීමයි.

HEAD~හෝ HEAD^හෙඩ්ට පෙර කැපවීමට අදහස් කිරීම.


නව කැපවීම සඳහා අවසන් කැපවීම ප්‍රතිස්ථාපනය කරන්න:

git commit --amend -m "message"

එය අවසාන බැඳීම නව බැඳීම සමඟ ප්‍රතිස්ථාපනය කරනු ඇත.


153

වෙනත් ක්රමයක්:

ඔබට ආපසු හැරවීමට අවශ්‍ය ශාඛාව පරීක්ෂා කර, දුරස්ථ සේවාදායකයේ නවතම එක වීමට ඔබට අවශ්‍ය බවට වූ කැපවීම වෙත ඔබේ දේශීය වැඩ පිටපත නැවත සකසන්න (එය පසු වූ සියල්ල අතුරුදහන් වනු ඇත). මෙය සිදු කිරීම සඳහා, SourceTree හි මම දකුණු-ක්ලික් කර තෝරාගත් "මෙම බැඳීමට බ්‍රැන්චේම් නැවත සකසන්න".

ඉන්පසු ඔබේ ගබඩාවේ දේශීය නාමාවලිය වෙත ගොස් මෙම විධානය ක්‍රියාත්මක කරන්න:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

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



139

මගේ නඩුවේදී මම අකමැති ලිපිගොනු කිහිපයක් අහම්බෙන් සිදු කළෙමි. ඒ නිසා මම පහත සඳහන් දේ කළ අතර එය ක්‍රියාත්මක විය:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Gitk හෝ git log --stat සමඟ ප්‍රති results ල සත්‍යාපනය කරන්න


133

සරලයි, මෙය ඔබේ විධාන රේඛාවේ ධාවනය කරන්න:

git reset --soft HEAD~ 

126

එය කිරීමට බොහෝ ක්‍රම තිබේ:

අන්තිම බැඳීම / පෙර කළ ක්‍රියා අහෝසි කිරීමට Git විධානය:

අවවාදයයි: ඔබ කරන්නේ කුමක්දැයි ඔබ නොදන්නේ නම් --hard භාවිතා නොකරන්න. --hard ඉතා භයානක වන අතර එය ඔබගේ ලිපිගොනු මකා දැමිය හැකිය .

Git හි ඇති බැඳීම ආපසු හැරවීමේ මූලික විධානය නම්:

$ git reset --hard <COMMIT -ID>

හෝ

$ git reset --hard HEAD~<n>

COMMIT-ID : බැඳීම සඳහා හැඳුනුම්පත

n: යනු ඔබට ආපසු හැරවීමට අවශ්‍ය අවසාන කැපවීම් ගණනකි

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

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

එහිදී d81d3f1 සහ be20eb8 කැපවීමේ හැඳුනුම්පත වේ.

දැන් අපි අවස්ථා කිහිපයක් බලමු:

අවසාන කැපවීම 'd81d3f1' ආපසු හැරවීමට ඔබට අවශ්‍ය යැයි සිතමු. මෙන්න විකල්ප දෙකක්:

$ git reset --hard d81d3f1

හෝ

$ git reset --hard HEAD~1

'Be20eb8' කැපවීම ආපසු හැරවීමට ඔබට අවශ්‍ය යැයි සිතමු:

$ git reset --hard be20eb8

වඩාත් සවිස්තරාත්මක තොරතුරු සඳහා, නිශ්චිත තත්වයකට හිස නැවත සැකසීම සඳහා ඔබට වෙනත් විධානයන් යොමු කර අත්හදා බැලිය හැකිය:

$ git reset --help

5
git reset --hard HEAD~1ද භයානක ! මෙය 'අන්තිම බැඳීම අවලංගු කිරීම' පමණක් නොව, පෙර සිදු කළ කැපවීම වෙත නැවත ප්‍රතිස්ථාපනය කරනු ඇත. එබැවින් අවසාන කැපවීමේදී සිදුකරන ලද සියලුම වෙනස්කම් ඔබට අහිමි වනු ඇත!
ආර්නිස් ජුරාගා

ඔබ හරි, මෙය අහෝසි කිරීමට ඔබට භාවිතා කළ හැකියgit push -f <remote> HEAD@{1}:<branch>
බෙනී

අවාසනාවට, මම --hard භාවිතා කරන අතර මගේ ලිපිගොනු මකා දමනු ලැබේ! විවරණය බිඳ වැටී ඇති නිසා මම පළමුව එය පරීක්ෂා නොකළෙමි. ඔබ කරන්නේ කුමක්දැයි නොදන්නේ නම් --hard භාවිතා නොකරන්න!
නිර්නාමික

125

දේශීය කැපවීමක් සඳහා

git reset --soft HEAD~1

නැතහොත් එය කුමන බැඳීමක් දැයි ඔබට හරියටම මතක නැතිනම්, ඔබට භාවිතා කළ හැකිය

git rm --cached <file>

තල්ලු කළ කැපවීමක් සඳහා

නිධිය ඉතිහාසයෙන් ලිපිගොනු ඉවත් කිරීමේ නිසි ක්‍රමය භාවිතා git filter-branchකිරීමයි. එනම්,

git filter-branch --index-filter 'git rm --cached <file>' HEAD

නමුත් මම ඔබට නිර්දේශ කරන්නේ මෙම විධානය ප්‍රවේශමෙන් භාවිතා කරන ලෙසයි. Git-filter-branch (1) අත්පොත පිටුවෙන් වැඩිදුර කියවන්න .


125

ප්‍රධාන අවස්ථා දෙකක් තිබේ

ඔබ තවම කැපවීම තල්ලු කර නැත

ගැටළුව ඔබ විසින් සිදු කරන ලද අතිරේක ලිපිගොනු නම් (ඔබට ගබඩාවේ ඇති ඒවා අවශ්‍ය නොවේ), ඔබට ඒවා භාවිතයෙන් ඉවත් කර git rmපසුව ඒවා සමඟ සම්බන්ධ විය හැකිය--amend

git rm <pathToFile>

ඔබට සම්පූර්ණ නාමාවලි ඉවත් කිරීමට -rහෝ වෙනත් Bash විධාන සමඟ ඒකාබද්ධ කිරීමටද හැකිය

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

ලිපිගොනු ඉවත් කිරීමෙන් පසුව, --amend විකල්පය සමඟ ඔබට කැපවිය හැකිය

git commit --amend -C HEAD # the -C option is to use the same commit message

මෙය අතිරේක ලිපිගොනු ඉවත් කිරීම සඳහා ඔබගේ මෑත කාලීන දේශීය බැඳීම නැවත ලියනු ඇත, එබැවින්, මෙම ලිපිගොනු කිසි විටෙකත් තල්ලුව මත යවනු නොලබන අතර GC විසින් ඔබේ දේශීය .git ගබඩාවෙන් ඉවත් කරනු ලැබේ.

ඔබ දැනටමත් කැපවීම තල්ලු කර ඇත

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

ඒ වෙනුවට, ඔබ කළ යුතුව --amendඇත්තේ කැපවීමකින් තොරවය (මෙය මතක තබා ගන්න -අමෙන්ඩ්`: එම විකල්පය අවසාන කැපවීම මත ඉතිහාසය නැවත ලියයි).


125

පෙර සංශෝධනයට නැවත සැකසීමට, සියලු නොගැලපෙන වෙනස්කම් ස්ථිරවම මකා දමයි:

git reset --hard HEAD~1

23
ඔහුගේ විධානය තවදුරටත් විමසීමෙන් තොරව බැඳීම සහ වැඩ කරන නාමාවලියෙහි වෙනස්කම් ඉවතලනු ඇතැයි ඔබට සටහනක් / අනතුරු ඇඟවීමක් කළ හැකිය.
cr7pt0gr4ph7

6
ඔබ මෙය අහම්බෙන් සිදු වුවහොත්, සියල්ල නැති වී යන්නේ නැත. බලන්න stackoverflow.com/questions/10099258/... , stackoverflow.com/questions/15479501/... හා stackoverflow.com/questions/7374069/undo-git-reset-hard/7376959 .
cr7pt0gr4ph7

13
--softඔබගේ වෙනස්වීම් තබා ගැනීමට භාවිතා කරන්න uncommitted changes, --hardබැඳීම මුළුමනින්ම නිරුවත් කර එකින් එක ආපසු හරවන්න. එවැනි ක්‍රියාකාරකම් තවමත් තල්ලු කර නොමැති වෙනස්කම් මත පමණක් කිරීමට මතක තබා ගන්න.
යූනුස් නෙදීම් මෙහෙල්

Az සාස්: ඔබ හරි; සමහර විට මම ඒක පැහැදිලි කරන්න තිබුණා. ආපසු ලබා ගත හැක්කේ දර්ශකයට එකතු කරන ලද (/ වේදිකාගත කරන ලද) හෝ සිදු කර ඇති ගොනු / වෙනස්කම් පමණි. ෂෙයික්, unstaged වෙනස්කම් වේ , ඔබ සම්පූර්ණයෙන්ම විසින් ඉවත දමා, කී ලෙස git reset --hard.
cr7pt0gr4ph7

1
පැත්තක සටහනක් ලෙස: ගොනුවක් වේදිකා ගත කරන සෑම අවස්ථාවකම gitඑහි අන්තර්ගතය එහි වස්තු දත්ත ගබඩාවේ ගබඩා කරයි. ගබඩා කළ අන්තර්ගතයන් ඉවත් කරනු ලබන්නේ කසළ එකතු කිරීම සිදු කළ විට පමණි. එබැවින් git reset --hardක්‍රියාත්මක කරන විට දැනට වේදිකාගත කර නොතිබූ ගොනුවක අවසන් අදියර නැවත ලබා ගත හැකිය (වැඩි විස්තර සඳහා ඉහත සම්බන්ධ කර ඇති ලිපි බලන්න).
cr7pt0gr4ph7
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.