පවතින, නොවරදින ලද පණිවිඩ වෙනස් කරන්නේ කෙසේද?


7664

මම වැරදි දෙයක් ලිව්වේ කැපවීමේ පණිවිඩයක.

පණිවිඩය වෙනස් කරන්නේ කෙසේද? බැඳීම තවම තල්ලු කර නැත.


868
තරමක් අලුත් අයට: තවමත් තල්ලු නොකිරීම පිළිබඳ ලෝරීගේ අදහස වැදගත් ය. නැවත ප්‍රතිස්ථාපනය කරනවා සේම මෙයද ඉතිහාසය වෙනස් කරයි. මුල් සහ නැවත ලිවූ ඉතිහාසය අතර යමෙකු ඔබගේ ගබඩාවෙන් ක්ලෝන කර / ඇදගෙන ඇත්නම්, නැවත ලිවීමෙන් පසුව (එම ශාඛාව සඳහා) ඔවුන්ට අදින්නට නොහැකි වනු ඇත.
පැට් නොට්ස්

Answers:


16135

නවතම කැපවීමේ පණිවිඩය සංශෝධනය කිරීම

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 ට ඉඩ දෙන්න.


ප්‍රලේඛනය


257
කෙසේ වෙතත් git commit --amendතරම් බලවත් නොවේ git rebase -i.
ජෙෆ්රි ජෝස්

76
ජෙෆ්ජෝස්, එය අනිවාර්යයෙන්ම විය යුතු නැත. එසේම, git commit --amend(අ?) මාස්ටර් බැඳීම නිවැරදි කළ හැකිය.
ස්ට්‍රේජර්

116
ඔබ දැනටමත් තල්ලු කර ඇත්නම්, නැවත තල්ලු කිරීමට බල කරන්න:git push -f origin branchname
හියුස්

177
git push -fඅනෙක් පුද්ගලයින් එකම ගබඩාවක් භාවිතා කරන්නේ නම් ughughes ටිකක් භයානක නොවේද?
ආමන්ඩ්

91
සම්පූර්ණ කැපවීමේ පණිවිඩය නැවත ලිවීමට ඔබට අවශ්‍ය නැතිනම්, යන්න git commit --amend -c HEAD. මෙය ඔබගේ පැරණි බැඳීම් පණිවිඩය සමඟ පූර්ව ජනගහනය සහිත සංස්කාරකය විවෘත කරනු ඇත, එවිට ඔබට එය වෙනස් කළ හැකිය.
සෑම්

2506
git commit --amend -m "your new message"

7
මම git commit --amend -m "නව පණිවිඩය" කළෙමි, නමුත් ගිතුබ් වෙත තල්ලු කිරීමෙන් "නැවත තල්ලු කිරීමට පෙර දුරස්ථ වෙනස්කම් ඒකාබද්ධ කරන්න" ජනනය විය. අදින්න, කැපවීම --amend කර නැවත තල්ලු කිරීමෙන් පසුව, නව පණිවිඩය නොපෙන්වයි. ඒ වෙනුවට මම "github.com:[myrepo] ක ඒකාබද්ධ ශාඛාව 'ස්වාමියා'" ඇති
ඩේව් එව්රිට්

8
Ave ඩේව් එවරිට් ඔබ එය නිවැරදි කිරීමට උත්සාහ කිරීමට පෙර ඔබේ කැපවීම ඉහළට තල්ලු කළේය.
Thorbj Rrn Ravn Andersen

12
Y කයිරලෙසා සත්‍ය නොවේ. ඔබ අවසන් වන තෙක් උපුටා දැක්වීම වසා නොදැමීමෙන් ඔබට පහසුවෙන්ම බහුකාර්ය බැඳීම් පණිවිඩ රචනා කළ හැකිය (උපුටා දැක්වීම් තුළ එක් එක් පේළියේ අවසානයේ නැවත පැමිණීම).
හොබ්ස්

32
මීට වසර දෙකකට පෙර ලියන ලද පිළිතුරක ප්‍රධාන අදහස හා සමාන පිළිගත් පිළිතුරකට මෙතරම් ඡන්ද ප්‍රමාණයක් ලැබෙන්නේ කෙසේදැයි මට නොතේරේ. අමුතු. (පිළිතුරෙහි කිසිදු වරදක් නැත)
සතුටු කෝඩර්

7
@ අමල්මුරලි, හොඳයි. මගේ අදහස ප්‍රශ්නයේ ජනප්‍රියතාවය ගැනවත්, පිළිතුරේ උපයෝගීතාව ගැනවත් නොවේ. නමුත් මෙම විශේෂිත පිළිතුර පැරණිතම පිළිතුර නොවන අතර පිළිගත් පිළිතුර පිළිබඳ වැඩිදුර අවබෝධයක් ලබා නොදේ. එය පිළිගත් පිළිතුරේ කොටසක පිටපතක් ලෙස පෙනේ. ඒක තමයි මගේ අදහස. චියර්ස්!
සතුටු කේතය

2377

ඔබට නිවැරදි කිරීමට අවශ්‍ය කැපවීම නවතම නොවේ නම්:

  1. git rebase --interactive $parent_of_flawed_commit

    ඔබට දෝෂ සහිත කොමිස් කිහිපයක් නිවැරදි කිරීමට අවශ්‍ය නම්, ඔවුන්ගෙන් පැරණිතම තැනැත්තාගේ මවුපියන් පසුකර යන්න.

  2. ඔබ ලබා දුන් දින සිට කළ යුතු සියලු දේ ලැයිස්තුවක් සමඟ සංස්කාරකයක් පැමිණෙනු ඇත.

    1. (හෝ Git හි පැරණි අනුවාද මත) pickවෙත වෙනස් කරන්නrewordedit ) ඔබ විසින් අදාල කරුණ නිවැරදි කිරීමට අවශ්ය ඕනෑම අනාචාරයේ ඉදිරිපිට උද්ඝෝෂණයක් සංවිධානය කර තිබුණි.
    2. ඔබ සුරකින ලද පසු, Git විසින් ලැයිස්තුගත කර ඇති කොමිස් නැවත ධාවනය කරයි.

  3. ඔබට නැවත කියවීමට අවශ්‍ය සෑම කැපවීමක් සඳහාම , Git ඔබව නැවත ඔබේ සංස්කාරකයට දමනු ඇත. ඔබට සංස්කරණය කිරීමට අවශ්‍ය සෑම කැපවීමක් සඳහාම , Git ඔබව කවචයට දමයි. ඔබ කවචයේ නම්:

    1. ඔබ කැමති ඕනෑම ආකාරයකින් බැඳීම වෙනස් කරන්න.
    2. git commit --amend
    3. git rebase --continue

