දැනටමත් දුරස්ථ ශාඛාවකට තල්ලු කර ඇති ඒකාබද්ධ කිරීමේ බැඳීමක් නැවත ලබා ගන්නේ කෙසේද?


1012

git revert <commit_hash>තනිවම වැඩ කරන්නේ නැත. -mනිශ්චිතව සඳහන් කළ යුතු අතර, මම ඒ ගැන තරමක් ව්‍යාකූල වී සිටිමි.

මීට පෙර කිසිවෙකු මෙය අත්විඳ තිබේද?


3
මෙම ප්‍රශ්නයට පිළිතුර දෙස බලන්න: stackoverflow.com/questions/2318777/…
eugen


ඒකාබද්ධ කළ බැඳීම ආපසු හැරවීම නිරූපණය කරන හොඳම උදාහරණය මෙහි සබැඳිය: christianengvall.se/undo-push-merge-git
SK Venkat

මෙය සැවොම භාවිතා කරන වැඩ ප්‍රවාහයට gitනොගැලපෙන තැනකට උදාහරණයකි git-flow. ඔබ developපරීක්ෂා කර ඇත්නම් , ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය වන්නේ දෝෂයක් හඳුන්වා දුන් 2-කැපවීමේ විශේෂාංග ශාඛාව නැවත ලබා දීමට මිස වසර ගණනාවක් තිස්සේ බෙදාගත් dev ශාඛාවට නොවේ. හාස්‍යජනක බවක් දැනේ -m 1.
pkamb

2
මින් පෙර කිසි දිනෙක මට සිදු නොවූ තවත් එක් යෝජනාවක් - එක් ශාඛාවක කොමිස් ලැයිස්තුවක් කුඩා නම්, සම්පූර්ණ කොමිස් ශාඛාවක් වෙනුවට තනි කොමිස් ආපසු හැරවීමට ඔබට වඩාත් පහසුවක් දැනෙනු ඇත.
ශ්‍රීධර් සර්නොබත්

Answers:


1224

මෙම -mවිකල්පය නියම කරනු මව් අංකය . මෙයට හේතුව ඒකාබද්ධ කිරීමේ බැඳීමකට දෙමව්පියන් එකකට වඩා සිටින අතර, ඔබ ඒකාබද්ධ කිරීමට අවශ්‍ය ශාඛාව කුමන දෙමව්පියන්ද යන්න Git ස්වයංක්‍රීයව නොදනී.

ප්‍රතිදානයේ ඒකාබද්ධ කිරීමේ git logබැඳීමක් ඔබ දකින විට, ආරම්භ වන පේළියේ එහි දෙමාපියන් ලැයිස්තුගත කර ඇති ආකාරය ඔබට පෙනෙනු ඇත Merge:

commit 8f937c683929b08379097828c8a04350b9b8e183
Merge: 8989ee0 7c6b236
Author: Ben James <ben@example.com>
Date:   Wed Aug 17 22:49:41 2011 +0100

Merge branch 'gh-pages'

Conflicts:
    README

මෙම තත්වය තුල, git revert 8f937c6 -m 1එය විය ලෙස ඔබ ගස ලැබෙනු ඇත 8989ee0, සහ git revert -m 2එය විය ලෙස ගස නැවත සේවයේ පිහිටුවීමට ඇත 7c6b236.

මව් හැඳුනුම්පත් වඩා හොඳින් තේරුම් ගැනීමට, ඔබට ධාවනය කළ හැකිය:

git log 8989ee0 

සහ

git log 7c6b236

135
සංඛ්යා දෙකක් 8989ee0, 7c6b236,, යා යුතු එකක්. මම තේරුම් ගන්නේ කෙසේද?
අරුප් රකිත්

12
ආපසු හැරවීමෙන් පසු, ප්‍රභව ශාඛාවේ කේතය පහසුවෙන් නිවැරදි කර නැවත ඒකාබද්ධ කිරීමට කෙනෙකුට හැකි වේ යැයි මම නොසිතමි. kernel.org/pub/software/scm/git/docs/howto/…
ඉස්මයිල්ස්

