Git commit වෙතින් ගොනු ඉවත් කරන්න


1635

මම Git භාවිතා කරන අතර මම ගොනු කිහිපයක් භාවිතා කර ඇත

git commit -a

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

අන්තිම බැඳීමෙන් ගොනුවක් ඉවත් කරන්නේ කෙසේද?


2
මෙම සබැඳිය ඔබගේ ප්‍රශ්නයට පරිපූර්ණයි: stackoverflow.com/questions/307828/…
b3h3m0th

Har චාර්ල්ස් බී: ඔව්, මෙය මගේ අවසාන කැපවීමයි
ලොලි

8
ඔබ සේවාදායකයට ඇති කැපවීම තල්ලු කර තිබේද?
පරිටෝෂ් සිං

4
මම එය භාවිතා කරන්නේ:git reset filepath
felipekm

Answers:


3151

මෙහි ඇති වෙනත් පිළිතුරු වැරදියි කියා මම සිතමි, මන්ද මෙය වැරදියට සිදු කරන ලද ලිපිගොනු කලින් සිදු කළ වෙනස්වීම් අවලංගු නොකර නැවත වේදිකාවට ගෙන යාමේ ප්‍රශ්නයකි. පරිටෝෂ් සිං යෝජනා කළ පරිදි මෙය කළ හැකිය:

git reset --soft HEAD^ 

හෝ

git reset --soft HEAD~1

අනවශ්‍ය ලිපිගොනු කැපවීමෙන් ඉවත් කිරීම සඳහා ඒවා නැවත සකසන්න:

git reset HEAD path/to/unwanted_file

දැන් නැවත කැප වන්න, ඔබට එකම කැපවීමේ පණිවිඩය නැවත භාවිතා කළ හැකිය:

git commit -c ORIG_HEAD  