මෙම අනුක්‍රමය බොහෝමයක් ඔබ යන විට විවිධ විධානයන්හි ප්‍රතිදානය මඟින් ඔබට පැහැදිලි කරනු ඇත. එය ඉතා පහසු ය; ඔබට එය කටපාඩම් කිරීමට අවශ්‍ය නැත - මතක තබා ගන්න, git rebase --interactiveකොපමණ කලකට පෙර වුවද ඒවා නිවැරදි කිරීමට ඔබට ඉඩ සලසයි.


ඔබ දැනටමත් තල්ලු කර ඇති කොමිස් වෙනස් කිරීමට ඔබට අවශ්‍ය නොවන බව සලකන්න. එසේත් නැතිනම් ඔබ එසේ කළ හැකිය, නමුත් එවැනි අවස්ථාවකදී ඔබගේ කැපවීම් ඉවත් කර ඒවාට ඉහළින් වැඩ කළ සියලු දෙනා සමඟ සන්නිවේදනය කිරීමට ඔබට විශාල සැලකිල්ලක් දැක්විය යුතුය. යමෙකු ප්‍රකාශිත ශාඛාවකට නැවත ප්‍රතිස්ථාපනය හෝ යළි පිහිටුවීම තල්ලු කිරීමෙන් පසු මා නැවත අයකර ගන්නේ කෙසේද?


39
පළමු බැඳීමේ පණිවිඩය වෙනස් කිරීමට කෙනෙකුට හැකිද (දෙමව්පියන් නොමැති)
13ren

27
මෙය තවත් එක් පිළිතුරක සඳහන් කර ඇති නමුත් මම ඒ පිළිබඳ සටහනක් මෙහි තබමි. GIT 1.6.6 සිට ඔබට භාවිතා කළ හැකි rewordවෙනුවට pickසංස්කරණය කිරීමට ලඝු-සටහන පණිවිඩයක්.
මිට්මාරෝ

89
අහම්බෙන්, $parent_of_flawed_commitසමාන වේ $flawed_commit^.
පීජා

67
ඔබ දැනටමත් ඉහළට තල්ලු වී ඇත්නම් කිසි විටෙකත් මෙය නොකරන්න (හෝ පොදුවේ ප්‍රතිනිර්මාණය කරන්න)!
ඩැනියෙල් රින්සර්

20
දෝෂ සහිත කැපවීමෙන් පසු ඒකාබද්ධ කිරීමක් සිදුවී ඇත්නම් -p( --preserve-merges) භාවිතා කරන්න .
ahven

778

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

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


18
git rebase -i HEAD~commit_countඔබ තෝරාගත් කොපමණ කොමිට් වල බැඳීම් පණිවිඩ වෙනස් කිරීමට ද ඔබට ඉඩ සලසයි. තෝරාගත් කොමිස් "පික්" වෙනුවට "රිවෝඩ්" ලෙස සලකුණු කරන්න.
ජෝ

2
ඔබට නැවත ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය නැතිනම් කුමක් කළ යුතුද? ඔබට පැරණි පණිවිඩයක් වෙනස් කිරීමට අවශ්‍යද?
SuperUberDuper

3
git reset --hardනොගැලපෙන වෙනස්කම් සමනය කරයි. කරුණාකර ආදේශ --hardකරන්න --soft.
eel ghEEz

1
එකඟ විය, git reset --hardඑය සම්පුර්ණයෙන්ම නීත්‍යානුකූල විධානයකි, නමුත් ප්‍රශ්නය අනුව එය නොමඟ යවන සුළුය. ඔබ භාවිතා --hardකරන්නේ ඔබ විසින් සිදුකරන ලද වෙනස්කම් සිදුකිරීමට අවශ්‍ය නම්, ඔබ කැපවීමේ පණිවිඩයේ යතුරු ලියනය කළේ නම් නොවේ!
සෝරන් ජෝර්න්ස්ටැඩ්

398

දැනටමත් සඳහන් කර ඇති පරිදි, git commit --amendඅවසාන බැඳීම නැවත ලිවීමේ ක්‍රමයයි. එක් සටහනක්: ඔබ ලිපිගොනු නැවත ලිවීමට කැමති නම් , විධානය වනු ඇත

git commit -a --amend -m "My new commit message"

4
ඔබ සියල්ල එකතු කිරීමට අවශ්ය නැති නම්, ඔබ මුලින්ම කළ හැකි git add file.extනම් පමණක්git commit --amend
MalcolmOcean

358

ඔබට ඒ git filter-branchසඳහා භාවිතා කළ හැකිය .

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

එය සුළුපටු දෙයක් තරම් පහසු නැත git commit --amend, නමුත් ඔබේ වැරදිසහගත පණිවිඩයෙන් පසුව ඔබට දැනටමත් යම් යම් ඒකාබද්ධ කිරීම් තිබේ නම් එය විශේෂයෙන් ප්‍රයෝජනවත් වේ.

මෙය අතර ඇති සෑම බැඳීමක්ම HEADසහ අඩුපාඩුකම් නැවත ලිවීමට උත්සාහ කරන බව සලකන්න , එබැවින් ඔබ ඔබේ msg-filterවිධානය ඉතා බුද්ධිමත්ව තෝරා ගත යුතුය ;-)


4
රීජෙක්ස් කිසිවක් සොයා නොගත්තොත් බැඳීම වෙනස් නොවන අනුවාදයක් තිබේද?
sjakubowski

3
AFAIK පෙරහන් ශාඛාව --msg-filter මඟින් ඕනෑම අවස්ථාවක නව කොමිස් ජනනය කරනු ඇත. කෙසේ වෙතත්, ඔබට msg-filter තුළ පරීක්ෂා කළ හැකිය, sed සාර්ථක වී ඇත්දැයි සහ පෙරහන්-ශාඛා මෙහෙයුම අවසන් වූ විට ඔබේ ගස refs / original වෙත නැවත සැකසීමට මෙම තොරතුරු භාවිතා කරන්න.
මාර්ක්