12
වඩා හොඳ පැහැදිලි කිරීමක් සෙවීමේදී, මෙම ලිපිය මට හමු විය, එය විස්තර ඉක්මවා යාමේ විශාල කාර්යයක් යැයි මම සිතුවෙමි. කියවීමෙන් පසුව මම සොයාගත්තේ මා සැබවින්ම සොයන්නේ RESET විධානය බවයි, පසුව බල තල්ලුවක්. සමහර විට එය වෙනත් කෙනෙකුට උදව් වනු ඇත. atlassian.com/git/tutorials/…
Funktr0n

47
RupArupRakshit ඔබ දුවන්නේ නම් git log 8989ee0සහ git log 7c6b236ඔබ පිළිතුර දැන සිටිය යුතුය.
BMW

4
git log - merges සියලු ඒකාබද්ධ කිරීම් දැකීමට සහ git log - no-merges ඒකාබද්ධ කිරීමකින් තොරව ඉතිහාසය බැලීමට. ශාඛාවක් ඒකාබද්ධ කිරීම මඟින් ඒකාබද්ධ කරන ලද ශාඛා ඉතිහාසය ඉලක්කයට ගෙන එනු ලබන අතර සරල git ලොග් භාවිතයෙන් එය සෑදීම දුෂ්කර කරයි
ඇලෙක්ස් පුන්නන්

391

එය යමෙකුට උපකාර කරයි යන බලාපොරොත්තුවෙන් සම්පූර්ණ උදාහරණයක් මෙන්න:

git revert -m 1 <commit-hash> 
git push -u origin master

කොහෙද <commit-hash>මේ ඔබ පෙරළුම් කැමති බව ඒකාබද්ධ කිරීමේ හැෂ් සිදු, සහ කළ පැහැදිලි කිරීම සඳහන් පරිදි වේ මෙම පිළිතුර , -m 1ඔබ ඒකාබද්ධ කිරීමට පෙර පළමු මව් ගස වෙත පවරා ගැනීමට කැමතියි බවයි.

මෙම git revert ...දෙවන මාර්ගය දුරස්ථ ශාඛා ඔවුන් තල්ලු ඔබේ වෙනස්කම් මහජන කරයි අතර රේඛාවක් අවශ්යයෙන් ඔබේ වෙනස්කම් සිදුකර ඇත.


22
මම විශ්වාස කළේ git revertවිධානය දැනටමත් නිර්මාණය කර ඇති බැඳීම් වස්තුව සිදු කර ඇති බවයි. එය සිදු නොවීමට නම් ඔබට --no-commitධජය ඇතුල් කිරීමට සිදුවේ
ඩෙල්ෆික්

2
El ඩෙල්ෆික් සඳහන් කළ පරිදි, බැඳීම දැනටමත් පළමු පේළිය මගින් කළමනාකරණය කර ඇත (එය වලංගු කිරීම සඳහා මට: wq අවශ්‍ය විය) එබැවින් දෙවන පේළිය අවශ්‍ය නොවේ.
eka808

1
මෙය අවුල් සහගතය. පේළි 2 ක් පමණක් ඇති අතර කිසිදු බැඳීමක් නොමැත .. යමෙකුට කරුණාකර සංස්කරණය කළ හැකිද?
ජේ රැන්ඩම්

AyJayRandom ඉහත අදහස් දැක්වීම්වල සඳහන් පරිදි, revertවිධානයට බැඳීමක් ඇතුළත් වේ.
විල් ෂෙපර්ඩ්

180

ඒකාබද්ධ කිරීමේ බැඳීමක් නැවත ලබා ගන්නේ කෙසේදැයි බෙන් ඔබට පවසා ඇත, නමුත් එසේ කිරීමේදී ඔබ තේරුම් ගැනීම ඉතා වැදගත් වේ

"... ඒකාබද්ධ කිරීම මඟින් ගෙන එන ලද ගස් වෙනස්වීම් ඔබට කිසි විටෙකත් අවශ්‍ය නොවන බව ප්‍රකාශ කරයි. එහි ප්‍රති, ලයක් වශයෙන්, පසුකාලීන ඒකාබද්ධ කිරීම් මඟින් ගෙන එනු ලබන්නේ කලින් ප්‍රතිවර්තනය කරන ලද ඒකාබද්ධයේ මුතුන් මිත්තන් නොවන කොමිස් විසින් හඳුන්වා දුන් ගස් වෙනස්වීම් පමණි. මෙය විය හැකිය හෝ නොවිය හැකිය ඔබට අවශ්‍ය දේ.(git-merge man page) .

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