87
මේ සඳහා ස්තූතියි. ඔබ දැනටමත් ඔබගේ පෙර (වැරදි) කැපවීම තල්ලු කර ඇත්නම් සහ දැන් git pushඔබේ රෙපෝව දක්වා නිවැරදි කිරීමට උත්සාහ කළහොත් එය පැමිණිලි කරනු ඇත Updates were rejected because the tip of your current branch is behind its remote counterpart.. ඔබට ඒවා තල්ලු කිරීමට අවශ්‍ය බව ඔබට විශ්වාස නම් (උදා: එය ඔබේ දෙබලකි) එවිට ඔබට -fතල්ලු කිරීම බල කිරීම සඳහා විකල්පය භාවිතා කළ හැකිය, උදා git push origin master -f. (අනෙක් අය ලබා ගන්නා
උඩුමහලකට මෙය නොකරන්න

60
git reset --soft HEAD^මගේ වඩාත් සුලභ අහෝසි කිරීමේ මෙහෙයුමයි
funroll

2
Ab පැබ්ලෝ ෆර්නැන්ඩස්, පළමුවෙන්ම, පිළිගත් පිළිතුර OP සොයන දේ විය හැකිය (එසේම, එය මාස ගණනකට පෙර පළ කරන ලදි). දෙවනුව, ඉහළ ඡන්ද ගණන නොතකා පිළිගත් පිළිතුරු සෑම විටම ඉහළින්ම පවතී.
MITjanitor

4
සියලුම පිළිතුරු වලට ඉහළින් ඇති පැබ්ලෝ ෆර්නැන්ඩස් ටැබ් තුනක් වන අතර ඒවා පිළිතුරු අනුපිළිවෙල පාලනය කිරීමට ඉඩ දෙයි: ක්‍රියාකාරී , පැරණිතම සහ ඡන්ද . මගේ අනුමානය ඔබේ පැරණිම දේට සකසා ඇත . පිළිගත් පිළිතුර තවමත් ඉහළින්ම පැවතියද එය ඡන්දයට මාරු කරන්න , මෙම පිළිතුර දෙවන වනු ඇත.
ahsteele

16
මම මේ ගැන බොහෝ දේ දැන git resetසිටියද, දැනට පවතින “නිසි තැනට” බලපාන මාර්ගයක් අවශ්‍ය විය. මම දැන් ඉගෙන ගත්තා git commit -C. ඉතින් මට නම්, මට අවශ්‍ය වන්නේ තවත් එක් පියවරක් සමඟ ඔබේ නිශ්චිත වට්ටෝරුවයි, “නැවත නව කැපවීම” ලෙස අක්ෂර වින්‍යාසය git commit -C [hash of original HEAD commit from first step].
metamatt

324

අවධානය ! ඔබට අවශ්‍ය වන්නේ ඔබගේ පෙර කැපවීමෙන් ගොනුවක් ඉවත් කර එය තැටියේ තබා ගැනීමට නම් , ජස්ලින්ගේ පිළිතුර ඉහත කියවන්න.

මෙය ඔබගේ අවසාන කැපවීම වන අතර ඔබේ දේශීය සහ දුරස්ථ ගබඩාවෙන් ගොනුව සම්පූර්ණයෙන්ම මකා දැමීමට ඔබට අවශ්‍ය නම් , ඔබට:

  1. ගොනුව ඉවත් කරන්න git rm <file>
  2. සංශෝධිත ධජය සමඟ බැඳී සිටින්න: git commit --amend

සංශෝධන ධජය නැවත වරක් කැපවීමට git ට කියයි, නමුත් "ඒකාබද්ධ කිරීම" (ශාඛා දෙකක් ඒකාබද්ධ කිරීමේ අර්ථයෙන් නොවේ) මෙය අවසාන කැපවීම සමඟ සිදු කරයි.

අදහස් දැක්වීමේදී, git rmමෙහි භාවිතා කිරීම rmවිධානය භාවිතා කිරීම හා සමානයි !


122
git rm --cachedලිපිගොනු තැටියේ තබා ගැනීමටද ඔබට භාවිතා කළ හැකිය
අර්කාඩි කුකාර්කින්

15
මෙම පිළිතුර පිරික්සන අයට අවවාදයයි: ඔබට ගොනුව මකා දැමීමට අවශ්‍ය බවට වග බලා ගන්න (නැතිවී ගොස් ඇති ආකාරයටම!), එය බැඳීම් ලැයිස්තුවෙන් ඉවත් නොකරන්න.
ස්කොට් බිග්ස්

8
අන් අය කියන දේ එකතු කිරීමට (සහ එය පහසු ඔබට ඇත්තටම කිරීමට අවශ්ය නම් එය කළ නොහැකිය මතක තබා ගැනීමට කිරීමට): මෙම rmතුළ gitවිධාන ඇත කරන්නේ කුමක් rmම කරන්නේ!
යෝ '

Har චාර්ල්ස් බී ඔබේ පිළිතුරට වැඩි දෘශ්‍යතාවයක් ලබා දීම සඳහා කරුණාකර ආකාඩි කුකාර්කින්ගේ අදහස් දැක්වීමේ සටහන එකතු කළ හැකිද?
mopo922

2
ලිපිගොනු තවමත් ප්‍රතිෂ් ored ාපනය කළ හැකි බව සලකන්න, ඔබ ඔබේ අදහස වෙනස් කළහොත්, පෙර කළ කැපවීම git commit --amendතවමත් පවතින අතර උදාහරණයක් ලෙස සොයාගත හැකිය git reflog. එබැවින් අනෙක් අදහස් දැක්වීම් තරම් එය නරක නැත.
ස්ටීහාන්

168

පවත්නා පිළිතුරු සියල්ලම අන්තිම බැඳීමෙන් අනවශ්‍ය ලිපිගොනු ඉවත් කිරීම ගැන කතා කරයි .

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

1.

ගොනුව අනුකූල වීමට අවශ්‍ය කැපවීම සොයා ගන්න.

git checkout <commit_id> <path_to_file>

ඔබට බොහෝ ගොනු ඉවත් කිරීමට අවශ්‍ය නම් ඔබට මෙය කිහිප වතාවක් කළ හැකිය.

2.

git commit -am "remove unwanted files"

3.

වැරදීමකින් ලිපිගොනු එකතු කළ බැඳීමේ commit_id සොයා ගන්න , අපි මෙහි "35c23c2" යැයි කියමු

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

මෙම විධානය ඔබගේ සැකසුම් අනුව සංස්කාරකය විවෘත කරයි. පෙරනිමිය vim වේ.

"අනවශ්‍ය ලිපිගොනු ඉවත් කිරීම" විය යුතු අන්තිම බැඳීම වැරදි බැඳීමේ ඊළඟ පේළියට ගෙනයන්න (අපගේ නඩුවේ "35c23c2"), සහ විධානය පහත පරිදි සකසන්න fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

ගොනුව සුරැකීමෙන් පසු ඔබ හොඳ විය යුතුය.

අවසන් කිරීමට :

git push -f

ඔබ අවාසනාවකට ගැටුම් ඇති වුවහොත්, ඔබ ඒවා අතින් විසඳා ගත යුතුය.


2
නැනෝ සමඟ මෙය කිරීම විශිෂ්ටයි! Ctrl + K, Ctrl + U, 'f' ද, Ctrl + X ද, 'y' ද, voila ද දමන්න!
sequielo

6
ඔබට පෙර ලිපිගොනු හුදෙක් පෙර අනුවාදයකට හරවා යැවීමට වඩා රෙපෝ වෙතින් (ගොනු පද්ධතියෙන් නොවේ) ඉවත් කිරීමට අවශ්‍ය නම්, පළමු පියවර වෙනුවට කරන්න git rm --cached <file(s)>.
waldyrious

2
ඔබට අභිමතය පරිදි අන්තර්ක්‍රියාකාරී-නැවත පිරවීමේ ගොනුව වටා කොමිස් ගෙන යා හැකිදැයි බලා සිටින්න?
ඩෑන් රොසෙන්ස්ටාර්ක්

2
ඔබට මුළුමනින්ම හැකිය, නමුත් ඔබට ගැටුම් ඇති විය හැකිය (නැතහොත්).
බ්‍රයන්

8
මෙම ක්රියාවලිය එක් කිරීමෙන් ටිකක් පහසු කර ගත හැකි --fixup=35c23c2වෙත git commitවිධාන. අවශ්‍ය බැඳීම නිවැරදි කිරීමක් ලෙස මෙය ස්වයංක්‍රීයව බැඳීම සකසනු ඇති අතර එමඟින් ඔබට එය නැවත සඳහන් කිරීමේදී අවශ්‍ය නොවේ. මීට අමතරව, ඔබ එකතු නම් --autosquashකිරීමට git rebase(ඔබ පවා අවශ්ය නැත, ඉන් අදහස් වන්නේ හුදෙක් ප්රතිඵලයක් ඉතිරි - විධානය, GIT ස්වයංක්රීයව නිවැරදි ස්ථානය වෙත ඔබේ සිදු, ඔබ අන්තර් rebase දී ඕනෑම දෙයක් කිරීමට අවශ්ය නැහැ ඒ නිසා ගමන් කරනු ඇත -iධජය, මම බලාපොරොත්තු වන පරිදි සෑම දෙයක්ම පෙනෙන බව සහතික කර ගැනීමට කෙසේ හෝ එය භාවිතා කිරීමට මම කැමතියි).
Guss

151

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

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

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

මෙය අත්‍යවශ්‍යයෙන්ම පෙර කැපවීමේදී තිබූ ගොනුවේ අනුවාදය ගෙන එය වර්තමාන බැඳීමට එකතු කරයි. මෙහි ප්‍රති net ලය වන්නේ ශුද්ධ වෙනසක් සිදු නොවන අතර එමඟින් ගොනුව කැපවීමෙන් effectively ලදායී ලෙස ඉවත් කිරීමයි.


5
සමස්ත කැපවීමම ඉවත් නොකර තනි ගොනුවක් ඉවත් කිරීම සඳහා මෙය වඩා හොඳ පිළිතුරකි.
නිමිෂ්

මෙය හරියටම මෙම පිළිතුරට සමාන ය: D stackoverflow.com/a/27340569/1623984
ThatsAMorais

HatThatsAMorais ඇත්ත වශයෙන්ම :-). මම කල්පනා කරන්නේ මෙම ප්‍රශ්නය තවත් එකක් සමඟ ඒකාබද්ධ වී ඇත්ද යන්නයි. නැත්නම් සමහර විට මම අන්ධයි. කෙසේ වෙතත්, මම සිතන්නේ එය වඩාත් ජනප්‍රිය යැයි පෙනෙන ඡන්ද මත පදනම්ව මම එය අත්හැරීමට කැමැත්තෙමි (සමහර විට මිනිසුන් කෙටි හා සෘජු පිළිතුරට වැඩි කැමැත්තක් දක්වයි).
පැට්‍රික්