4
Av ඩේවිඩ් හොග් මෙය සත්‍ය වන්නේ පෙරහන් ශාඛා ක්‍රමය භාවිතා කරන විට පමණි. ඔබ අන්තර්ක්‍රියාකාරී ප්‍රතිරෝධය භාවිතා කරන්නේ නම් නවීකරණය කරන ලද බැඳීමක් අනුගමනය කරන බැඳීම් හැඳුනුම්පත් වෙනස් නොවේ.
මාර්ක්

6
Ark මාක් ඔව් ඔවුන් එසේ කරනවා, ඔවුන් අවශ්‍යයි. කොමිස් අයිඩීස් කලින් කළ කොමිස් මත රඳා පවතී. ඒවා වෙනස් නොකළේ නම්, git නිෂ් .ල වනු ඇත.
සැතපුම් මාවත

2
ඔබට අවශ්‍යයි $flawed_commit^..HEAD, නැත $flawed_commit..HEAD. man පිටුවෙහි සඳහන් පරිදි: command විධානය මඟින් විධාන රේඛාවේ සඳහන් ධනාත්මක යොමු කිරීම් පමණක් නැවත ලියනු ඇත (උදා: ඔබ a..b සමත් වුවහොත් b පමණක් නැවත ලියනු ලැබේ). »
ඇන්ජල්

319

මම මේ ආකාරයට කැමතියි:

git commit --amend -c <commit ID>

එසේ නොමැති නම්, නව බැඳීම් හැඳුනුම්පතක් සමඟ නව බැඳීමක් ඇත.


7
මට නම්, ඉහත ඔබේ විධානය භාවිතා කිරීමෙන් ඇත්ත වශයෙන්ම නව බැඳීම් හැඳුනුම්පතක් සමඟ නව බැඳීමක් ඇති වන අතර පෙරනිමි බැඳීම් පණිවිඩයක් ලෙස “ශාඛාව ඒකාබද්ධ කරන්න” යනුවෙන් අමතර බැඳීමක් ඇති කරයි.
ජනවාරි

46
සංශෝධනය කිරීම සැමවිටම නව බැඳීම් හැඳුනුම්පතක් සමඟ නව බැඳීමක් ඇති කරයි. බැඳීම් හැඳුනුම්පත යනු බැඳීම් පණිවිඩය සහ කතෘ / කැපවූ කාලරාමු ඇතුළුව බැඳීම්වල අන්තර්ගතයේ SHA හැෂ් ය. මෙය Git හි ලක්ෂණයකි, හැෂ් isions ට්ටන හැර, එකම හැඳුනුම්පතක් සහිත කොමිස් දෙකක් හරියටම එකම බැඳීමක් බව සහතික කරයි, හරියටම එකම අන්තර්ගතය, ඉතිහාසය සහ යනාදිය.
එමිල් ලුන්ඩ්බර්ග්

7
එමිල් සමඟ එකඟ වන්න. ඊට අමතරව, ලියකියවිලි කියවීම - ඔබගේ "-c" සියල්ලම ඔබගේ නව කැපවීම සඳහා පෙරනිමි / අච්චුව ලෙස භාවිතා කළ යුතු පණිවිඩය ගිටියට පවසන බව පෙනේ .. ඇත්තෙන්ම එය දැනටමත් "-c <commit ID>" පෙරනිමියෙන් කිරීමට යයි , එබැවින් එය සඳහන් කිරීමට අවශ්‍ය නැත.
ගල්

2
මෙම -cකාරණා කිහිපයක් කරනවා. එය පෙරනිමියෙන් පැරණි පණිවිඩය භාවිතා කරයි, නමුත් එය කර්තෘ තොරතුරු (පුද්ගලයා සහ වේලාව) පිටපත් කරයි. -Cපණිවිඩය සංස්කරණය කිරීමට එය ඔබෙන් ඉල්ලා නොසිටීම හැර එකම දේ කරයි.
ජෝශප් කේ. ස්ට්‍රෝස්

1
Ant සන්තනුඩි මෙන්, එය මට වැඩ කළේ නැත. මට ලැබුණාfatal: Option -m cannot be combined with -c/-C/-F/--fixup.
ග්‍රිම්

312

ඔබ Git GUI මෙවලම භාවිතා කරන්නේ නම්, Amend last commit නම් බොත්තමක් තිබේ. එම බොත්තම මත ක්ලික් කරන්න, එවිට එය ඔබගේ අවසන් බැඳීම් ලිපිගොනු සහ පණිවිඩය පෙන්වනු ඇත. එම පණිවිඩය සංස්කරණය කරන්න, එවිට ඔබට නව කැපවීමේ පණිවිඩයක් සමඟ එය කළ හැකිය.

නැතහොත් මෙම විධානය කොන්සෝලයකින් / පර්යන්තයකින් භාවිතා කරන්න:

git commit -a --amend -m "My new commit message"

4
මෙම පිළිතුර වචනාර්ථයෙන් මෙම පැරණි පිළිතුරට සමාන වේ . වෙනත් එකක් සැපයීමට පෙර ඔබ පවතින පිළිතුරු පරීක්ෂා කර තිබේද?
ඩෑන් ඩස්කල්ස්කු

284

ඔබට Git rebasing භාවිතා කළ හැකිය . උදාහරණයක් ලෙස, bbc643cd කිරීමට නැවත වෙනස් කිරීමට ඔබට අවශ්‍ය නම්, ධාවනය කරන්න

$ git rebase bbc643cd^ --interactive

පෙරනිමි සංස්කාරකයේ, ඔබට වෙනස් කිරීමට අවශ්‍ය වන පේළියේ 'සංස්කරණය' කිරීමට 'තේරීම' වෙනස් කරන්න. ඔබගේ වෙනස්කම් සිදු කර ඒවා සමඟ වේදිකා ගත කරන්න

$ git add <filepattern>

දැන් ඔබට භාවිතා කළ හැකිය

$ git commit --amend

බැඳීම වෙනස් කිරීමට සහ ඉන් පසුව

$ git rebase --continue

පෙර හිස වෙත ආපසු යාමට.