81
නමුත් ඔබට අවශ්‍ය නම් ඒවා ආපසු ලබා ගැනීම සඳහා ආපසු හැරවීම කළ හැකිය.
dalore

5
ස්තූතියි. ඒකාබද්ධ කිරීමක් අහෝසි කිරීම සඳහා භාවිතා කිරීමේ අවස්ථාව ලෙස දැන ගැනීම ඉතා ප්‍රයෝජනවත් වේ - දෝෂයක් හේතුවෙන්, කියන්න - ඉන්පසු දෝෂය නිවැරදි වූ පසු මුළු ශාඛාවම නැවත ඒකාබද්ධ කිරීම සාමාන්‍ය දෙයකි.
සංරචකය 10

3
ඔබ මා හා පසුව ඒකාබද්ධ වීමට අවශ්‍ය නම් ඔබට නැවත ආපසු හැරවිය හැකිය, නැතහොත් චෙරි ඔබ ආපසු හරවා ඇති වෙනස තෝරා ගන්න.
යුනිටාස්බ ro ක්ස්

මගේ තත්වය තුළ, මගේ වෙනස්වීම්-පසු-ගැටළුව ලබා ගැනීම සඳහා 'ආපසු හැරවීම' සිදුකිරීමට මට සිදුවිය. චෙරි තෝරාගැනීම ඉතා හොඳ ක්‍රමයක් විය හැකිද? මම ඊළඟ වතාවේ එය උත්සාහ කරමි ...
ස්ටීවන් ඇන්ඩර්සන්

80

වැරදි බැඳීම් (ය) ආපසු හැරවීමට හෝ HEAD / state නිවැරදි කිරීම සඳහා ඔබේ දුරස්ථ ශාඛාව නැවත සකස් කිරීමට ඔබට මෙම පියවර අනුගමනය කළ හැකිය.

  1. දුරස්ථ ශාඛාව දේශීය repo වෙත පරීක්ෂා කරන්න.
    git checkout development
  2. ගිට් ලොග් එකෙන් බැඳීම් හෑෂ් (එනම් වැරැද්දට පෙර වහාම අයිඩී) පිටපත් කරන්න git log -n5

    ප්‍රතිදානය:

    commit 7cd42475d6f95f5896b6f02e902efab0b70e8038 "ශාඛාව 'වැරදි-කැපවීම' 'සංවර්ධනයට'
    ඒකාබද්ධ කරන්න" බැඳීම f9a734f8f44b0b37ccea769b9a2fd774c0f0c012 "මෙය වැරදි
    කැපවීමකි" 3779f9

  3. පෙර පියවරේදී පිටපත් කළ බැඳීම් හෑෂ් වෙත ශාඛාව නැවත සකසන්න
    git reset <commit-hash> (i.e. 3779ab50e72908da92d2cfcd72256d7a09f446ba)

  4. git statusවැරදි කැපවීමේ කොටසක් වූ සියලු වෙනස්කම් පෙන්වීමට ධාවනය කරන්න .
  5. git reset --hardඑම සියලු වෙනස්කම් ආපසු හැරවීමට ධාවනය කරන්න.
  6. ඔබේ ප්‍රාදේශීය ශාඛාව දුරස්ථව තල්ලු කර ඔබගේ දූෂිත ඉතිහාසය දූෂිත වීමට පෙර තිබූ ආකාරයටම පිරිසිදු බව සලකන්න.
    git push -f origin development

5
මේ අතර සංවර්ධකයින් 20 දෙනෙකු නවතම dev ඒකාබද්ධ කිරීම ඇද දැමුවහොත් කුමක් කළ යුතුද?
ඊවොක්ස්