සෑම අතින්ම එය අත්හරින්න! :) අපට පැහැදිලිවම නිවැරදි අදහසක් ඇති අතර, අරමුණ වන්නේ උපකාර කිරීමයි. මම හිතන්නේ ඒකාබද්ධ කිරීම හොඳ න්‍යායක්.
ThatsAMorais

1
හොඳ පිළිතුරක් ඇත, නමුත් ඔබ බලා සිටිය යුතු එක් ගොචා එකක් තිබේ: ඔබ සතුව දැනට එකතු කර ඇති හෝ මකාදැමූ ලිපිගොනු තිබේ නම් ඒවා git commit --amend --no-editවිධානය හරහා බැඳීමට එකතු වේ . මෙය ඇයිදැයි නොදන්නා නමුත් එය මට තිත්ත විය.
krayzk

41

ඔබ සේවාදායකයේ වෙනස්කම් තල්ලු කර නොමැති නම් ඔබට භාවිතා කළ හැකිය

git reset --soft HEAD~1

එය සියලු වෙනස්කම් නැවත සකසනු ඇති අතර නැවත එක් බැඳීමක් වෙත ආපසු යනු ඇත

ඔබ ඔබගේ වෙනස්කම් තල්ලු කර ඇත්නම් har චාර්ලස් බී විසින් පිළිතුරු දුන් පියවර අනුගමනය කරන්න