1
ඔබගේ වෙනස්වීම git commit --amendබලපාන බවට වග බලා ගැනීමට ඔබට අවශ්‍ය නම් ඔබට භාවිතා කළ හැකි git showඅතර එය නව පණිවිඩය පෙන්වනු ඇත.
ස්ටීව් ටෝබර්

279
  1. ඔබට අවශ්‍ය වන්නේ ඔබගේ අවසාන කැපවීමේ පණිවිඩය වෙනස් කිරීමට නම්, එසේ කරන්න:

    git commit --amend
    

එමඟින් ඔබව ඔබේ පෙළ සංස්කාරකයට ඇද දමනු ඇති අතර අවසාන කැපවීමේ පණිවිඩය වෙනස් කිරීමට ඔබට ඉඩ සලසයි.

  1. ඔබ පසුගිය තුන් පණිවුඩ, හෝ එම ලක්ෂ්යය වෙත පණිවිඩ දක්වා සිදු ඕනෑම, සැපයුම් සිදු වෙනස් කිරීමට අවශ්ය නම් HEAD~3කිරීමට git rebase -i: විධානය

    git rebase -i HEAD~3
    

6
මෙම පෙර පිළිතුර දැනටමත් ඔබට භාවිතා කළ හැකි බව පවසන අතර, ඔබට භාවිතා කළ හැකි git commit --amendබව ද කියනු ලැබේ, ඔබ කළ git rebase -i HEAD~commit_countසියල්ලම ප්ලග් ඉන් කර 3ඇත commit_count.

පහත් කොට ඇත. පවතින පිළිතුරු කියවීමට මිනිසුන් කරදර වන්නේ නැත .
ඩෑන් ඩස්කලෙස්කු

261

ඔබට විවිධ ශාඛා හරහා පැරණි බැඳීම් පණිවිඩයක් වෙනස් කිරීමට සිදුවුවහොත් (එනම්, වැරදි පණිවිඩය සමඟ ඇති බැඳීම බහු ශාඛා වල පවතී) ඔබට භාවිතා කිරීමට අවශ්‍ය විය හැකිය:

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

3
මෙම පිළිතුර OP හි ප්‍රශ්නයට ආමන්ත්‍රණය නොකරයි, මන්ද ඔවුන් හුදෙක්ම කර ඇති කැපවීමක් නිවැරදි කිරීමට උනන්දු වන බැවිනි. මම නිතරම භාවිතා git commit --amendඅදහස් එළියෙ හෝ මම අමතක ගොනු එකතු කිරීමට git addපමණක් නොව, මෙතෙක් මම එක හොදයි පෙර git pushසංස්. git filter-branchඅනුවාද ඉතිහාසය මුළුමනින්ම අවුල් කිරීමට අවශ්‍ය විට මම ද භාවිතා කරමි, නමුත් OP ට මෙය අවශ්‍ය නැත, එබැවින් මෙම පිළිතුරට විශාල සෞඛ්‍ය අනතුරු ඇඟවීමක් අවශ්‍ය වේ - මෙය නිවසේදී උත්සාහ නොකරන්න, එබී බලන්න !!
kbro

226

භාවිත

git commit --amend

එය විස්තරාත්මකව වටහා ගැනීම සඳහා විශිෂ්ට තනතුරක් 4. Git ඉතිහාසය නැවත ලිවීම . එය භාවිතා නොකළ යුතු අවස්ථා ගැන ද කතා කරයිgit commit --amend .


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

2
වචනයෙන් කියනවා නම්, නොප්! ඔබ තල්ලු කළ දෙයක් ආපසු ගැනීමට හොඳ ක්‍රමයක් නොමැත. සියලුම පසුබැසීම් BAD වැඩි හෝ අඩු මට්ටමකට. ඔබේ පෞද්ගලික ගබඩාවේ ශාඛාවක වැඩ කිරීමේ විනය ඔබ විසින් අනුගමනය කළ යුතුය, ඔබ ටිකක් එකතු කරන විට, ටිකක් පරික්ෂා කර බැලීමේදී, ටිකක් වෙනස් කරන්න. ඉන්පසු ඔබේ මුළු ශාඛාවම එක කැපවීමකට ඒකාබද්ධ කරන්න, සමස්ත වෙනස විස්තර කරමින් නව බැඳීම් පණිවිඩයක් ලියන්න, එය සනාථ කරන්න, තල්ලු කරන්න.
kbro

1
විශේෂාංග ශාඛාවකින් ආපසු යන විට තනි කැපවීමක් කළ යුතු නැති බව පැහැදිලිව පෙන්වා දීමට. බොහෝ අය කරන්නේ ඉලක්කගත ශාඛාව නැවත ප්‍රතිස්ථාපනය කිරීමයි (දේවල් පිරිසිදුව පෙනෙන්නට) ඉන්පසු වේගයෙන් ඉදිරියට යාම මැඩපැවැත්වීමේ විකල්පය සමඟ ඒකාබද්ධ කරන්න. ඔබ ඉහළට යාමට පෙර ප්‍රවේශම් වීමේ ප්‍රධාන කරුණ සමඟ එකඟ වන්න.
ෂෝන්ෆුමෝ

1
මෙම git commit --amendපිළිතුර මේ වන විටත් (කිහිප වතාවක්) ලබා දී ඇත ඔබ සතු ලියූ පෙර. ඔබ එය නැවත පළ කළේ ඇයි? ඔබට "නැවත ලිවීමේ ඉතිහාසය" වෙත සබැඳියක් එක් කිරීමට අවශ්‍ය නම්, ඔබට දැනට පවතින පිළිතුරු වලින් එකක් සංස්කරණය කිරීමට හෝ අදහස් දැක්වීමට හැකිය.
ඩෑන් ඩස්කල්ස්කු

199

සංශෝධනය කරන්න

ඔබට මෙහි විකල්ප කිහිපයක් තිබේ. ඔබට කළ හැකිය

git commit --amend

එය ඔබගේ අවසාන කැපවීම වන තාක් කල්.

අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරය

එසේ නොමැති නම්, එය ඔබගේ අවසාන කැපවීම නොවේ නම්, ඔබට අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරයක් කළ හැකිය,

git rebase -i [branched_from] [hash before commit]

අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රහාරය ඇතුළත ඔබ එම කැපවීමට සංස්කරණය එක් කරයි. එය පැමිණි විට, ඒ git commit --amendහා බැඳීම් පණිවිඩය වෙනස් කරන්න. එම කැපවීමේ ස්ථානයට පෙර ඔබට පෙරළීමට අවශ්‍ය නම්, ඔබට එම කැපවීම භාවිතා git reflogකර මකා දැමිය හැකිය . එවිට ඔබ git commitනැවත කරන්න.


191

එය ඔබගේ අවසාන කැපවීම නම්, බැඳීම සංශෝධනය කරන්න:

git commit --amend -o -m "New commit message"

( -o( --only) ධජය භාවිතා කරමින් ඔබ කැපවීමේ පණිවිඩය පමණක් වෙනස් කරන බවට වග බලා ගන්න)


එය වළලනු ලැබූ බැඳීමක් නම්, පුදුමාකාර අන්තර්ක්‍රියාකාරී නැවත භාවිතා කිරීම :

git rebase -i @~9   # Show the last 9 commits in a text editor

ඔබට අවශ්‍ය කැපවීම සොයා ගන්න, ( ) pickවෙත වෙනස් කර ගොනුව සුරකින්න සහ වසා දමන්න . කළා!rreword



කුඩා Vim නිබන්ධනය (හෝ, යතුරු එබීම් 8 ක් සමඟ නැවත ප්‍රතිස්ථාපනය කරන්නේ කෙසේද 3jcwrEscZZ):

  • vimtutorඔබට කාලය ඇත්නම් ධාවනය කරන්න
  • hjkl චලන යතුරු වලට අනුරූප වේ
  • සියලුම විධාන "පරාසයක්" සමඟ උපසර්ග කළ හැකිය, උදා: 3jපේළි තුනකින් පහළට ගමන් කරයි
  • i ඇතුළු කිරීමේ මාදිලියට ඇතුළු වීමට - ඔබ ටයිප් කරන පෙළ ගොනුවේ දිස්වනු ඇත
  • Escහෝ Ctrlcඇතුළු කිරීමේ ප්‍රකාරයෙන් ඉවත් වී "සාමාන්‍ය" ප්‍රකාරයට ආපසු යන්න
  • u අහෝසි කිරීමට
  • Ctrlr නැවත කිරීමට
  • dd, dw, dlපිළිවෙලින්, මාර්ගය, වචනයක් හෝ, හෝ ලිපියක් මකා දැමීමට
  • cc, cw, clපිළිවෙලින්, මාර්ගය, වචනයක් හෝ, හෝ ලිපියක් වෙනස් කිරීමට (ලෙස එම ddi)
  • yy, yw,yl පිළිවෙළින්, ( "yank") රේඛාවක්, වචනයක් හෝ, හෝ ලිපියක් පිටපත් කිරීමට
  • pහෝ Pපිළිවෙලින් වත්මන් ස්ථානයට පසුව හෝ පෙර ඇලවීම
  • :wEnter ගොනුවක් සුරැකීමට (ලිවීමට)
  • :q!Enter ඉතිරි නොකර ඉවත්වීමට
  • :wqEnterහෝ 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වුවත් - ඔවුන් දත්ත ඉවතලන්න හැක. * එසේම, ඔබ සහයෝගයෙන් කටයුතු කරන කිසිදු ශාඛාවක ඉතිහාසය නැවත ලියන්න එපා.


3
Vim කොටස මුළුමනින්ම මාතෘකාවෙන් බැහැර වන අතර, චාප සංස්කාරකයක් භාවිතා කිරීමට ඉගෙන ගැනීමට කාලය ගත කිරීමට පරිශීලකයින් දිරිමත් කරනවා වෙනුවට, මාතෘකාව පිළිබඳ තවත් යමක් ඔවුන්ට උගන්වන්නේ නැත්තේ ඇයි? nano? අපි කතා කරන්නේ පෙළ ගොනුවකට කළ යුතු සුළු වෙනස් කිරීම් ගැන මිස දෘ c කේතීකරණයෙන් නොව “හොඳම” පෙළ සංස්කාරකය පිළිබඳ දැවෙන යුද්ධයක් ඇති කරයි.
ඩෑන් ඩස්කල්ස්කු

1
An ඩැන්ඩස්කල්ස්කු: නැනෝ භාවිතයෙන් ප්‍රතිප්‍රහාර කිහිපයක් සිදු කිරීමට වඩා ඉහත උපදෙස් භාවිතා කරමින් විම් ඉගෙනීම ඉක්මන් වන බැවිනි. Git විසින් පෙළ සංස්කාරකයක් විවෘත කරන අතර එය ප්‍රතිනිර්මාණය කිරීම සඳහා තමන්ගේම අතුරු මුහුණතක් නොවේ: එය Vim පවතින නිසාය: එය සැහැල්ලු ය, බොහෝ පද්ධතිවල පෙරනිමියෙන් ස්ථාපනය කර ඇති අතර පහසුවෙන් ප්‍රතිප්‍රහාරයක් සිදු කිරීමට තරම් ඉගෙන ගැනීමට ඉතා පහසු ය: උදා: බැඳීමක් ddjjpZZ2 පහළට ගෙන යයි. මූලික Vim දැනුම පිළිබඳ චමත්කාරජනක කිසිවක් නොමැත; නැනෝවට වඩා Vim සමඟ සැපපහසු වීමට මිනිත්තු 10 ක් ගතවේ.
සාස්

185

ඔබ Git GUI භාවිතා කරන්නේ නම්, තල්ලු නොකළ අවසන් බැඳීම සංශෝධනය කළ හැකිය:

Commit/Amend Last Commit

168

මට හැකි පමණින් මම Git GUI භාවිතා කරමි, එමඟින් අවසාන කැපවීම සංශෝධනය කිරීමට ඔබට අවස්ථාව ලැබේ:

එම කොටුව ටික් කරන්න

එසේම, git rebase -i origin/masterමාස්ටර්ට ඉහළින් ඔබ විසින් සිදු කරන ලද කැපවීම් සෑම විටම ඔබට ඉදිරිපත් කරන ලස්සන මන්ත්‍රයක් වන අතර, සංශෝධනය කිරීම, මකා දැමීම, නැවත සකස් කිරීම හෝ ස්කොෂ් කිරීම සඳහා ඔබට විකල්පයක් ලබා දේ. මුලින්ම එම හැෂ් එක අල්ලා ගැනීමට අවශ්‍ය නැත.


