මම වැරදි දෙයක් ලිව්වේ කැපවීමේ පණිවිඩයක.
පණිවිඩය වෙනස් කරන්නේ කෙසේද? බැඳීම තවම තල්ලු කර නැත.
මම වැරදි දෙයක් ලිව්වේ කැපවීමේ පණිවිඩයක.
පණිවිඩය වෙනස් කරන්නේ කෙසේද? බැඳීම තවම තල්ලු කර නැත.
Answers:
git commit --amend
ඔබගේ සංස්කාරකය විවෘත කරනු ඇති අතර, නවතම කැපවීමේ පණිවිඩය වෙනස් කිරීමට ඔබට ඉඩ සලසයි. මීට අමතරව, ඔබට විධාන රේඛාව තුළ බැඳීම් පණිවිඩය කෙලින්ම සැකසිය හැකිය:
git commit --amend -m "New commit message"
… කෙසේ වෙතත්, මෙය බහු-රේඛා පණිවිඩ හෝ කුඩා නිවැරදි කිරීම් ඇතුළු කිරීමට වඩාත් කරදරකාරී විය හැකිය.
මෙය කිරීමට පෙර වේදිකාගත කර ඇති වැඩ පිටපත් කිසිවක් ඔබ සතුව නොමැති බවට වග බලා ගන්න . ( අස්ථායී වෙනස්කම් සිදු නොවනු ඇත.)
ඔබ දැනටමත් ඔබගේ දුරස්ථ ශාඛාව වෙත ඔබේ කැපවීම තල්ලු කර ඇත්නම්, - ඔබේ කැපවීම දේශීයව සංශෝධනය කිරීමෙන් පසුව (ඉහත විස්තර කර ඇති පරිදි) - ඔබත් ඒ සඳහා කැපවීම බල කළ යුතුය :
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
අවවාදයයි: බලෙන් තල්ලු කිරීම දුරස්ථ ශාඛාව ඔබේ දේශීය තත්වය සමඟ නැවත ලියයි . ඔබේ ප්රාදේශීය ශාඛාවේ නොමැති දුරස්ථ ශාඛාවේ කොමිස් තිබේ නම්, ඔබට එම කොමිස් අහිමි වනු ඇත .
අවවාදයයි: ඔබ දැනටමත් වෙනත් පුද්ගලයින් සමඟ බෙදාගෙන ඇති කොමිස් සංශෝධනය කිරීම ගැන සැලකිලිමත් වන්න. කොමිස් සංශෝධනය කිරීම අත්යවශ්යයෙන්ම වෙනස් SHA හැඳුනුම්පත් ඇති බවට නැවත ලියයි , එමඟින් ඔබ නැවත ලියා ඇති පැරණි බැඳීම්වල පිටපත් වෙනත් පුද්ගලයින් සතුව තිබේ නම් එය ගැටළුවක් වේ. පැරණි බැඳීමේ පිටපතක් ඇති ඕනෑම අයෙකුට ඔබගේ අලුතෙන් නැවත ලියන ලද බැඳීම සමඟ ඔවුන්ගේ වැඩ සමමුහුර්ත කිරීමට අවශ්ය වනු ඇත, එය සමහර විට දුෂ්කර විය හැකිය, එබැවින් හවුල් බැඳීම් ඉතිහාසය නැවත ලිවීමට උත්සාහ කරන විට ඔබ අන් අය සමඟ සම්බන්ධීකරණය කිරීමට වග බලා ගන්න, නැතහොත් හවුල් කොමිස් නැවත ලිවීමෙන් වළකින්න. සම්පූර්ණයෙන්ම.
තවත් විකල්පයක් වන්නේ අන්තර්ක්රියාකාරී ප්රතිරෝධය භාවිතා කිරීමයි. නවතම පණිවිඩය නොවුනත් ඔබට යාවත්කාලීන කිරීමට අවශ්ය ඕනෑම පණිවිඩයක් සංස්කරණය කිරීමට මෙය ඔබට ඉඩ සලසයි.
Git ස්කොෂ් එකක් කිරීම සඳහා, මෙම පියවර අනුගමනය කරන්න:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
ඔබ කළ දේ ස්කොෂ් කළ පසු - e/r
පණිවිඩය සංස්කරණය කිරීම සඳහා තෝරන්න :
ඔබ භාවිතා කරන විට n වලට වඩා වැඩිgit rebase -i HEAD~n
විය හැකිය . Git විසින් අවසාන n කොමිස් වල ඇති සියලුම කොමිස් "එකතු" කරනු ඇති අතර, එම පරාසය අතර කොතැනක හෝ ඒකාබද්ධ කිරීමක් සිදුවී ඇත්නම් ඔබට සියලු කොමිස් ද පෙනෙනු ඇත, එබැවින් ප්රති come ලය n + වනු ඇත.
ඔබට එය එක් ශාඛාවකට වඩා වැඩි ගණනක් කළ යුතු නම් සහ අන්තර්ගතය සංශෝධනය කිරීමේදී ඔබට ගැටුම් වලට මුහුණ දීමට සිදුවිය හැකි නම්, git rerere
එම ගැටුම් ඔබ වෙනුවෙන් ස්වයංක්රීයව විසඳීමට Git ට ඉඩ දෙන්න.
git commit --amend
තරම් බලවත් නොවේ git rebase -i
.
git commit --amend
(අ?) මාස්ටර් බැඳීම නිවැරදි කළ හැකිය.
git push -f origin branchname
git push -f
අනෙක් පුද්ගලයින් එකම ගබඩාවක් භාවිතා කරන්නේ නම් ughughes ටිකක් භයානක නොවේද?
git commit --amend -c HEAD
. මෙය ඔබගේ පැරණි බැඳීම් පණිවිඩය සමඟ පූර්ව ජනගහනය සහිත සංස්කාරකය විවෘත කරනු ඇත, එවිට ඔබට එය වෙනස් කළ හැකිය.
git commit --amend -m "your new message"
ඔබට නිවැරදි කිරීමට අවශ්ය කැපවීම නවතම නොවේ නම්:
git rebase --interactive $parent_of_flawed_commit
ඔබට දෝෂ සහිත කොමිස් කිහිපයක් නිවැරදි කිරීමට අවශ්ය නම්, ඔවුන්ගෙන් පැරණිතම තැනැත්තාගේ මවුපියන් පසුකර යන්න.
ඔබ ලබා දුන් දින සිට කළ යුතු සියලු දේ ලැයිස්තුවක් සමඟ සංස්කාරකයක් පැමිණෙනු ඇත.
pick
වෙත වෙනස් කරන්නreword
edit
) ඔබ විසින් අදාල කරුණ නිවැරදි කිරීමට අවශ්ය ඕනෑම අනාචාරයේ ඉදිරිපිට උද්ඝෝෂණයක් සංවිධානය කර තිබුණි.ඔබට නැවත කියවීමට අවශ්ය සෑම කැපවීමක් සඳහාම , Git ඔබව නැවත ඔබේ සංස්කාරකයට දමනු ඇත. ඔබට සංස්කරණය කිරීමට අවශ්ය සෑම කැපවීමක් සඳහාම , Git ඔබව කවචයට දමයි. ඔබ කවචයේ නම්:
git commit --amend
git rebase --continue
මෙම අනුක්රමය බොහෝමයක් ඔබ යන විට විවිධ විධානයන්හි ප්රතිදානය මඟින් ඔබට පැහැදිලි කරනු ඇත. එය ඉතා පහසු ය; ඔබට එය කටපාඩම් කිරීමට අවශ්ය නැත - මතක තබා ගන්න, git rebase --interactive
කොපමණ කලකට පෙර වුවද ඒවා නිවැරදි කිරීමට ඔබට ඉඩ සලසයි.
ඔබ දැනටමත් තල්ලු කර ඇති කොමිස් වෙනස් කිරීමට ඔබට අවශ්ය නොවන බව සලකන්න. එසේත් නැතිනම් ඔබ එසේ කළ හැකිය, නමුත් එවැනි අවස්ථාවකදී ඔබගේ කැපවීම් ඉවත් කර ඒවාට ඉහළින් වැඩ කළ සියලු දෙනා සමඟ සන්නිවේදනය කිරීමට ඔබට විශාල සැලකිල්ලක් දැක්විය යුතුය. යමෙකු ප්රකාශිත ශාඛාවකට නැවත ප්රතිස්ථාපනය හෝ යළි පිහිටුවීම තල්ලු කිරීමෙන් පසු මා නැවත අයකර ගන්නේ කෙසේද?
reword
වෙනුවට pick
සංස්කරණය කිරීමට ලඝු-සටහන පණිවිඩයක්.
$parent_of_flawed_commit
සමාන වේ $flawed_commit^
.
-p
( --preserve-merges
) භාවිතා කරන්න .
පෙර කැපවීම සංශෝධනය කිරීම සඳහා, ඔබට අවශ්ය වෙනස්කම් සිදු කර එම වෙනස්කම් සිදු කරන්න, ඉන්පසු ක්රියාත්මක කරන්න
git commit --amend
මෙය ඔබගේ නව කැපවීමේ පණිවිඩය නියෝජනය කරන ගොනුවක් ඔබේ පෙළ සංස්කාරකයේ විවෘත කරනු ඇත. එය ඔබගේ පැරණි බැඳීම් පණිවිඩයේ පෙළ සමඟ ජනගහනයෙන් ආරම්භ වේ. ඔබට අවශ්ය පරිදි බැඳීම් පණිවිඩය වෙනස් කරන්න, ඉන්පසු ගොනුව සුරකින්න සහ අවසන් කිරීමට ඔබේ සංස්කාරකයෙන් ඉවත් වන්න.
පෙර බැඳීම සංශෝධනය කර එකම ලොග් පණිවිඩය තබා ගැනීමට, ධාවනය කරන්න
git commit --amend -C HEAD
පෙර කැපවීම මුළුමනින්ම ඉවත් කිරීමෙන් එය නිවැරදි කිරීමට, ධාවනය කරන්න
git reset --hard HEAD^
බැඳීම් පණිවිඩ එකකට වඩා සංස්කරණය කිරීමට ඔබට අවශ්ය නම්, ධාවනය කරන්න
git rebase -i HEAD~commit_count
( ඔබට සංස්කරණය කිරීමට අවශ්ය කොමිට් ගණන සමඟ commit_count ප්රතිස්ථාපනය කරන්න.) මෙම විධානය මඟින් ඔබේ සංස්කාරකය දියත් කරයි. පළමු කැපවීම (ඔබට වෙනස් කිරීමට අවශ්ය එක) “තෝරන්න” වෙනුවට “සංස්කරණය” ලෙස සලකුණු කරන්න, ඉන්පසු ඔබේ සංස්කාරකය සුරකින්න සහ පිටවන්න. ඔබට කිරීමට අවශ්ය වෙනස සිදු කර ක්රියාත්මක කරන්න
git commit --amend
git rebase --continue
සටහන: විවෘත කළ සංස්කාරකයෙන් ඔබට "ඔබට අවශ්ය වෙනස කරන්න" git commit --amend
git rebase -i HEAD~commit_count
ඔබ තෝරාගත් කොපමණ කොමිට් වල බැඳීම් පණිවිඩ වෙනස් කිරීමට ද ඔබට ඉඩ සලසයි. තෝරාගත් කොමිස් "පික්" වෙනුවට "රිවෝඩ්" ලෙස සලකුණු කරන්න.
git reset --hard
නොගැලපෙන වෙනස්කම් සමනය කරයි. කරුණාකර ආදේශ --hard
කරන්න --soft
.
git reset --hard
එය සම්පුර්ණයෙන්ම නීත්යානුකූල විධානයකි, නමුත් ප්රශ්නය අනුව එය නොමඟ යවන සුළුය. ඔබ භාවිතා --hard
කරන්නේ ඔබ විසින් සිදුකරන ලද වෙනස්කම් සිදුකිරීමට අවශ්ය නම්, ඔබ කැපවීමේ පණිවිඩයේ යතුරු ලියනය කළේ නම් නොවේ!
දැනටමත් සඳහන් කර ඇති පරිදි, git commit --amend
අවසාන බැඳීම නැවත ලිවීමේ ක්රමයයි. එක් සටහනක්: ඔබ ලිපිගොනු නැවත ලිවීමට කැමති නම් , විධානය වනු ඇත
git commit -a --amend -m "My new commit message"
git add file.ext
නම් පමණක්git commit --amend
ඔබට ඒ git filter-branch
සඳහා භාවිතා කළ හැකිය .
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
එය සුළුපටු දෙයක් තරම් පහසු නැත git commit --amend
, නමුත් ඔබේ වැරදිසහගත පණිවිඩයෙන් පසුව ඔබට දැනටමත් යම් යම් ඒකාබද්ධ කිරීම් තිබේ නම් එය විශේෂයෙන් ප්රයෝජනවත් වේ.
මෙය අතර ඇති සෑම බැඳීමක්ම HEAD
සහ අඩුපාඩුකම් නැවත ලිවීමට උත්සාහ කරන බව සලකන්න , එබැවින් ඔබ ඔබේ msg-filter
විධානය ඉතා බුද්ධිමත්ව තෝරා ගත යුතුය ;-)
$flawed_commit^..HEAD
, නැත $flawed_commit..HEAD
. man පිටුවෙහි සඳහන් පරිදි: command විධානය මඟින් විධාන රේඛාවේ සඳහන් ධනාත්මක යොමු කිරීම් පමණක් නැවත ලියනු ඇත (උදා: ඔබ a..b සමත් වුවහොත් b පමණක් නැවත ලියනු ලැබේ). »
මම මේ ආකාරයට කැමතියි:
git commit --amend -c <commit ID>
එසේ නොමැති නම්, නව බැඳීම් හැඳුනුම්පතක් සමඟ නව බැඳීමක් ඇත.
-c
කාරණා කිහිපයක් කරනවා. එය පෙරනිමියෙන් පැරණි පණිවිඩය භාවිතා කරයි, නමුත් එය කර්තෘ තොරතුරු (පුද්ගලයා සහ වේලාව) පිටපත් කරයි. -C
පණිවිඩය සංස්කරණය කිරීමට එය ඔබෙන් ඉල්ලා නොසිටීම හැර එකම දේ කරයි.
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
ඔබ Git GUI මෙවලම භාවිතා කරන්නේ නම්, Amend last commit නම් බොත්තමක් තිබේ. එම බොත්තම මත ක්ලික් කරන්න, එවිට එය ඔබගේ අවසන් බැඳීම් ලිපිගොනු සහ පණිවිඩය පෙන්වනු ඇත. එම පණිවිඩය සංස්කරණය කරන්න, එවිට ඔබට නව කැපවීමේ පණිවිඩයක් සමඟ එය කළ හැකිය.
නැතහොත් මෙම විධානය කොන්සෝලයකින් / පර්යන්තයකින් භාවිතා කරන්න:
git commit -a --amend -m "My new commit message"
ඔබට Git rebasing භාවිතා කළ හැකිය . උදාහරණයක් ලෙස, bbc643cd කිරීමට නැවත වෙනස් කිරීමට ඔබට අවශ්ය නම්, ධාවනය කරන්න
$ git rebase bbc643cd^ --interactive
පෙරනිමි සංස්කාරකයේ, ඔබට වෙනස් කිරීමට අවශ්ය වන පේළියේ 'සංස්කරණය' කිරීමට 'තේරීම' වෙනස් කරන්න. ඔබගේ වෙනස්කම් සිදු කර ඒවා සමඟ වේදිකා ගත කරන්න
$ git add <filepattern>
දැන් ඔබට භාවිතා කළ හැකිය
$ git commit --amend
බැඳීම වෙනස් කිරීමට සහ ඉන් පසුව
$ git rebase --continue
පෙර හිස වෙත ආපසු යාමට.
git commit --amend
බලපාන බවට වග බලා ගැනීමට ඔබට අවශ්ය නම් ඔබට භාවිතා කළ හැකි git show
අතර එය නව පණිවිඩය පෙන්වනු ඇත.
ඔබට අවශ්ය වන්නේ ඔබගේ අවසාන කැපවීමේ පණිවිඩය වෙනස් කිරීමට නම්, එසේ කරන්න:
git commit --amend
එමඟින් ඔබව ඔබේ පෙළ සංස්කාරකයට ඇද දමනු ඇති අතර අවසාන කැපවීමේ පණිවිඩය වෙනස් කිරීමට ඔබට ඉඩ සලසයි.
ඔබ පසුගිය තුන් පණිවුඩ, හෝ එම ලක්ෂ්යය වෙත පණිවිඩ දක්වා සිදු ඕනෑම, සැපයුම් සිදු වෙනස් කිරීමට අවශ්ය නම් HEAD~3
කිරීමට git rebase -i
: විධානය
git rebase -i HEAD~3
git commit --amend
බව ද කියනු ලැබේ, ඔබ කළ git rebase -i HEAD~commit_count
සියල්ලම ප්ලග් ඉන් කර 3
ඇත commit_count
.
ඔබට විවිධ ශාඛා හරහා පැරණි බැඳීම් පණිවිඩයක් වෙනස් කිරීමට සිදුවුවහොත් (එනම්, වැරදි පණිවිඩය සමඟ ඇති බැඳීම බහු ශාඛා වල පවතී) ඔබට භාවිතා කිරීමට අවශ්ය විය හැකිය:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git විසින් නැවත ලිවීම සඳහා තාවකාලික නාමාවලියක් නිර්මාණය කරනු ඇති අතර ඊට අමතරව පැරණි යොමු සටහන් උපස්ථ කරයි refs/original/
.
-f
මෙහෙයුම ක්රියාත්මක කිරීම බලාත්මක කරයි. තාවකාලික නාමාවලිය දැනටමත් තිබේ නම් හෝ දැනටමත් යොමු කර තිබේ නම් මෙය අවශ්ය refs/original
වේ. එය එසේ නොවේ නම්, ඔබට මෙම ධජය අතහැර දැමිය හැකිය.
--
පෙරහන්-ශාඛා විකල්පයන් සංශෝධන විකල්ප වලින් වෙන් කරයි.
--all
සියලුම ශාඛා සහ ටැග් නැවත ලිවීමට වග බලා ගනී .
ඔබගේ පැරණි යොමු වල උපස්ථය හේතුවෙන්, විධානය ක්රියාත්මක කිරීමට පෙර ඔබට පහසුවෙන් නැවත රාජ්යයට යා හැකිය.
ඔබේ ස්වාමියා නැවත ලබා ගැනීමටත් එය ශාඛාවට ප්රවේශ කිරීමටත් ඔබට අවශ්ය යැයි පවසන්න old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
අදහස් එළියෙ හෝ මම අමතක ගොනු එකතු කිරීමට git add
පමණක් නොව, මෙතෙක් මම එක හොදයි පෙර git push
සංස්. git filter-branch
අනුවාද ඉතිහාසය මුළුමනින්ම අවුල් කිරීමට අවශ්ය විට මම ද භාවිතා කරමි, නමුත් OP ට මෙය අවශ්ය නැත, එබැවින් මෙම පිළිතුරට විශාල සෞඛ්ය අනතුරු ඇඟවීමක් අවශ්ය වේ - මෙය නිවසේදී උත්සාහ නොකරන්න, එබී බලන්න !!
භාවිත
git commit --amend
එය විස්තරාත්මකව වටහා ගැනීම සඳහා විශිෂ්ට තනතුරක් 4. Git ඉතිහාසය නැවත ලිවීම . එය භාවිතා නොකළ යුතු අවස්ථා ගැන ද කතා කරයිgit commit --amend
.
git commit --amend
පිළිතුර මේ වන විටත් (කිහිප වතාවක්) ලබා දී ඇත ඔබ සතු ලියූ පෙර. ඔබ එය නැවත පළ කළේ ඇයි? ඔබට "නැවත ලිවීමේ ඉතිහාසය" වෙත සබැඳියක් එක් කිරීමට අවශ්ය නම්, ඔබට දැනට පවතින පිළිතුරු වලින් එකක් සංස්කරණය කිරීමට හෝ අදහස් දැක්වීමට හැකිය.
ඔබට මෙහි විකල්ප කිහිපයක් තිබේ. ඔබට කළ හැකිය
git commit --amend
එය ඔබගේ අවසාන කැපවීම වන තාක් කල්.
එසේ නොමැති නම්, එය ඔබගේ අවසාන කැපවීම නොවේ නම්, ඔබට අන්තර්ක්රියාකාරී ප්රතිප්රහාරයක් කළ හැකිය,
git rebase -i [branched_from] [hash before commit]
අන්තර්ක්රියාකාරී ප්රතිප්රහාරය ඇතුළත ඔබ එම කැපවීමට සංස්කරණය එක් කරයි. එය පැමිණි විට, ඒ git commit --amend
හා බැඳීම් පණිවිඩය වෙනස් කරන්න. එම කැපවීමේ ස්ථානයට පෙර ඔබට පෙරළීමට අවශ්ය නම්, ඔබට එම කැපවීම භාවිතා git reflog
කර මකා දැමිය හැකිය . එවිට ඔබ git commit
නැවත කරන්න.
එය ඔබගේ අවසාන කැපවීම නම්, බැඳීම සංශෝධනය කරන්න:
git commit --amend -o -m "New commit message"
( -o
( --only
) ධජය භාවිතා කරමින් ඔබ කැපවීමේ පණිවිඩය පමණක් වෙනස් කරන බවට වග බලා ගන්න)
එය වළලනු ලැබූ බැඳීමක් නම්, පුදුමාකාර අන්තර්ක්රියාකාරී නැවත භාවිතා කිරීම :
git rebase -i @~9 # Show the last 9 commits in a text editor
ඔබට අවශ්ය කැපවීම සොයා ගන්න, ( ) pick
වෙත වෙනස් කර ගොනුව සුරකින්න සහ වසා දමන්න . කළා!r
reword
කුඩා Vim නිබන්ධනය (හෝ, යතුරු එබීම් 8 ක් සමඟ නැවත ප්රතිස්ථාපනය කරන්නේ කෙසේද 3j
cw
r
EscZZ
):
vimtutor
ඔබට කාලය ඇත්නම් ධාවනය කරන්නh
j
k
l
චලන යතුරු වලට අනුරූප වේ ←↓↑→3j
පේළි තුනකින් පහළට ගමන් කරයිi
ඇතුළු කිරීමේ මාදිලියට ඇතුළු වීමට - ඔබ ටයිප් කරන පෙළ ගොනුවේ දිස්වනු ඇතc
ඇතුළු කිරීමේ ප්රකාරයෙන් ඉවත් වී "සාමාන්ය" ප්රකාරයට ආපසු යන්නu
අහෝසි කිරීමටr
නැවත කිරීමටdd
, dw
, dl
පිළිවෙලින්, මාර්ගය, වචනයක් හෝ, හෝ ලිපියක් මකා දැමීමටcc
, cw
, cl
පිළිවෙලින්, මාර්ගය, වචනයක් හෝ, හෝ ලිපියක් වෙනස් කිරීමට (ලෙස එම dd
i
)yy
, yw
,yl
පිළිවෙළින්, ( "yank") රේඛාවක්, වචනයක් හෝ, හෝ ලිපියක් පිටපත් කිරීමටp
හෝ P
පිළිවෙලින් වත්මන් ස්ථානයට පසුව හෝ පෙර ඇලවීම:w
Enter ගොනුවක් සුරැකීමට (ලිවීමට):q!
Enter ඉතිරි නොකර ඉවත්වීමට:wq
Enterහෝ ZZ
සුරැකීමට සහ ඉවත් වීමටඔබ පෙළ බොහෝ සංස්කරණය කරන්නේ නම්, පසුව ඩ්වොරක් යතුරුපුවරු පිරිසැලසුම වෙත මාරු වන්න , ස්පර්ශ-ටයිප් කිරීමට ඉගෙන ගන්න, සහ Vim ඉගෙන ගන්න. එය උත්සාහ කිරීම වටී ද? ඔව්.
ProTip ™: ඉතිහාසය නැවත ලියන “භයානක” විධානයන් සමඟ අත්හදා බැලීමට බිය නොවන්න * - Git විසින් ඔබගේ කොමිස් දින 90 ක් පෙරනිමියෙන් මකා නොදමනු ඇත; ඔබට ඒවා reflog හි සොයාගත හැකිය:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* වැනි විකල්ප සඳහා සිදු වොච් --hard
සහ --force
වුවත් - ඔවුන් දත්ත ඉවතලන්න හැක.
* එසේම, ඔබ සහයෝගයෙන් කටයුතු කරන කිසිදු ශාඛාවක ඉතිහාසය නැවත ලියන්න එපා.
nano
? අපි කතා කරන්නේ පෙළ ගොනුවකට කළ යුතු සුළු වෙනස් කිරීම් ගැන මිස දෘ c කේතීකරණයෙන් නොව “හොඳම” පෙළ සංස්කාරකය පිළිබඳ දැවෙන යුද්ධයක් ඇති කරයි.
ddjjpZZ
2 පහළට ගෙන යයි. මූලික Vim දැනුම පිළිබඳ චමත්කාරජනක කිසිවක් නොමැත; නැනෝවට වඩා Vim සමඟ සැපපහසු වීමට මිනිත්තු 10 ක් ගතවේ.
ඔබ Git GUI භාවිතා කරන්නේ නම්, තල්ලු නොකළ අවසන් බැඳීම සංශෝධනය කළ හැකිය:
Commit/Amend Last Commit
මට හැකි පමණින් මම Git GUI භාවිතා කරමි, එමඟින් අවසාන කැපවීම සංශෝධනය කිරීමට ඔබට අවස්ථාව ලැබේ:
එසේම, git rebase -i origin/master
මාස්ටර්ට ඉහළින් ඔබ විසින් සිදු කරන ලද කැපවීම් සෑම විටම ඔබට ඉදිරිපත් කරන ලස්සන මන්ත්රයක් වන අතර, සංශෝධනය කිරීම, මකා දැමීම, නැවත සකස් කිරීම හෝ ස්කොෂ් කිරීම සඳහා ඔබට විකල්පයක් ලබා දේ. මුලින්ම එම හැෂ් එක අල්ලා ගැනීමට අවශ්ය නැත.
ඇවැත්නි, එබැවින් මෙය කිරීමට බොහෝ ක්රම තිබේ.
මෙය කළ හැකි තවත් ක්රමයක් නම් අවසාන කැපවීම මකා දැමීමයි, නමුත් ඔබේ වැඩ කටයුතු ඔබට අහිමි නොවන පරිදි එහි වෙනස්කම් තබා ගන්න. නිවැරදි කළ පණිවිඩය සමඟ ඔබට තවත් කැපවීමක් කළ හැකිය. මෙය මේ වගේ දෙයක් වනු ඇත:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
ගොනුවක් එක් කිරීමට හෝ වෙනසක් කිරීමට මට අමතක වුවහොත් මම සෑම විටම මෙය කරමි.
--soft
ඒ වෙනුවට සඳහන් කිරීමට මතක තබා ගන්න--hard
, එසේ නොමැතිනම් ඔබට එම බැඳීම මුළුමනින්ම අහිමි වේ.
git commit --amend
පියවර 2 ක ක්රියාවලියක් හැරෙන්නට හරියටම එකම දේ කරයි .
--amend
කතෘගේ තොරතුරු තබාගනු ඇත, නමුත් ප්රශ්නය අසන්නේ පණිවිඩය වෙනස් කිරීමට පමණි.
පැරණි පණිවිඩ සංස්කරණය කිරීමට (එනම් නවතම පණිවිඩය පමණක් නොවේ) වින්ඩෝස් / මැක් GUI සොයන ඕනෑම කෙනෙකුට, මම නිර්දේශ කරන්නේ Sourcetree . අනුගමනය කළ යුතු පියවර පහතින්.
දුරස්ථයකට තල්ලු කර නොමැති කොමිස් සඳහා:
Unable to create 'project_path/.git/index.lock': File exists.
. ගැටලුව කුමක්දැයි නිශ්චිතවම විශ්වාස නැත, නැතහොත් එය සෝර්සෙට්රි හි අනාගත අනුවාදයකින් විසඳනු ඇත්ද, නමුත් මෙය සිදුවුවහොත් ඒවා එකවර නැවත ප්රතිස්ථාපනය කිරීම නිර්දේශ කරනු ඇත (මන්දගාමී නමුත් වඩා විශ්වාසදායක බව පෙනේ).... හෝ ... දැනටමත් තල්ලු කර ඇති කොමිස් සඳහා:
ඉහත පිළිතුරට සමාන මෙම පිළිතුරේ පියවර අනුගමනය කරන්න , නමුත් git push origin <branch> -f
ශාඛාව බලෙන් තල්ලු කිරීම සඳහා විධාන රේඛාවෙන් ( ) තවත් විධානයක් ක්රියාත්මක කිරීම අවශ්ය වේ . ඒ සියල්ල කියවා අවශ්ය පරෙස්සම් වන්නැයි මම නිර්දේශ කරමි!
ඔබට නවතම කැපවීම සංස්කරණය කිරීමට අවශ්ය නම්, භාවිතා කරන්න:
git commit --amend
හෝ
git commit --amend -m 'one line message'
ඔබට වර්ග කිහිපයක් කොමිස් සංස්කරණය කිරීමට අවශ්ය නම්, ඒ වෙනුවට ඔබ නැවත භාවිතා කිරීම භාවිතා කළ යුතුය:
git rebase -i <hash of one commit before the wrong commit>
ගොනුවක, ඉහත සඳහන් පරිදි, ලිවීම edit/e
හෝ වෙනත් විකල්පයක් වැනි, සුරකින්න සහ පිටවීම ඔබන්න.
දැන් ඔබ මුලින්ම වැරදිසහගත වනු ඇත. ලිපිගොනු වල වෙනස්කම් කරන්න, ඒවා ස්වයංක්රීයව ඔබ වෙනුවෙන් වේදිකා ගත වේ. වර්ගය
git commit --amend
එය සුරකින්න සහ පිටවී ටයිප් කරන්න
git rebase --continue
ඔබගේ සියලු තේරීම් අවසන් වන තුරු ඊළඟ තේරීම වෙත යාමට.
මෙම විශේෂිත කැපවීමෙන් පසුව ඔබගේ SHA හැෂ් සියල්ල වෙනස් කරන බව සලකන්න.
ඔබ පමණක් ඔබේ අවසන් පණිවිඩය වෙනස් කිරීමට අවශ්ය නම් ඔබ විසින් භාවිතා කළ යුතු --only
ධජය හෝ එහි කෙටි මාර්ග -o
සමග commit --amend
:
git commit --amend -o -m "New commit message"
වේදිකාගත කරන ලද දේවල් සමඟ ඔබේ බැඳීම අහම්බෙන් වැඩි නොකරන බවට මෙය සහතික කරයි. ඇත්ත වශයෙන්ම නිසි $EDITOR
වින්යාසයක් තිබීම වඩාත් සුදුසුය . එවිට ඔබට -m
විකල්පය අතහැර දැමිය හැකි අතර , Git විසින් පැරණි පණිවිඩය සමඟ බැඳීමේ පණිවිඩය පෙර පුරවනු ඇත. මේ ආකාරයෙන් එය පහසුවෙන් සංස්කරණය කළ හැකිය.
git commit --amend
. ප්රශ්නය ඉතා නිශ්චිත විය, එබැවින් දිගු! = වඩා හොඳය. -o
ධජය පිළිබඳ තීරණාත්මක සඳහන බොහෝ විට ඉතිරි තොරතුරු වල තැන්පත් වනු ඇත. දැනටමත් බොහෝ ඡන්ද ඇති පිළිතුරක් සංස්කරණය කිරීම මට පහසු නැත.
--only
විකල්පය ඇතත් --amend
එය 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ) හි සවි කරන තෙක් එය නිවැරදිව ක්රියාත්මක නොවීය . එබැවින් 2008 දී නිවැරදි පිළිතුර බොහෝ විට මෙසේ විය හැකිය : git stash; git commit --amend; git stash pop
.
ඔබගේ අවසන් වැරදි පණිවිඩය නව බැඳීම් පණිවිඩය සමඟ එක් පේළියකින් යාවත්කාලීන කරන්න:
git commit --amend -m "your new commit message"
නැතහොත්, පහත පරිදි Git යළි පිහිටුවීමට උත්සාහ කරන්න:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# It will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
එක් බැඳීමක් බහුවිධ කැපවීම් වලට ද බිඳ දැමීමට ඔබට උදව් කළ හැකිය:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
මෙන්න ඔබ ඔබගේ අවසාන කැපවීම කොමිස් දෙකකට සාර්ථකව බිඳ දමා ඇත.
git commit --amend
, හරියටම කියනවා ආකාරය වැනි ඉහළ පිළිතුර ඡන්දය . මීට අමතරව, මෙම පෙර පිළිතුරේgit reset --soft HEAD^
මෘදු යළි පිහිටුවීමට සමාන ලෙස ක්රියා කරයි , මන්ද ඔවුන් දෙදෙනාම පළමු දෙමව්පියන්ගේ බැඳීම වෙත නැවත සැකසෙන බැවිනි.
git reset
පණිවිඩයක් බහුවිධ බැඳීම් පණිවිඩවලට බෙදීමට අදහසක් ලබා දීම සඳහා විසඳුම එක් කිරීමට මම කරදර වෙමි . මන්ද, මම භාවිතා කිරීමට පටන් ගන්නා විට මම එම ගැටලුවට මුහුණ දී සිටිමි git
. සමහර විට, මෙය සැබවින්ම උපකාරී වේ. :)
මෙම ප්රශ්නයට පිළිතුරු විශාල ප්රමාණයක් ඇත, නමුත් ඒ කිසිවක් Vim භාවිතා කර පැරණි බැඳීම් පණිවිඩ වෙනස් කරන්නේ කෙසේද යන්න විස්තරාත්මකව විස්තර නොකරයි . මම මෙය තනිවම කිරීමට උත්සාහ කරමින් සිටියෙමි, එබැවින් මෙහි විම් පිළිබඳ අත්දැකීම් නොමැති පුද්ගලයින් සඳහා මම මෙය කළ ආකාරය විස්තරාත්මකව ලියා තබමි!
මම දැනටමත් සේවාදායකයට තල්ලු කළ මගේ නවතම කොමිස් පහ වෙනස් කිරීමට මට අවශ්ය විය. මෙය තරමක් 'භයානක' නිසා වෙනත් අයෙකු දැනටමත් මෙයින් ඉවත් වී ඇත්නම්, බැඳීම් පණිවිඩ වෙනස් කිරීමෙන් ඔබට දේවල් අවුල් කළ හැකිය. කෙසේ වෙතත්, ඔබ ඔබේම කුඩා ශාඛාවක වැඩ කරන විට සහ කිසිවෙකු එය අදින්නේ නැති බව ඔබට විශ්වාස නම් ඔබට එය මේ ආකාරයෙන් වෙනස් කළ හැකිය:
ඔබගේ නවතම කොමිස් පහ වෙනස් කිරීමට ඔබට අවශ්ය යැයි කියමු, ඉන්පසු ඔබ මෙය පර්යන්තයේ ටයිප් කරන්න:
git rebase -i HEAD~5
* 5 යනු ඔබට වෙනස් කිරීමට අවශ්ය බැඳීම් පණිවිඩ ගණනයි (එබැවින් ඔබට 10 වන වරට අවසන් කැපවීමට වෙනස් කිරීමට අවශ්ය නම්, ඔබ 10 ටයිප් කරන්න).
මෙම විධානය මඟින් ඔබව Vim වෙතට ගෙන යනු ඇත, එවිට ඔබට ඔබගේ කැපවීමේ ඉතිහාසය 'සංස්කරණය' කළ හැකිය. ඔබගේ අන්තිම කොමිස් පහ මේ ආකාරයට ඉහළින් ඔබට පෙනෙනු ඇත:
pick <commit hash> commit message
ඒ වෙනුවට pick
ඔබ ලිවිය යුතුයි reword
. ටයිප් කිරීමෙන් ඔබට මෙය Vim හි කළ i
හැකිය. එමඟින් ඔබ ඇතුළු කිරීමේ මාදිලියට පිවිසෙයි. ( පතුලේ INSERT යන වචනයෙන් ඔබ ඇතුළු කිරීමේ මාදිලියේ සිටින බව ඔබට පෙනේ .) ඔබට වෙනස් කිරීමට අවශ්ය කොමිස් සඳහා, reword
ඒ වෙනුවට ටයිප් කරන්නpick
.
එවිට ඔබට මෙම තිරය සුරැකීමට සහ ඉවත් වීමට අවශ්යය. Escබොත්තම එබීමෙන් ඔබ මුලින්ම 'විධාන මාදිලිය' වෙත යාමෙන් එය සිදු කරයි ( පතුලේ ඇති INSERT යන වචනය අතුරුදහන් වී ඇත්නම් ඔබ විධාන මාදිලියේ සිටිනවාදැයි පරීක්ෂා කළ හැකිය ). එවිට ඔබට ටයිප් කිරීමෙන් විධානයක් ටයිප් කළ :
හැකිය. සුරැකීමට සහ ඉවත් වීමට විධානය වේ wq
. එබැවින් ඔබ ටයිප් කළහොත් ඔබ :wq
නිවැරදි මාර්ගයේ ගමන් කරයි.
එවිට ඔබට නැවත කියවීමට අවශ්ය සෑම කැපවීමේ පණිවිඩයක්ම Vim ඉක්මවා යනු ඇත, මෙහිදී ඔබට ඇත්ත වශයෙන්ම බැඳීම් පණිවිඩ වෙනස් කළ හැකිය. ඔබ මෙය සිදු කරනුයේ ඇතුළු කිරීමේ මාදිලියට යාම, බැඳීම් පණිවිඩය වෙනස් කිරීම, විධාන මාදිලියට යාම සහ සුරැකීම සහ ඉවත් වීමෙනි. මෙය පස් වතාවක් කරන්න, ඔබ Vim වලින් බැහැරයි!
ඔබ දැනටමත් ඔබගේ වැරදි ක්රියාවන් තල්ලු කර ඇත්නම්, ඔබ git push --force
ඒවා නැවත ලිවිය යුතුය. එය git push --force
කිරීම ඉතා භයානක දෙයක් බව මතක තබා ගන්න , එබැවින් ඔබ ඔබේ වැරදි ක්රියාවන් තල්ලු කළ දා සිට කිසිවෙකු සේවාදායකයෙන් ඉවත් නොවූ බවට වග බලා ගන්න!
දැන් ඔබ ඔබගේ බැඳීම් පණිවිඩ වෙනස් කර ඇත!
(ඔබ දකින පරිදි, මම Vim හි එතරම් අත්දැකීම් ඇති අයෙක් නොවේ, එබැවින් සිදුවන්නේ කුමක්ද යන්න පැහැදිලි කිරීම සඳහා මම වැරදි 'ලින්ගෝ' භාවිතා කළේ නම්, මාව නිවැරදි කිරීමට නිදහස් වන්න!)
<nitpick>
Stack Overflow හි "නූල්" නොමැත, එය සාකච්ඡා සංසදයක් නොවන නිසා, ඇත්තේ "ප්රශ්න", "පිළිතුරු" සහ "තනතුරු" පමණි. </nitpick>
. එසේම, Vim හි සියලුම අනුවාදයන් එක හා සමාන නොවේ, ඒවා සියල්ලම ඇතුළත් කිරීමේ මාදිලියේ අක්ෂර මකා දැමීමට ඔබට ඉඩ නොදේ (එක්තරා ආකාරයකින් අර්ථවත් කරයි, හරිද?). ඔබට සෑම විටම Vim හි අක්ෂර මකා දැමීමට හැකි නම්, X
එය x
සිදු කරනු ඇත ( x
කර්සරය ඉදිරිපිට ඇති අකුරු X
මකා දමන්නේ නම්, පිටුපස මැකෙනු ඇත). ඔබ වැරදි කරන්නේ නම්, u
අහෝසි කිරීමට ඔබට නැවත නැවත භාවිතා කළ හැකිය . අවසාන වශයෙන්, r
සඳහා වන සරල යෙදුමකි reword
වන අන්තර් rebase කර්තෘ දී.
cw
එහි ආරම්භයේදීම ටයිප් කර ඇත (ප්රශ්නය vim ගැන නොවුවද, මම එකඟ වෙමි).
nano
මිඩ්නයිට් කමාන්ඩර්ගේ mcedit වැනි බුද්ධිමත් හා පරිශීලක-හිතකාමී දෙයකට සැකසිය හැකිය.
ඔබට git-rebase-reword භාවිතා කළ හැකිය
එය සැලසුම් කර ඇත්තේ ඕනෑම කැපවීමක් (අන්තිම පමණක් නොව) සංස්කරණය කිරීමට ය commit --amend
$ git rebase-reword <commit-or-refname>
බැඳීමක් සංශෝධනය කිරීම සඳහා අන්තර්ක්රියාකාරී ප්රතිප්රතික්රියාව පිළිබඳ ක්රියාවෙන් එය නම් කර ඇත: "ප්රතිවර්තනය". බලන්න මෙම පශ්චාත් සහ මිනිසා අන්තර් mode- කරමින් මාධ්යවේදීහු රැසක්
උදාහරණ:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
(කැපවීම සහ නැවත සකස් කිරීම), නව කැපවීම මට අවශ්ය තැනට ගෙනයන්න, ( ) commit
වෙත වෙනස් කර සුරකින්න. ඔබට ඊට වඩා වේගවත් යමක් අවශ්ය නම්, ඔබට අන්වර්ථයක් විය හැකිය f
fixup
git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
මම අන්වර්ථයන් reci
සහ ඒ recm
සඳහා එකතු කර ඇත්තෙමි recommit (amend)
. දැන් මට එය කළ හැක්කේ git recm
හෝ git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
මම එහි යතුරු ලියනයකින් බැඳීමක් තල්ලු කර ඇති බව මට වැටහුණි. අහෝසි කිරීම සඳහා, මම පහත සඳහන් දේ කළෙමි:
git commit --amend -m "T-1000, advanced prototype"
git push --force
අවවාදයයි: ඔබගේ වෙනස්කම් බලෙන් තල්ලු කිරීම දුරස්ථ ශාඛාව ඔබේ දේශීය එක සමඟ නැවත ලියයි. ඔබට තබා ගැනීමට අවශ්ය කිසිවක් නැවත ලියන්නේ නැති බවට වග බලා ගන්න. වෙනත් අයෙකු ඔබ සමඟ ශාඛාව බෙදා ගන්නේ නම් සංශෝධිත (නැවත ලිවූ) බැඳීමක් බලහත්කාරයෙන් තල්ලු කිරීම ගැනද සැලකිලිමත් වන්න, මන්ද ඔබ නැවත ලියා ඇති බැඳීමේ පැරණි පිටපත ඔවුන් සතුව තිබේ නම් ඔවුන්ගේ ඉතිහාසය නැවත ලිවීමට ඔවුන්ට අවශ්ය වනු ඇත.
මම පහත සඳහන් දෑ භාවිතා කිරීමට කැමතියි:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
ඔබ ඔබේ දුරස්ථ ශාඛාවට ( GitHub / Bitbucket ) කේතය තල්ලු කර නොමැති නම්, පහත දැක්වෙන පරිදි විධාන රේඛාවේ ඇති බැඳීම් පණිවිඩය වෙනස් කළ හැකිය.
git commit --amend -m "Your new message"
ඔබ විශේෂිත ශාඛාවක වැඩ කරන්නේ නම් මෙය කරන්න:
git commit --amend -m "BRANCH-NAME: new message"
ඔබ දැනටමත් වැරදි පණිවිඩය සමඟ කේතය තල්ලු කර ඇත්නම් සහ පණිවිඩය වෙනස් කිරීමේදී ඔබ ප්රවේශම් විය යුතුය. එනම්, ඔබ බැඳීම් පණිවිඩය වෙනස් කර එය නැවත තල්ලු කිරීමට උත්සාහ කිරීමෙන් පසුව, ඔබට ගැටළු ඇති වේ. එය සුමට කිරීමට, මෙම පියවර අනුගමනය කරන්න.
එය කිරීමට පෙර කරුණාකර මගේ සම්පූර්ණ පිළිතුර කියවන්න.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
වැදගත් සටහන: ඔබ බල තල්ලුව කෙලින්ම භාවිතා කරන විට අනෙක් සංවර්ධකයින් එකම ශාඛාවක වැඩ කරන කේත ගැටළු සමඟ ඔබ අවසන් විය හැකිය. එබැවින් එම ගැටුම් වලක්වා ගැනීම සඳහා, බලය තල්ලු කිරීමට පෙර ඔබේ ශාඛාවෙන් කේතය ඇද ගත යුතුය :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
බැඳීම් පණිවිඩය දැනටමත් තල්ලු කර ඇත්නම් එය වෙනස් කිරීමේදී මෙය හොඳම ක්රියාවයි.