2
-1 git reset මගින් සිදු වූ වෙනස්කම් ගොනුව වේදිකාගත කරන ස්ථානයෙන් ඉවත් කරයි, මෙහි වෙනස සිදු කර ඇත
චාල්ස් බී

හරි, නමුත් මම OP ට අවශ්‍ය දේ නොවන නිසා මගේ පසුබෑම තබා ගන්නෙමි :) සමාවෙන්න
චාල්ස් බී

හොඳයි, එය මට හොඳයි, නමුත් විරුද්ධවාදියාට මෙය අවශ්‍ය නොවන්නේ ඇයි. ප්රශ්නය කුමක් ද?
පරිටෝෂ් සිං

විශාල ගනුදෙනුවක් නොවේ, නමුත් OP ට අවශ්‍ය වන්නේ අන්තිම බැඳීමෙන් අනවශ්‍ය ලිපිගොනු ඉවත් කිරීමට වන අතර, එය සිදු කිරීමට පෙර එය නැවත ප්‍රාන්තයට යලි සකසනු ඇත. තවමත් ඔබ බැඳීම නැවත කළ යුතුයි.
චාල්ස් බී

3
Ris වෙනස්කම් දැකීමට අරිස් <git diff --cached> භාවිතා කරන්න
පරිටෝෂ් සිං

37

Rm භාවිතා කර ගොනුව ඉවත් කිරීමෙන් එය මැකෙනු ඇත!

ඔබ සැමවිටම ඉවත් කිරීමට වඩා git හි බැඳීමකට එකතු කරයි, එබැවින් මෙම අවස්ථාවෙහිදී ගොනුව පළමු කැපවීමට පෙර තිබූ තත්වයට ආපසු එවන්න (මෙය ගොනුව අළුත් නම් මකාදැමීමේ 'rm' ක්‍රියාවක් විය හැකිය) සහ පසුව නැවත කැපවී ගොනුව ඉදිරියට යනු ඇත.

ගොනුව පෙර පැවති තත්වයට ගෙන ඒමට:

    git checkout <commit_id> <path_to_file>

හෝ දුරස්ථ HEAD හි එය තත්වයට ගෙන ඒමට:

    git checkout origin/master <path_to_file>

ඉන්පසු බැඳීම සංශෝධනය කරන්න, ගොනුව ලැයිස්තුවෙන් අතුරුදහන් වී ඇති බව ඔබ සොයා ගත යුතුය (ඔබේ තැටියෙන් මකා නොදමා!)


36
git checkout HEAD~ path/to/file
git commit --amend

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

මෙයද ගොනුව වෙනස් කළේය. ගොනුවේ දේශීය වෙනස්කම් ආරක්ෂා කරන්නේ කෙසේද?
theonlygusti

29

පහත දැක්වෙන්නේ ඔබ අදහස් කළ ගොනුව පමණක් වේදිකා ගත කරනු ඇති අතර එය OP විසින් ඉල්ලා ඇති දෙයයි.

git reset HEAD^ /path/to/file

පහත දැක්වෙන දේ වැනි දෙයක් ඔබට පෙනෙනු ඇත ...

කළ යුතු වෙනස්කම්: (වේදිකාවට "git reset HEAD ..." භාවිතා කරන්න)

වෙනස් කරන ලදි: / path / to / file