4
ඔබේ උදාහරණයේ ඔබ ප්‍රදර්ශනය කර ඇති තිරයට මා පිවිසෙන්නේ කෙසේද?
මර්වාන් مروان

2
එය වින්ඩෝස් ගිට් ගුයි හි පහළ දකුණු කොටසයි. 'අන්තිම බැඳීම සංශෝධනය කරන්න' ටොගලය තෝරන්න, එය නවතම බැඳීම් තොරතුරු සමඟ ජනගහනය වනු ඇත.
wbdarby

138

ඇවැත්නි, එබැවින් මෙය කිරීමට බොහෝ ක්‍රම තිබේ.

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

git reset --soft HEAD~1
git commit -m 'New and corrected commit message'

ගොනුවක් එක් කිරීමට හෝ වෙනසක් කිරීමට මට අමතක වුවහොත් මම සෑම විටම මෙය කරමි.

--softඒ වෙනුවට සඳහන් කිරීමට මතක තබා ගන්න--hard , එසේ නොමැතිනම් ඔබට එම බැඳීම මුළුමනින්ම අහිමි වේ.


5
මෙය git commit --amendපියවර 2 ක ක්‍රියාවලියක් හැරෙන්නට හරියටම එකම දේ කරයි .
ජෝශප් කේ. ස්ට්‍රෝස්

3
@ ජෝසප් කේ. ස්ට්‍රෝස්, කැපවීම සංශෝධනය කිරීම මගින් මුල් බැඳීම් කතුවරයා සහ දිනය පිළිබඳ තොරතුරු, නව බැඳීම් සහ දින තොරතුරු වෙන වෙනම තබා ගනී. මට විශ්වාස නෑ මේ ප්‍රවේශය එහෙම කරයි කියලා.
එවර්ටන්

4
Ver එවර්ටන් ඇග්නර් ඔබ නිවැරදිය. --amendකතෘගේ තොරතුරු තබාගනු ඇත, නමුත් ප්‍රශ්නය අසන්නේ පණිවිඩය වෙනස් කිරීමට පමණි.
ජෝශප් කේ. ස්ට්‍රෝස්

131

පැරණි පණිවිඩ සංස්කරණය කිරීමට (එනම් නවතම පණිවිඩය පමණක් නොවේ) වින්ඩෝස් / මැක් GUI සොයන ඕනෑම කෙනෙකුට, මම නිර්දේශ කරන්නේ Sourcetree . අනුගමනය කළ යුතු පියවර පහතින්.

Sourcetree අන්තර්ක්‍රියාකාරී ප්‍රතිරෝධය

දුරස්ථයකට තල්ලු කර නොමැති කොමිස් සඳහා:

  1. ඔබ දැනට සිදු කර ඇති සියලුම වෙනස්කම් සිදු කර ඇති බවට හෝ ගබඩා කර ඇති බවට වග බලා ගන්න (එනම්, "ගොනු තත්වය" පටිත්තෙහි ගොනු කිසිවක් ලැයිස්තුගත කර නොමැත) - එය වෙනත් ආකාරයකින් ක්‍රියා නොකරනු ඇත.
  2. "ලොග් / ඉතිහාසය" ටැබය තුළ, ඔබ සංස්කරණය කිරීමට බලාපොරොත්තු වන බැඳීම් (ය) ට පහළින් ඇති ප්‍රස්ථාරයේ යාබද රේඛාවක් සහිත පිවිසුම මත දකුණු ක්ලික් කර " <commit ref> හි ළමයින් නැවත ප්‍රතිස්ථාපනය කරන්න" තෝරන්න. අන්තර්ක්‍රියාකාරීව ..."
  3. ඔබ වෙනස් කිරීමට කැමති කැපවීමේ පණිවිඩයක් සඳහා සම්පූර්ණ පේළිය තෝරන්න ("පණිවිඩය" තීරුව මත ක්ලික් කරන්න) .
  4. "පණිවිඩය සංස්කරණය කරන්න" බොත්තම ක්ලික් කරන්න.
  5. එන සංවාදයේ අවශ්‍ය පරිදි පණිවිඩය සංස්කරණය කර ක්ලික් කරන්න OK.
  6. වෙනස් කිරීමට වෙනත් කැපවීමේ පණිවිඩ තිබේ නම් පියවර 3-4 නැවත කරන්න.
  7. ක්ලික් කරන්න OK: නැවත ප්‍රතිස්ථාපනය කිරීම ආරම්භ වේ. සියල්ල හොඳින් නම්, ප්‍රතිදානය "සාර්ථකව සම්පුර්ණ කරන ලදි". සටහන: එකවර බහුවිධ පණිවිඩ වෙනස් කිරීමට උත්සාහ කිරීමේදී මෙය අසාර්ථක වන බව මම සමහර විට දැක ඇත්තෙමි Unable to create 'project_path/.git/index.lock': File exists.. ගැටලුව කුමක්දැයි නිශ්චිතවම විශ්වාස නැත, නැතහොත් එය සෝර්සෙට්‍රි හි අනාගත අනුවාදයකින් විසඳනු ඇත්ද, නමුත් මෙය සිදුවුවහොත් ඒවා එකවර නැවත ප්‍රතිස්ථාපනය කිරීම නිර්දේශ කරනු ඇත (මන්දගාමී නමුත් වඩා විශ්වාසදායක බව පෙනේ).

... හෝ ... දැනටමත් තල්ලු කර ඇති කොමිස් සඳහා:

ඉහත පිළිතුරට සමාන මෙම පිළිතුරේ පියවර අනුගමනය කරන්න , නමුත් git push origin <branch> -fශාඛාව බලෙන් තල්ලු කිරීම සඳහා විධාන රේඛාවෙන් ( ) තවත් විධානයක් ක්‍රියාත්මක කිරීම අවශ්‍ය වේ . ඒ සියල්ල කියවා අවශ්‍ය පරෙස්සම් වන්නැයි මම නිර්දේශ කරමි!


සියලු පිළිතුරු පිටතට - මේ සියල්ල GIT අවස්තා වලදි ^^^ (නොමිලේ ලබාදෙන වැඩසටහනක් SourceTree භාවිතා ඔබ සංස්කරණය කිරීමට අවශ්ය එක් පෙර සිදු මත "ක Rebase දරුවන්" අදාළ) සඳහා වඩාත්ම සුදුසු
revelt