2
එම ශාඛාව භාවිතා කරමින් කණ්ඩායමේ සංවර්ධකයින් 20 ක් සිටින විට මම සංවර්ධන ශාඛාවක් තල්ලු කිරීමට බල නොකරමි. :) එවැනි අවස්ථාවක, ආපසු හැරවීමක් කිරීම නුවණට හුරුය.
ssasi

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

1
වැරදීමකින් දේශීයව ශාඛාවක් ඇද ගැනීමෙන් පසුව මට අවශ්‍ය දේ. ස්තූතියි !!
GardenRouteGold


31

කිසිවක් සිදු නොවූ ලෙස ලොගය පිරිසිදුව තබා ගැනීම සඳහා (මෙම ප්‍රවේශය සමඟ සමහර අවාසි සහිතව (තල්ලු -f හේතුවෙන්):

git checkout <branch>
git reset --hard <commit-hash-before-merge>
git push -f origin HEAD:<remote-branch>

'commit-hash-before-merge' පැමිණෙන්නේ ඒකාබද්ධ වීමෙන් පසු ලොග් (git log) මගිනි.


ඉඟිය: ඔබ මෙය කරන්නේ ඔබේ සමාගමේ නම්, ඔබට අවසර නොමැති විය හැකිය.
eneski

4
push -fහවුල් ප්‍රතිමූර්තියක් කිසි විටෙකත් නොකරන්න
බැප්ටිස්ට් මිලේ-මතියස්

18

සමහර විට පෙරළීම සඳහා වඩාත් way ලදායී ක්‍රමය වන්නේ පසුපසට ගොස් ප්‍රතිස්ථාපනය කිරීමයි.

git log

2 වන කැපවීමේ හැෂ් භාවිතා කරන්න (සම්පූර්ණ හැෂ්, ලැයිස්තුගත වැරැද්දට පෙර ඔබට ආපසු යාමට අවශ්‍ය එක), ඉන්පසු එතැන් සිට නැවත සන්නාම කරන්න.

git checkout -b newbranch <HASH>

ඉන්පසු පැරණි ශාඛාව මකා දමා, නව ශාඛාව එහි ස්ථානයේ පිටපත් කර එතැනින් නැවත ආරම්භ කරන්න.

git branch -D oldbranch
git checkout -b oldbranch newbranch

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


4
විකාශනය පිළිබඳ අනතුරු ඇඟවීම සැබවින්ම මෙය කෙතරම් භයානක අදහසක්ද යන්න පිළිබඳව වඩාත් පැහැදිලිව කිව යුතුය. මෙය එම ශාඛාවේ සෑම දෙනාගේම අනුවාදය දූෂිත කරනු ඇති අතර එය ඔබට ප්‍රයෝජනවත් වන්නේ දුරස්ථ ගබඩාවක් (ගිතුබ් / බිට්බකට්) සමඟ වැඩ කරන්නේ නම් පමණි.
රොබී ඩී

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

6

ඔබට බැඳීමක් ආපසු හැරවීමට අවශ්‍ය නම්, ඔබ කළ යුතු mergeදේ මෙන්න.

  1. පළමුව, git logඔබේ ඒකාබද්ධ කිරීමේ හැඳුනුම්පත සොයා ගැනීමට පරීක්ෂා කරන්න . ඒකාබද්ධ කිරීම හා සම්බන්ධ බහු මාපිය අයිඩී ද ඔබ සොයා ගනු ඇත (පහත රූපය බලන්න).

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

කහ පැහැයෙන් දක්වා ඇති ඒකාබද්ධ කිරීමේ කමිටුව සටහන් කරන්න. මව් හැඳුනුම්පත් යනු ඊළඟ පේළියේ ලියා ඇති ආකාරයට ය Merge: parent1 parent2. දැන්...

කෙටි කතාව:

  1. ඒකාබද්ධ කිරීම සිදු කළ ශාඛාවට මාරු වන්න. බැඳීම් පණිවිඩයක් ඇතුළත් කිරීම සඳහා කොන්සෝලයක් git revert <merge commit id> -m 1විවෘත කරන දේ කරන්න vi. ලියන්න, සුරකින්න, පිටවන්න, ඉවරයි!

දිගු කතාව:

  1. ඒකාබද්ධ කිරීම සිදු කළ ශාඛාවට මාරු වන්න. මගේ නඩුවේ, එය testශාඛාව වන අතර මම feature/analytics-v3එයින් ශාඛාව ඉවත් කිරීමට උත්සාහ කරමි .

  2. git revertඕනෑම බැඳීමක් ආපසු හරවන විධානයයි. නමුත් බැඳීමක් ආපසු හැරවීමේදී නපුරු උපක්‍රමයක් ඇත merge. ඔබට -mධජය ඇතුළත් කළ යුතු අතර එසේ නොවුවහොත් එය අසාර්ථක වනු ඇත. මෙහි සිට, ඔබ ඔබේ ශාඛා යා හා හරියටම එය මත විය වගේ බලා ගැනීමට අවශ්ය ද යන්න තීරණය කිරීම අවශ්ය parent1හෝ parent2හරහා:

git revert <merge commit id> -m 1(ආපසු හැරේ parent2)

git revert <merge commit id> -m 2(ආපසු හැරේ parent1)

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


6

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

git revert -m 1 <commit-hash>

ඔබට අවසර ඇත්නම් එය "මාස්ටර්" ශාඛාවට කෙලින්ම තල්ලු කළ හැකිය. එසේ නොමැතිනම් එය ඔබේ "ආපසු හැරවීමේ" ශාඛාවට තල්ලු කර අදින්න ඉල්ලීමක් සාදන්න.

ඔබට මෙම විෂය පිළිබඳ වඩාත් ප්‍රයෝජනවත් තොරතුරු මෙතැනින් සොයාගත හැකිය: https://itcodehub.blogspot.com/2019/06/how-to-revert-merge-in-git.html


2

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

වැරදි ඒකාබද්ධ කිරීමක් ආපසු හරවා ගන්නේ කෙසේද ඇලන් (alan@clueserver.org) මෙසේ පැවසීය:

මට ප්‍රධාන ශාඛාවක් ඇත. සමහර සංවර්ධකයින් වැඩ කරමින් සිටින ශාඛාවක් අප සතුව ඇත. ඔවුන් කියා සිටින්නේ එය සූදානම් බවයි. අපි එය ප්‍රධාන ශාඛාවට ඒකාබද්ධ කරමු. එය යමක් බිඳ දමයි, එබැවින් අපි ඒකාබද්ධ කිරීම ආපසු හරවන්නෙමු. ඔවුන් කේතයේ වෙනස්කම් සිදු කරයි. ඔවුන් එය හරි යැයි පවසන තැනකට එය ලබා ගන්නා අතර අපි නැවත ඒකාබද්ධ කරමු. පරීක්ෂා කර බැලූ විට, ආපසු හැරවීමට පෙර සිදු කරන ලද කේත වෙනස්කම් ප්‍රධාන ශාඛාවේ නොමැති බව අපට පෙනී යයි, නමුත් පසුව කේත වෙනස්වීම් ප්‍රධාන ශාඛාවේ ඇති බව අපට පෙනී යයි. මෙම තත්වයෙන් ගොඩ ඒමට උදව් ඉල්ලා සිටියේය.

"ඒකාබද්ධ කිරීම ආපසු හැරවීම" සිදු වූ වහාම ඉතිහාසය මෙසේ පෙනේ:

---o---o---o---M---x---x---W
              /
      ---A---B

A සහ B එතරම් දියුණු නොවූ පැති සංවර්ධනයේ සිටින විට, M යනු මෙම නොමේරූ වෙනස්කම් ප්‍රධාන රේඛාවට ගෙන ඒමයි, x යනු පැති ශාඛාව කළ හා දැනටමත් ප්‍රධාන රේඛාවේ සිදු කර ඇති දෙයට සම්බන්ධ නොවන වෙනස්කම් වන අතර W යනු " ඒකාබද්ධ කිරීමේ එම් "(W උඩු යටිකුරු ලෙස පෙනෙන්නේ නැද්ද?). IOW, "diff W ^ .. W" යනු "diff -RM ^ .. M" ට සමානය.

ඒකාබද්ධයේ එවැනි "ආපසු හැරවීමක්" කළ හැක්කේ:

branch git revert -m 1 M පැති ශාඛාවේ සංවර්ධකයින් ඔවුන්ගේ වැරදි නිවැරදි කිරීමෙන් පසුව, ඉතිහාසය මේ ආකාරයට විය හැකිය:

---o---o---o---M---x---x---W---x
              /
      ---A---B-------------------C---D

එහිදී C සහ D යනු A සහ ​​B හි කැඩී ඇති දේ නිවැරදි කිරීමට වන අතර, W ට පසුව ප්‍රධාන මාර්ගයේ වෙනත් වෙනස්කම් ඔබට දැනටමත් තිබිය හැකිය.

ඔබ යාවත්කාලීන කරන ලද පැති ශාඛාව (එහි කෙළවරේ D සමඟ) ඒකාබද්ධ කරන්නේ නම්, A හෝ B හි සිදු කරන ලද කිසිදු වෙනසක් ප්‍රති result ලයට නොලැබේ, මන්ද ඒවා W විසින් ආපසු හරවන ලදි. ඇලන් දුටුවේ එයයි.

ලිනස් තත්වය පැහැදිලි කරයි:

නිත්‍ය කැපවීමක් ආපසු හැරවීම එම කැපවීම කළ දේ effectively ලදායී ලෙස අහෝසි කරන අතර එය තරමක් සරල ය. නමුත් ඒකාබද්ධ කිරීමේ බැඳීමක් ආපසු හැරවීමෙන් ද එම බැඳීම වෙනස් වූ දත්ත අහෝසි වේ , නමුත් එය ඒකාබද්ධ කිරීම ඉතිහාසයට ඇති බලපෑමට කිසිසේත් නොකරයි . එබැවින් ඒකාබද්ධ කිරීම තවමත් පවතිනු ඇති අතර, එය තවමත් ශාඛා දෙක එකට එකතු වන බවක් පෙනෙනු ඇති අතර, අනාගත ඒකාබද්ධ කිරීම් මගින් එම ඒකාබද්ධ කිරීම අවසන් හවුල් රාජ්‍යය ලෙස පෙනෙනු ඇත - සහ ඒකාබද්ධ කිරීම ආපසු හරවන ලද ආපසු හැරවීම කිසිසේත් බලපාන්නේ නැත. එබැවින් "ආපසු හැරවීමක්" මඟින් දත්ත වෙනස්වීම් අහෝසි කරයි, නමුත් එය එසේ නොවේ"අහෝසි කිරීම" යන්නෙන් එය නිධිය ඉතිහාසයට බැඳීමක බලපෑම අහෝසි නොකරයි. එබැවින් ඔබ "ආපසු හැරවීම" "අහෝසි කරන්න" ලෙස සිතන්නේ නම්, එවිට ඔබට සෑම විටම ප්‍රතිවර්තනයේ මෙම කොටස මග හැරෙනු ඇත. ඔව්, එය දත්ත අහෝසි කරයි, නමුත් නැත, එය ඉතිහාසය අහෝසි නොකරයි. එවැනි තත්වයක් තුළ, ඔබට පළමුව පෙර ප්‍රතිවර්තනය ආපසු හැරවීමට අවශ්‍ය වනු ඇත, එමඟින් ඉතිහාසය මේ ආකාරයෙන් පෙනෙනු ඇත:

---o---o---o---M---x---x---W---x---Y
              /
      ---A---B-------------------C---D

මෙහි Y යනු W හි ප්‍රතිවර්තනයයි. එවැනි “ප්‍රතිවර්තනය” ආපසු හැරවිය හැක්කේ:

history git revert W මෙම ඉතිහාසය (W සහ W..Y වෙනස් කළ දේ අතර ඇති විය හැකි ගැටුම් නොසලකා හැරීම) ඉතිහාසයේ කිසිසේත් W හෝ Y නොතිබීමට සමාන වේ:

---o---o---o---M---x---x-------x----
              /
      ---A---B-------------------C---D

පැති ශාඛාව නැවත ඒකාබද්ධ කිරීමෙන් කලින් ආපසු හැරවීම සහ ආපසු හැරවීම නිසා ගැටුම් ඇති නොවේ.

---o---o---o---M---x---x-------x-------*
              /                       /
      ---A---B-------------------C---D

ඇත්ත වශයෙන්ම සී සහ ඩී වල සිදු කරන ලද වෙනස්කම් ඕනෑම x විසින් කරන ලද දේ සමඟ ගැටෙන්නට පුළුවන, නමුත් එය සාමාන්‍ය ඒකාබද්ධ කිරීමේ ගැටුමකි.


1

දන්නා අවසාන ලකුණු දෙකක් අතර ප්‍රතිලෝම පැච් එකක් නිර්මාණය කිරීම සහ එම පැච් එක ක්‍රියාත්මක කිරීම මට හැකි විය. මෙය අනුමාන කරන්නේ ඔබ ඔබේ ප්‍රධාන ශාඛාවෙන් ඉවතට (ටැග්) හෝ ඔබේ ප්‍රධාන ශාඛාවේ උපස්ථයක් පවා නිර්මාණය කර ඇති බවයි. Master_bk_01012017.

ඔබ මාස්ටර් සමඟ ඒකාබද්ධ කළ කේත ශාඛාව mycodebranch යැයි කියන්න.

  1. පිටවීමේ මාස්ටර්.
  2. මාස්ටර් සහ ඔබේ උපස්ථය අතර සම්පූර්ණ ද්විමය ප්‍රතිලෝම පැච් එකක් සාදන්න. git diff --binary master..master_bk_01012017 > ~/myrevert.patch
  3. ඔබේ පැච් එක පරීක්ෂා කරන්න git apply --check myrevert.patch
  4. අත්සන් කිරීම සමඟ පැච් යොදන්න git am --signoff < myrevert.patch
  5. මෙම කේතය සවි කළ පසු ඔබට එය නැවත ගෙන ඒමට අවශ්‍ය නම්, ඔබට ආපසු හරවන ලද ස්වාමියාගෙන් ඉවත් වී නිවැරදි කිරීමේ ශාඛාව පරීක්ෂා කිරීමට අවශ්‍ය වනු ඇත git branch mycodebranch_fix git checkout mycodebranch_fix
  6. මෙහිදී ඔබ ආපසු හැරවීම සඳහා SHA යතුර සොයාගෙන ආපසු හරවා යැවිය යුතුය git revert [SHA]
  7. දැන් ඔබට ඔබේ mycodebranch_fix භාවිතා කර ගැටළු නිරාකරණය කර ගැනීමටත්, සිදු වූ පසු නැවත මාස්ටර් සමඟ ඒකාබද්ධ කිරීමටත් හැකිය.

1

නිවැරදිව සලකුණු කරන ලද පිළිතුර මා වෙනුවෙන් වැඩ කළ නමුත් සිදුවන්නේ කුමක්ද යන්න තීරණය කිරීම සඳහා මට යම් කාලයක් ගත කිරීමට සිදුවිය .. එබැවින් මගේ වැනි අවස්ථා සඳහා සරල සරල පියවරයන් සමඟ පිළිතුරක් එක් කිරීමට මම තීරණය කළෙමි ..

අපි කියමු අපිට A සහ ​​B ශාඛා ලැබුණා .. ඔබ A ශාඛාව B ශාඛාවට ඒකාබද්ධ කර B ශාඛාව තමාටම තල්ලු කළා, එබැවින් දැන් ඒකාබද්ධ කිරීම එහි කොටසකි .. නමුත් ඔබට ඒකාබද්ධ වීමට පෙර අවසන් බැඳීම වෙත ආපසු යාමට අවශ්‍යය .. කුමක් කරන්න ඔයා කරන්න?

  1. ඔබගේ git root ෆෝල්ඩරයට ගොස් (සාමාන්‍යයෙන් ව්‍යාපෘති ෆෝල්ඩරය) භාවිතා කරන්න git log
  2. මෑත කාලීන කොමිස් වල ඉතිහාසය ඔබට පෙනෙනු ඇත - කොමිස් වලට බැඳීම් / කර්තෘ / දින ගුණාංග ඇති අතර ඒකාබද්ධ කිරීම්වලට ඒකාබද්ධ කිරීමේ දේපලක් ඇත - එබැවින් ඔබ ඒවා මේ ආකාරයෙන් දකිනු ඇත:

    commit: <commitHash> Merge: <parentHashA> <parentHashB> Author: <author> Date: <date>

  3. භාවිතා කරන්න git log <parentHashA>සහ git log <parentHashB>- එම මව් ශාඛා වල බැඳීම් ඉතිහාසය ඔබට පෙනෙනු ඇත - ලැයිස්තුවේ පළමු කොමිස් නවතම ඒවා වේ

  4. <commitHash>ඔබට අවශ්‍ය කැපවීම සැලකිල්ලට ගෙන , ඔබේ git root ෆෝල්ඩරය වෙත ගොස් භාවිතා කරන්න git checkout -b <newBranchName> <commitHash>- එමඟින් ඒකාබද්ධ වීමට පෙර ඔබ තෝරාගත් අවසාන කැපවීමෙන් නව ශාඛාවක් නිර්මාණය වනු ඇත .. Voila, සූදානම්!


0

GitHub repo හි ප්‍රධාන ශාඛාවට ඒකාබද්ධ කරන ලද PR මතද මම මෙම ගැටලුවට මුහුණ දුන්නෙමි.

සමානුපාතික නියෝජනය ගෙන මුළු වෙනස්කම් කිහිපයක් වෙනස් ගොනු වෙනස් කිරීමට මම අවශ්ය නමුත් බැවින්, මම එහි සිටි amendමේ merge commitසමග git commit --am.

පියවර:

  1. නවීකරණය කරන ලද ලිපිගොනු කිහිපයක් වෙනස් කිරීමට / ආපසු හැරවීමට ඔබට අවශ්‍ය ශාඛාව වෙත යන්න
  2. නවීකරණය කරන ලද ලිපිගොනු අනුව ඔබට අවශ්‍ය වෙනස්කම් කරන්න
  3. ධාවනය git add *හෝgit add <file>
  4. ධාවනය git commit --amකර වලංගු කරන්න
  5. දුවන්න git push -f

එය සිත්ගන්නාසුලු ඇයි:

  • එය PR හි කතුවරයා නොවෙනස්ව තබා ගනී
  • එය git ගස කැඩෙන්නේ නැත
  • ඔබව කැප කරන්නෙකු ලෙස සලකුණු කරනු ඇත (ඒකාබද්ධ කිරීමේ කර්තෘ නොවෙනස්ව පවතිනු ඇත)
  • Git ඔබ ගැටුම් නිරාකරණය කළාක් මෙන් ක්‍රියා කරයි, එය නවීකරණය කරන ලද ලිපිගොනු වල කේතය ඉවත් කරයි / වෙනස් කරයි.

-2

රයන් සඳහන් කළ පරිදි, git revertපාරේ ඒකාබද්ධ කිරීම දුෂ්කර git revertවිය හැකි බැවින් ඔබට අවශ්‍ය දේ නොවිය හැකිය. මෙහි git reset --hard <commit-hash-prior-to-merge>විධානය භාවිතා කිරීම වඩාත් ප්‍රයෝජනවත් බව මට පෙනී ගියේය.

ඔබ වෙහෙස මහන්සි වී යළි පිහිටුවීමේ කොටසක් සිදු කළ පසු, පසුව ඔබට දුරස්ථ ශාඛා, එනම්, කිරීමට තල්ලුව යෙදිය හැකිය git push -f <remote-name> <remote-branch-name>කොහේද, <remote-name>බොහෝ විට නම් කර ඇත origin. එතැන් සිට ඔබට අවශ්‍ය නම් නැවත ඒකාබද්ධ කළ හැකිය.


4
බලහත්කාරයෙන් තල්ලු කිරීම සම්බන්ධ ඕනෑම දෙයක් නරක අදහසකි, ඔබ පමණක් රෙපෝ භාවිතා කරන්නේ නම් සහ ඔබ කරන්නේ කුමක්දැයි ඔබ හරියටම දනී. Git revert සමඟ ආපසු හැරවීම සහ සමහර විට git revert සමඟ ප්‍රතිවර්තනය කිරීම (ඔබට නැවත දේවල් ගෙන ඒමට අවශ්‍ය නම්) වඩා ආරක්ෂිත විකල්පයකි.
oyvind
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.