කැපවීම සඳහා වේදිකාගත නොකළ වෙනස්කම්: (කැපවිය යුතු දේ යාවත්කාලීන කිරීමට "git add ..." භාවිතා කරන්න) (වැඩ කරන නාමාවලියෙහි වෙනස්කම් ඉවතලීමට "git checkout - ..." භාවිතා කරන්න)

වෙනස් කරන ලදි: / path / to / file

  • "කැපවිය යුතු වෙනස්කම්" යනු කැපවීමට පෙර ගොනුවේ පෙර අනුවාදයයි. ගොනුව කිසි විටෙකත් නොතිබුනේ නම් මෙය මකාදැමීමක් සේ පෙනේ. ඔබ මෙම වෙනස සිදු කරන්නේ නම්, ඔබේ ශාඛාවේ ඇති ගොනුව වෙත වෙනස නැවත හරවන සංශෝධනයක් ඇත.
  • "කැපවීම සඳහා වේදිකාගත නොවූ වෙනස්කම්" යනු ඔබ සිදු කළ වෙනස සහ ගොනුවේ වත්මන් තත්වයයි

මෙම අවස්ථාවෙහිදී, වෙනත් අනුවාදයකට නැවත සැකසීම වැනි ගොනුවට ඔබ කැමති දෙයක් කළ හැකිය.

ඔබ කැපවීමට සූදානම් වූ විට:

git commit --amend -a

හෝ (ඔබට සිදු කිරීමට අවශ්‍ය නොවන වෙනත් වෙනස්කම් සිදුවී ඇත්නම්)

git commit add /path/to/file
git commit --amend

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

29

මම ඔබට උදාහරණයකින් පැහැදිලි කරන්නම්.
A, B, C අනුප්‍රාප්තික 3 ක් විය යුතුය. කැපවීම B හි අඩංගු නොවිය යුතු ගොනුවක් අඩංගු වේ.

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    

1
විශේෂිත ගොනුව අවසාන හෝ පෙර බැඳීමෙහි නොමැති නම්, මෙය වඩාත් අලංකාර ක්‍රමයයි. මම කියන්නේ එය පොදුවේ වඩාත්ම අලංකාර ක්‍රමය බවයි. මම අන්තර්ක්‍රියාකාරී නැවත ප්‍රතිස්ථාපනය කිරීමට කැමතියි.
bvgheluwe

තනි කැපවීමක් සඳහා, හෝ වෙනස් noopකරන්නedit [A_commit_ID]e [A_commit_ID]
TamusJRoyce

23

ඔබට සරලව උත්සාහ කළ හැකිය.

git reset --soft HEAD~1

නව බැඳීමක් ඇති කරන්න.

කෙසේ වෙතත්, "gitkraken" නම් විශිෂ්ට මෘදුකාංගයක් තිබේ. එමඟින් git සමඟ වැඩ කිරීම පහසු කරයි.


1
සැලකිල්ලට ගත යුතු කරුණකි: මෙයින් පසු, git commit --amendඔබගේ අවසන් කැපවීමේදී ගොනු ඉවත් කිරීම යාවත්කාලීන කිරීමට ඔබ කරනු ඇත; පසුව, එය සැබවින්ම ඉවත් කර ඇති බව ඔබට පරීක්ෂා කළ හැකියgit log -1 --stat
sdbbs

13
git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

ඔබට තවමත් දේශීය ගොනුව ඉතිරි වනු ඇත. ඔබට දේශීයව ගොනුව අවශ්‍ය නොවන්නේ නම්, ඔබට --cached විකල්පය මඟ හැරිය හැක.

සියලු වැඩ ඔබගේ ප්‍රාදේශීය ශාඛාවේ තිබේ නම්, ඔබ ගොනුව පසුකාලීනව තබා ගත යුතු අතර, පිරිසිදු ඉතිහාසයක් ඇතිවාක් මෙන්, මෙය කිරීමට සරල ක්‍රමයක් විය හැකිය:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

එවිට ඔබට වඩාත් සංකීර්ණ විධානයන් මතක තබා නොගෙන පණිවිඩ යැවීම හෝ ටයිප් කිරීමකින් තොරව පහසුවෙන් නැවත ගෙවීම අවසන් කළ හැකිය.


මෙය මට වැඩ කරයි. මම හිතන්නේ ඔබට ගොනු නැවත මිශ්‍රණයට එකතු කිරීමට අවශ්‍ය නම්, git add -A හෝ git add භාවිතා කරන්න. ඔවුන් ආපහු ආවා.
ඇලෙක්සැන්ඩර් මිල්ස්