127

ඔබට නවතම කැපවීම සංස්කරණය කිරීමට අවශ්‍ය නම්, භාවිතා කරන්න:

git commit --amend

හෝ

git commit --amend -m 'one line message'

ඔබට වර්‍ග කිහිපයක් කොමිස් සංස්කරණය කිරීමට අවශ්‍ය නම්, ඒ වෙනුවට ඔබ නැවත භාවිතා කිරීම භාවිතා කළ යුතුය:

git rebase -i <hash of one commit before the wrong commit>

Git rebase සංස්කරණය

ගොනුවක, ඉහත සඳහන් පරිදි, ලිවීම edit/eහෝ වෙනත් විකල්පයක් වැනි, සුරකින්න සහ පිටවීම ඔබන්න.

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

git commit --amend

එය සුරකින්න සහ පිටවී ටයිප් කරන්න

git rebase --continue

ඔබගේ සියලු තේරීම් අවසන් වන තුරු ඊළඟ තේරීම වෙත යාමට.

මෙම විශේෂිත කැපවීමෙන් පසුව ඔබගේ SHA හැෂ් සියල්ල වෙනස් කරන බව සලකන්න.


2
git rebase -i <වැරදි කිරීමට පෙර එක් කැපවීමක හැෂ්> මා වෙනුවෙන් වැඩ කරයි. ස්තූතියි.
විරාත්

127

ඔබ පමණක් ඔබේ අවසන් පණිවිඩය වෙනස් කිරීමට අවශ්ය නම් ඔබ විසින් භාවිතා කළ යුතු --onlyධජය හෝ එහි කෙටි මාර්ග -oසමග commit --amend:

git commit --amend -o -m "New commit message"

වේදිකාගත කරන ලද දේවල් සමඟ ඔබේ බැඳීම අහම්බෙන් වැඩි නොකරන බවට මෙය සහතික කරයි. ඇත්ත වශයෙන්ම නිසි $EDITORවින්‍යාසයක් තිබීම වඩාත් සුදුසුය . එවිට ඔබට -mවිකල්පය අතහැර දැමිය හැකි අතර , Git විසින් පැරණි පණිවිඩය සමඟ බැඳීමේ පණිවිඩය පෙර පුරවනු ඇත. මේ ආකාරයෙන් එය පහසුවෙන් සංස්කරණය කළ හැකිය.


1
"ඉහළ" පිළිතුර ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. එය සාමාන්‍ය හැඳින්වීමක් ලබා දෙයි git commit --amend. ප්‍රශ්නය ඉතා නිශ්චිත විය, එබැවින් දිගු! = වඩා හොඳය. -oධජය පිළිබඳ තීරණාත්මක සඳහන බොහෝ විට ඉතිරි තොරතුරු වල තැන්පත් වනු ඇත. දැනටමත් බොහෝ ඡන්ද ඇති පිළිතුරක් සංස්කරණය කිරීම මට පහසු නැත.
ඩේවිඩ් ඔන්ගාරෝ

2
ඉහළ පිළිතුර සංස්කරණය කිරීමට ඔබට නිදහස ඇති බව පැවසීම, මිනිසුන් එය “නිවැරදි” පිළිතුර ලෙස භාවිතා කිරීමේ සැබෑ අන්තරායක් පවතින හෙයිනි. ඔබගේ කැපවීම වේදිකාගත කළ දේවල් සමඟ සංශෝධනය කිරීම පහසුවෙන් සිදුවිය හැකිය - එය මට සිදු වූ අතර ඔබ එය තල්ලු කරන විට එය ඇත්තෙන්ම කරදරයකි. එහෙත් තවමත්, ප්‍රමාණය නිවැරදි බවට සහතිකයක් නොවේ. පිළිතුරු ගණනකින් හෝ ඡන්ද සංඛ්‍යාවෙන් හෝ නොවේ.
ඩේවිඩ් ඔන්ගාරෝ

1
ඉහළම පිළිතුර "වැරදියි" සහ එය "ප්‍රශ්නයට පිළිතුරු නොදෙයි" යැයි කීමට මම එතරම් දුර නොයමි. එය නියත වශයෙන්ම ක්‍රියාත්මක වන අතර ප්‍රශ්නයට පිළිතුරු සපයයි, ඔබ සංශෝධනය කිරීමට උත්සාහ කරන විට ඔබ වේදිකාගත කර නොමැති වෙනස්කම් ඇති බවට වග බලා ගත යුතුය. නමුත් ඒ ගැන මිනිසුන්ට අනතුරු ඇඟවීම ගැන ඔබේ අදහස මම දකිමි. මට කාලය ඇත්නම් එය පසුව සංස්කරණය කරමි.

1
සාධාරණ ලෙස කිවහොත්: 1.3.0 සිට git 1.3.0 දක්වා ඇති --onlyවිකල්පය ඇතත් --amendඑය 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ) හි සවි කරන තෙක් එය නිවැරදිව ක්‍රියාත්මක නොවීය . එබැවින් 2008 දී නිවැරදි පිළිතුර බොහෝ විට මෙසේ විය හැකිය : git stash; git commit --amend; git stash pop.
ඩේවිඩ් ඔන්ගාරෝ

103

ඔබගේ අවසන් වැරදි පණිවිඩය නව බැඳීම් පණිවිඩය සමඟ එක් පේළියකින් යාවත්කාලීන කරන්න:

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"

මෙන්න ඔබ ඔබගේ අවසාන කැපවීම කොමිස් දෙකකට සාර්ථකව බිඳ දමා ඇත.


3
ඔබට කිරීමට අවශ්‍ය වන්නේ ඔබගේ අවසාන කැපවීමේ පණිවිඩය සංස්කරණය කිරීම නම්, ඒ සඳහා මෘදු යළි පිහිටුවීම භාවිතා කිරීම අධික ලෙස මරා දැමීමකි . යන්තම් භාවිතා git commit --amend, හරියටම කියනවා ආකාරය වැනි ඉහළ පිළිතුර ඡන්දය . මීට අමතරව, මෙම පෙර පිළිතුරේgit reset --soft HEAD^ මෘදු යළි පිහිටුවීමට සමාන ලෙස ක්‍රියා කරයි , මන්ද ඔවුන් දෙදෙනාම පළමු දෙමව්පියන්ගේ බැඳීම වෙත නැවත සැකසෙන බැවිනි.

