මම වැරදීමකින් වැරදි ශාඛාවකට බැඳී සිටිමි. එම බැඳීම මකා දැමිය හැක්කේ කෙසේද?
මම වැරදීමකින් වැරදි ශාඛාවකට බැඳී සිටිමි. එම බැඳීම මකා දැමිය හැක්කේ කෙසේද?
Answers:
ඔබ කළ කාර්යය තබා ගනිමින් නවතම කැපවීම මකන්න:
git reset --soft HEAD~1
ඔබ කළ කාර්යය විනාශ කරමින් නවතම කැපවීම මකන්න :
git reset --hard HEAD~1
git reset --hard origin
git remote
ලැයිස්තු මා සඳහා ආරම්භයක් git reset --hard origin
බව පවසයි fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
. මන්ද?
git reset HEAD~1
ඔබගේ සියලු වෙනස්කම් ද තබා ගන්නා නමුත් සෑම දෙයක්ම තබා ගැනීමට වඩා හිස් දර්ශකයක් ඔබට ඉතිරි කරනු ඇත ( --soft
විකල්පය පරිදි).
මම සොයාගත් හොඳම පිළිතුර අදහස් දැක්වීම්වල පමණක් ඇත්තේ මන්දැයි මම කල්පනා කරමි! ( ඡන්ද 86 කින් ඩෙනයිත් විසින් )
git reset --hard origin
මෙම විධානය මඟින් දේශීය ගබඩාව දුරස්ථ නිධිය සමඟ සමමුහුර්ත කරනු ඇත. ඔබට මූලාරම්භයේ ඇති නිශ්චිත ශාඛාව ලබා ගැනීම සඳහා පහත සඳහන් දෑ කළ හැකිය.
git reset --hard origin/<branch>
git reset --hard origin/<branch>
git reset --soft origin/<branch>
, ඔබට කැපවීමෙන් මිදීමට අවශ්ය නම්, නමුත් දේශීය වැඩ දිගටම කරගෙන යන්න.
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
, ඔබ වැනි ශාඛාව සඳහන් කළ යුතුයි:git reset --hard origin/feature/my-cool-stuff
එය මකා නොදමන්න: මක්නිසාද යත් එක් කැපවීමක් git cherry-pick
පමණක් ප්රමාණවත් ය.
ඔබ සිටියා නම් නමුත් කිහිපයක් වැරදි ශාඛා මත අනාචාරයේ බව කොහේ git rebase --onto
බබළන:
ඔබට මෙය ඇතැයි සිතමු:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
, එවිට ඔබට සලකුණු කිරීමට master
හා ඔබට අවශ්ය තැනට ගෙන යා හැකිය:
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
, තිබිය යුතු තැන y ශාඛාව නැවත සකසන්න:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
, අවසානයේදී ඔබේ කොමිස් ගෙනයන්න (ඒවා නැවත අයදුම් කරන්න, ඇත්ත වශයෙන්ම නව කොමිස් සාදයි)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
ඔබට එම බැඳීම වෙනත් ශාඛාවකට ගෙනයාමට අවශ්ය නම්, එම බැඳීම පිළිබඳ SHA එක ලබා ගන්න
git rev-parse HEAD
ඉන්පසු වත්මන් ශාඛාව මාරු කරන්න
git checkout other-branch
සහ cherry-pick
කැපවීමother-branch
git cherry-pick <sha-of-the-commit>
git reset --hard HEAD~1
පසුව අවශ්ය වේ. මම හිතන්නේ reset --soft
එවකට ශාඛා මාරු කර නැවත වැඩ කිරීමෙන් අමතර වැඩ ඉතිරි වනු ඇත. මගේ මූලික දේවල් බොහොමයක් කිරීමට මම නැවතත් SourceTree භාවිතා කරමින් සිටියෙමි, මගේ දෝෂයෙන් පසුව මෙය සමඟ රේඛා-විධාන කරන්න.
පහත දැක්වෙන විධානය මා වෙනුවෙන් වැඩ කර ඇති අතර, දේශීය කැපවීම් සියල්ලම අතහැර දමා දේශීය දුරස්ථ සම්භවයක් / ප්රධාන ශාඛාවක් ලෙස නැවත සකසනු ලැබේ.
git reset --hard සම්භවය
ඔබගේ යොමු කිරීම සඳහා, ඔබගේ වර්තමාන ශාඛාවෙන් git reset --hard සමඟ පමණක් නොව, පහත දැක්වෙන විධානයෙන් ද ඔබට “දැඩි කැපීම” කළ හැකි යැයි මම විශ්වාස කරමි:
git checkout -B <branch-name> <SHA>
ඇත්ත වශයෙන්ම, ඔබ පරීක්ෂා කිරීම ගැන තැකීමක් නොකරන්නේ නම්, ඔබට අවශ්ය ඕනෑම දෙයකට ශාඛාව සැකසිය හැකිය:
git branch -f <branch-name> <SHA>
උදාහරණයක් ලෙස, ශාඛාවකින් කොමිස් ඉවත් කිරීම සඳහා ක්රමලේඛනමය ක්රමයක් වනු ඇත, නිදසුනක් ලෙස, එයට නව කොමිස් පිටපත් කිරීම සඳහා (නැවත භාවිතා කිරීම).
ඔබ වෙනත් ස්ථානයකින් ප්රභවයන් ගෙන එය ශාඛාවට දැමූ නිසා ඔබට ශාඛාවක් මාස්ටර් වෙතින් විසන්ධි වී ඇතැයි සිතමු.
ඔබට දැන් වෙනස්කම් ඇති ශාඛාවක් ඇත, අපි එය "මාතෘකාව" ලෙස හඳුන්වමු.
ඔබ දැන් ඔබේ මාතෘකා ශාඛාවේ අනුපිටපතක් සාදා එය "ඩම්ප්" ශාඛාවේ වාඩි වී ඇති ප්රභව කේත ඩම්ප් වෙත නැවත ප්රතිස්ථාපනය කරනු ඇත:
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
දැන් ඔබගේ වෙනස්කම් ශාඛා මාතෘකාව_අවස්ථාවේ "ඩම්ප්" හි ආරම්භක ස්ථානය මත පදනම්ව නැවත යෙදී ඇති නමුත් "මාස්ටර්" සිට සිදුවී ඇති කැපවීම් පමණි. එබැවින් මාස්ටර්ගේ ඔබගේ වෙනස්වීම් දැන් "ඩම්ප්" මත නැවත යෙදී ඇති නමුත් ප්රති result ලය අවසන් වන්නේ "මාතෘකාව_ඩප්ලිකේට්" වලින් ය.
එසේ කිරීමෙන් ඔබට "ඩම්ප්" වෙනුවට "මාතෘකාව_ඩප්ලිකේට්" සමඟ ආදේශ කළ හැකිය:
git branch -f dump topic_duplicate
git branch -D topic_duplicate
හෝ සමඟ
git branch -M topic_duplicate dump
නැතහොත් කුණු කසළ බැහැර කිරීමෙන් පමණි
git branch -D dump
සමහර විට ඔබට වර්තමාන "මාතෘකාව_අවස්ථාව" ඉවත් කිරීමෙන් පසු චෙරි-පික් ද කළ හැකිය.
මා කියන්නට උත්සාහ කරන්නේ ඔබට වෙනත් මුතුන් මිත්තෙකු මත පදනම් වූ වර්තමාන "අනුපිටපත්" ශාඛාව යාවත්කාලීන කිරීමට අවශ්ය නම්, ඔබ මුලින් ම කලින් කළ "චෙරිපික්" කොමිස් මකා දැමිය යුතුය. git reset --hard <last-commit-to-retain>
හෝ git branch -f topic_duplicate <last-commit-to-retain>
අනෙක් පිටපත් පිටපත් කිරීමෙන් (ප්රධාන වශයෙන්) මාතෘකා ශාඛාව) නැවත ප්රතිස්ථාපනය කිරීමෙන් හෝ චෙරි තෝරාගැනීමෙන්.
නැවත ප්රතිස්ථාපනය කිරීම ක්රියාත්මක වන්නේ දැනටමත් කොමිස් ඇති ශාඛාවක් මත පමණි, එබැවින් ඔබට එය කිරීමට අවශ්ය සෑම අවස්ථාවකම ඔබේ මාතෘකා ශාඛාව අනුපිටපත් කළ යුතුය.
චෙරිපික් කිරීම වඩාත් පහසු ය:
git cherry-pick master..topic
එබැවින් සම්පූර්ණ අනුක්රමය පහතට පැමිණේ:
git reset --hard <latest-commit-to-keep>
git cherry-pick master..topic
ඔබගේ මාතෘකාව-අනුපිටපත් ශාඛාව පරීක්ෂා කර ඇති විට. එමඟින් කලින් චෙරි තෝරාගත් කොමිස් වත්මන් අනුපිටපතෙන් ඉවත් කරනු ඇති අතර, ඔබගේ වර්තමාන "ඩම්ප්" (විවිධ මුතුන් මිත්තන්) මත "මාතෘකාව" තුළ සිදුවන සියලු වෙනස්කම් නැවත යොදන්න. ඔබේ දේශීය වෙනස්වීම් තවමත් එයට අදාළ වේදැයි පරීක්ෂා කිරීම සඳහා වෙනස් “පහළට” මාස්ටර් භාවිතා කරන අතරම ඔබේ සංවර්ධනය “සැබෑ” උඩුමහලේ මාස්ටර් මත පදනම් කර ගැනීම සාධාරණ පහසු ක්රමයක් ලෙස පෙනේ. විකල්පයක් ලෙස ඔබට වෙනසක් ජනනය කර ඕනෑම Git ප්රභව ගසකින් පිටත ආලේප කළ හැකිය. නමුත් මේ ආකාරයෙන් ඔබට යාවත්කාලීන කරන ලද (පැච්) අනුවාදයක් ඔබේ බෙදාහැරීමේ අනුවාදය මත පදනම්ව තබා ගත හැකි අතර ඔබේ සැබෑ සංවර්ධනය සැබෑ උඩු යටිකුරු ස්වාමියාට විරුද්ධ වේ.
එබැවින් නිරූපණය කිරීමට:
මෙය යමෙකුට උපකාරී වේ යැයි සිතමි. මෙය නැවත ලිවීමට මා අදහස් කළ නමුත් මට දැන් කළමනාකරණය කළ නොහැක. සුභ පැතුම්.