12

Git GUI භාවිතා කිරීමෙන් පෙර කැපවීමෙන් ගොනුවක් ඉවත් කිරීම සරල කළ හැකිය.

මෙය හවුල් ශාඛාවක් නොවන බවත් , ඉතිහාසය නැවත ලිවීමට ඔබට අවශ්‍ය නැති බවත් උපකල්පනය කර ධාවනය කරන්න:

git gui citool --amend

ඔබට වැරදියට සිදු වූ ගොනුව පරීක්ෂා කර "බැඳීම" ක්ලික් කරන්න.

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

ගොනුව බැඳීමෙන් ඉවත් කරනු ලැබේ, නමුත් තැටියේ තබා ඇත . එබැවින් ඔබ ගොනුව වැරදියට එකතු කිරීමෙන් පසුව එය පරීක්ෂා නොකළේ නම්, එය ඔබගේ සොයා නොගත් ලිපිගොනු ලැයිස්තුවේ පෙන්වනු ඇත (තවද ඔබ ගොනුව වැරදියට වෙනස් කිරීමෙන් පසුව එය පරීක්ෂා නොකළහොත් එය ඔබගේ වෙනස්වීම් වල ලැයිස්තුගත කර නොමැති බව පෙන්වනු ඇත).


2
උබුන්ටු හි, ඔබට git gui සමඟ ස්ථාපනය කළ හැකියsudo apt-get install git-gui
JDiMatteo

ඔබට ස්තුතියි! .Git repo අඩංගු ෆෝල්ඩරයක් එක් කළ ගැටළුවක් (දෝෂ?) සමඟ මම හිර වී සිටිමි. කෙසේ වෙතත් මෙය උපකාරී විය. එය නැවත සිදුකිරීමේ ස්වල්පයක් වන බැවින්, මම මුලින්ම භාවිතා git rebase -i HEAD~4කර සංස්කාරකය විවෘත කිරීම සඳහා ඔබේ විධානය ක්‍රියාත්මක කළෙමි . තවත් සටහනක්: "අස්ථායි කිරීම" "කැපවීම" මෙනුවෙන් සොයාගත හැකිය.
ජොනී ස්කොව්ඩාල්

සියල්ලන්ගේම පහසුම විසඳුම. මතක තබා ගැනීමට සරලම. git reset --soft HEAD^(--Soft arg මතක තබා ගැනීම) භාවිතා කිරීමට වඩා අඩු දෝෂ සහිත , පසුව git commit -c ORIG_HEAD(--amend වෙනුවට, සියල්ල ඉස්කුරුප්පු කරයි).
බ්‍රෙන්ට් ෆවුස්ට්

9

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

git checkout origin/<remote-branch> <filename>
git commit --amend

5

මට අමතර විධානයක් ක්‍රියාත්මක කිරීමට සිදු වූ බැවින් ඉහළ පිළිතුරට අනුපූරක වීමට අවශ්‍ය විය:

git reset --soft HEAD^
git checkout origin/master <filepath>

චියර්ස්!


සාදරයෙන් පිළිගනිමු. විධාන ඇත්ත වශයෙන්ම කරන්නේ කුමක්ද යන්න ඔබ පැහැදිලි කළහොත් මෙම පිළිතුර වඩා හොඳය.
මාර්ක් චෝර්ලි

5

පහත දැක්වෙන විධානයන්හි අනුක්‍රමයක් කරන්න:

//to remove the last commit, but preserve changes  
git reset --soft HEAD~1

//to remove unneded file from the staging area  
git reset HEAD `<your file>` 

//finally make a new commit  
git commit -m 'Your message'

මම මෙම පියවරයන් කිරීමට උත්සාහ කර ඇති අතර, මෙම දෝෂ දෝෂය මම දකිමි: සමහර යොමු කිරීම් 'git ....' වෙත තල්ලු කිරීමට අපොහොසත් විය. ඉතිහාසය නැතිවීම වළක්වා ගැනීම සඳහා, වේගයෙන් ඉදිරියට නොයන යාවත්කාලීන කිරීම් ප්‍රතික්ෂේප කරන ලදි දුරස්ථ වෙනස්කම් ඒකාබද්ධ කරන්න (උදා. 'git pull') නැවත තල්ලු කිරීමට පෙර. වැඩි විස්තර සඳහා 'git push --help' හි 'වේගයෙන් ඉදිරියට යාම පිළිබඳ සටහන' බලන්න. (git pull පසු මට සමාන වෙනස්කම් ඇත)
Dezigo