3
එක් කරදර git resetපණිවිඩයක් බහුවිධ බැඳීම් පණිවිඩවලට බෙදීමට අදහසක් ලබා දීම සඳහා විසඳුම එක් කිරීමට මම කරදර වෙමි . මන්ද, මම භාවිතා කිරීමට පටන් ගන්නා විට මම එම ගැටලුවට මුහුණ දී සිටිමි git. සමහර විට, මෙය සැබවින්ම උපකාරී වේ. :)
przbadu

87

මෙම ප්‍රශ්නයට පිළිතුරු විශාල ප්‍රමාණයක් ඇත, නමුත් ඒ කිසිවක් 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 හි එතරම් අත්දැකීම් ඇති අයෙක් නොවේ, එබැවින් සිදුවන්නේ කුමක්ද යන්න පැහැදිලි කිරීම සඳහා මම වැරදි 'ලින්ගෝ' භාවිතා කළේ නම්, මාව නිවැරදි කිරීමට නිදහස් වන්න!)


4
<nitpick>Stack Overflow හි "නූල්" නොමැත, එය සාකච්ඡා සංසදයක් නොවන නිසා, ඇත්තේ "ප්‍රශ්න", "පිළිතුරු" සහ "තනතුරු" පමණි. </nitpick>. එසේම, Vim හි සියලුම අනුවාදයන් එක හා සමාන නොවේ, ඒවා සියල්ලම ඇතුළත් කිරීමේ මාදිලියේ අක්ෂර මකා දැමීමට ඔබට ඉඩ නොදේ (එක්තරා ආකාරයකින් අර්ථවත් කරයි, හරිද?). ඔබට සෑම විටම Vim හි අක්ෂර මකා දැමීමට හැකි නම්, Xඑය xසිදු කරනු ඇත ( xකර්සරය ඉදිරිපිට ඇති අකුරු Xමකා දමන්නේ නම්, පිටුපස මැකෙනු ඇත). ඔබ වැරදි කරන්නේ නම්, uඅහෝසි කිරීමට ඔබට නැවත නැවත භාවිතා කළ හැකිය . අවසාන වශයෙන්, rසඳහා වන සරල යෙදුමකි rewordවන අන්තර් rebase කර්තෘ දී.

1
Vim හි වචනයක් වෙනස් කිරීම cwඑහි ආරම්භයේදීම ටයිප් කර ඇත (ප්‍රශ්නය vim ගැන නොවුවද, මම එකඟ වෙමි).
යාරොස්ලාව් නිකිටෙන්කෝ

ඔබට එම පිළිකුල භාවිතා කිරීමට අවශ්‍ය නැත . ඔබට ඔබේ git සංස්කාරකයnano මිඩ්නයිට් කමාන්ඩර්ගේ mcedit වැනි බුද්ධිමත් හා පරිශීලක-හිතකාමී දෙයකට සැකසිය හැකිය.
ඩෑන් ඩස්කලෙස්කු

79

ඔබට git-rebase-reword භාවිතා කළ හැකිය

එය සැලසුම් කර ඇත්තේ ඕනෑම කැපවීමක් (අන්තිම පමණක් නොව) සංස්කරණය කිරීමට ය commit --amend

$ git rebase-reword <commit-or-refname>

බැඳීමක් සංශෝධනය කිරීම සඳහා අන්තර්ක්‍රියාකාරී ප්‍රතිප්‍රතික්‍රියාව පිළිබඳ ක්‍රියාවෙන් එය නම් කර ඇත: "ප්‍රතිවර්තනය". බලන්න මෙම පශ්චාත් සහ මිනිසා අන්තර් mode- කරමින් මාධ්යවේදීහු රැසක්

උදාහරණ:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^

6
මේ සඳහා බාහිර වැඩසටහනක් ස්ථාපනය කිරීම අවශ්‍ය වේ. මගේ මතය අනුව, සාදන ලද මෙවලම් සහ අන්වර්ථ නාමයන් වඩාත් .ලදායී ලෙස භාවිතා කිරීමට ඉගෙන ගැනීම වඩා හොඳය. මම ටයිප් කරන්නෙමි: g c; g rb -i @~9(කැපවීම සහ නැවත සකස් කිරීම), නව කැපවීම මට අවශ්‍ය තැනට ගෙනයන්න, ( ) commitවෙත වෙනස් කර සුරකින්න. ඔබට ඊට වඩා වේගවත් යමක් අවශ්‍ය නම්, ඔබට අන්වර්ථයක් විය හැකිය ffixupgit commit --fixup=<commit>; git rebase -i --autosquash <commit>^
Zaz

79

මම අන්වර්ථයන් reciසහ ඒ recmසඳහා එකතු කර ඇත්තෙමි recommit (amend). දැන් මට එය කළ හැක්කේ git recmහෝ git recm -m:

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......

57

මම එහි යතුරු ලියනයකින් බැඳීමක් තල්ලු කර ඇති බව මට වැටහුණි. අහෝසි කිරීම සඳහා, මම පහත සඳහන් දේ කළෙමි:

git commit --amend -m "T-1000, advanced prototype"
git push --force

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


7
කිසිම දෙයක් කිසි විටෙකත් "නැවත ලියනු" නොලැබේ. මෙම අවස්ථාවෙහිදී, ශාඛා දර්ශකය ඔබගේ නව බැඳීම සඳහා සකසනු ඇති අතර, පැරණි සඳහනක් එහි කිසිදු සඳහනක් ඉතිරි නොවන්නේ නම් එය අක්‍රීය වනු ඇති අතර සති කිහිපයකට පසු එය පිරිසිදු වනු ඇත. (එතෙක් අනෙක් අයට එය සොයා ගැනීමට හා යොමු කිරීමට හැකිය, උදා: පරාවර්තනය දෙස බැලීමෙන්.)
ඩේවිඩ් ඔන්ගාරෝ

51

මම පහත සඳහන් දෑ භාවිතා කිරීමට කැමතියි:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>

46

ඔබ ඔබේ දුරස්ථ ශාඛාවට ( 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

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

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.