එයින් අදහස් වන්නේ ඔබ ඔබේ දේශීය රැකියාව කරන අතරතුර ඔබේ දුරස්ථ ගබඩාවේ තත්වය වෙනස් වී ඇති බවයි. 'Git pull' පසු ඔබගේ දේශීය වෙනස්කම් දුරස්ථ ඒවා සමඟ ඒකාබද්ධ කළ යුතුය, එපමණකි. ඇත්ත වශයෙන්ම, ඔබගේ වෙනස්කම් පැවතිය යුතුය.
සර්ජි ඔනිෂ්චෙන්කෝ

වෙනත් වචන වලින් කිවහොත්, ඔබට එම දෝෂය ලැබුනේ නම් - ඩෙසිගෝ, යාවත්කාලීන කිරීමට බල කිරීම සඳහා -f ධජය එක් කරන්න.
jungledev

3

මට වැඩ කළ දෙයක්, නමුත් වඩා හොඳ විසඳුමක් තිබිය යුතු යැයි තවමත් සිතන්න:

$ git revert <commit_id>
$ git reset HEAD~1 --hard

අනෙක් කැපවීම තුළ ඔබට ඉවත දැමීමට අවශ්‍ය වෙනස තබන්න, අනෙක් අය පරීක්ෂා කරන්න

$ git commit --amend // or stash and rebase to <commit_id> to amend changes

3

git reset --soft HEAD^ඔබේ කැපවීම සුළං හමන අතර ඔබ ටයිප් කරන විට කළ යුතු දේ git statusඑය කියයි:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

2

ඇත්ත වශයෙන්ම, මම සිතන්නේ ඉක්මන් හා පහසු ක්‍රමයක් වන්නේ git rebase අන්තර් ක්‍රියාකාරී මාදිලිය භාවිතා කිරීමයි.

git rebase -i head~1  

(හෝ head 4 හිස, ඔබට කොපමණ දුරක් යාමට අවශ්‍යද)

ඉන්පසු, 'තෝරන්න' වෙනුවට, 'සංස්කරණය' භාවිතා කරන්න. 'සංස්කරණය' කෙතරම් බලවත් දැයි මට නොතේරුණි.

https://www.youtube.com/watch?v=2dQosJaLN18

ඔබට එය ප්‍රයෝජනවත් වේ යැයි සිතමි.


වීඩියෝව විනාඩි 10 ක් වන අතර එය එතරම් ප්‍රයෝජනවත් නොවේ
මොල්බර්ග්

2

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

( විශේෂාංගය / target_branch පහත දැක්වෙන්නේ විශේෂිත ගොනුවක් සඳහා අහෝසි කිරීමට මට අවශ්‍ය වූ ඒවා ඇතුළුව මගේ සියලු වෙනස්කම් මා සතුව ඇත)

( සම්භවය / විශේෂාංගය / target_branch යනු මගේ වෙනස්කම් වෙත තල්ලු කිරීමට අවශ්‍ය දුරස්ථ ශාඛාවයි)

( විශේෂාංගය / වේදිකාගත කිරීම මගේ තාවකාලික වේදිකා ශාඛාව වන අතර එම එක් ගොනුවකට වෙනස් කිරීම හැරුණු කොට මට අවශ්‍ය සියලුම වෙනස්කම් වලින් මම තල්ලු වනු ඇත)

  1. මගේ සම්භවය / විශේෂාංගය / ඉලක්ක_ ශාඛාවෙන් දේශීය ශාඛාවක් සාදන්න - එය විශේෂාංගය / වේදිකාගත කිරීම ලෙස හැඳින්වේ

  2. මගේ වැඩ ශාඛා ඒකාබද්ධ ලක්ෂණය / target_branch වෙත ලක්ෂණය / වේදිකාගත ශාඛා

  3. ක් පරීක්ෂා ලක්ෂණය / වේදිකාගත පසුව GIT යළි පිහිටුවීමේ --soft ORIG_HEAD (දැන් එම පහසුකම / වේදිකාගත 'සියලු වෙනස්කම් නිරත නමුත් ෂෙයික් කරනු ඇත.)

  4. අනවශ්‍ය වෙනස්කම් සහිතව මා කලින් පරීක්ෂා කළ ගොනුව අස්ථාපනය කර ඇත

  5. සඳහා උඩුගං ශාඛා වෙනස් ලක්ෂණය / වේදිකාගත කිරීමට සම්භවය / ලක්ෂණය / target_branch

  6. වේදිකාගත කර ඇති ඉතිරි වෙනස්කම් සිදු කර මගේ දුරස්ථ සම්භවය / විශේෂාංගය / ඉලක්ක_ ශාඛාව වෙත ඉහළට තල්ලු කර ඇත


2

පෙර කොමිස් වලින් ගොනු ඉවත් කිරීමට ඔබට අවශ්‍ය නම් පෙරහන් භාවිතා කරන්න

git filter-branch --prune-empty --index-filter 'git rm --ignore-unmatch --cached "file_to_be_removed.dmg"'

ඔබ මෙම දෝෂය දුටුවහොත්:

නව උපස්ථයක් සෑදිය නොහැක. පෙර උපස්ථයක් දැනටමත් refs / original / Force හි -f සමඟ උපස්ථය නැවත ලිවීමෙහි පවතී

ඔබගේ දේශීය ගබඩාවේ ඇති ref උපස්ථ ඉවත් කරන්න

$ rm -rf .git/refs/original/refs

1

ඔබට තවදුරටත් එම ගොනුව අවශ්‍ය නොවන්නේ නම්, ඔබට එය කළ හැකිය

git rm file
git commit --amend
git push origin branch

1

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

  1. නිධිය තෝරන්න -> නවතම කැපවීම අහෝසි කරන්න
  2. ඔබ වැරදියට එකතු කළ ගොනුව තෝරා නොගන්න. ඔබගේ පෙර බැඳීම් පණිවිඩය දැනටමත් සංවාද කොටුවේ ඇත.
  3. බැඳීම් බොත්තම ඔබන්න!

1

ඔබ තවමත් ඔබගේ වෙනස්කම් git වෙත තල්ලු නොකරන්නේ නම්

git reset --soft HEAD~1

එය සියලු වෙනස්කම් නැවත සකසනු ඇති අතර නැවත එක් බැඳීමක් වෙත ආපසු යනු ඇත

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

git rm <file>
 git commit --amend

හෝ ඊටත් වඩා හොඳ:

පළමුව නැවත සකසන්න

git reset --soft HEAD~1

අනවශ්‍ය ගොනුව නැවත සකසන්න

git reset HEAD path/to/unwanted_file

නැවත කැප වන්න

git commit -c ORIG_HEAD  

එය ඉහත ආකාරයටම නමුත් හරස් පරීක්‍ෂා කිරීමට පවා උපකාරී විය
රේෂ්මා

0

මා මුලින් ගොනුව ශාඛාවට තල්ලු කළ බිට් බාල්දි ගබඩාවෙන් ගොනුව ඉවත් කිරීමට මෙය ක්‍රියා කරයි.

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

0

මම වත්මන් ලිපිගොනු වෙනත් ෆෝල්ඩරයක පිටපත් කළෙමි, ඉන්පසු නොකල සියලු වෙනස්කම් ඉවත් කරන්න:

git reset --hard @{u}

ඉන්පසු දේවල් නැවත පිටපත් කරන්න. බැඳෙන්න, තල්ලු කරන්න.


0
Here is the step to remove files from Git Commit.

>git reset --soft HEAD^1(either commitid ) -- now files moved to the staging area.
>git rm --cached filename(it will removed the file from staging area)
>git commit -m 'meaningfull message'(Now commit the required files)

-1

ඔබට මෙම විධානය භාවිතා කළ හැකිය:

git restore --staged <file>

-1

මෙම අවස්ථාවේදී පිළිතුරු කිසිවක් සාධාරණ නොවේ. සැබෑ විසඳුමක් යෝජනා කළ යුතු බවට ප්‍රමාණවත් ඉල්ලුමක් ඇති බව පෙනේ: https://github.com/git/git/blob/master/Documentation/SubmittingPatches

git --uncommit <ගොනුවේ නම>

හොඳයි. ඉතිහාසය වෙනස් කිරීමට අපට අවශ්‍ය නැති බව මට වැටහී ඇත, නමුත් මම දේශීය හා අහම්බෙන් දේශීය "හැක්" ගොනුවක් එකතු කර එය බැඳීමෙන් ඉවත් කිරීමට අවශ්‍ය නම් මෙය ඉතා ප්‍රයෝජනවත් වනු ඇත.

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.