පිළිගත් පිළිතුරට අමතරව, ඔබ වැරදියට එකතු කරන ලද ගොනුව අති විශාල නම්, ඔබ එය දර්ශකයෙන් ' git reset
' සමඟ ඉවත් කිරීමෙන් පසුව පවා , එය තවමත් ඉඩ ප්රමාණය අත්පත් කරගෙන ඇති බව පෙනේ..git
නාමාවලියෙහි .
මෙය කනස්සල්ලට පත්විය යුතු දෙයක් නොවේ; ගොනුව ඇත්ත වශයෙන්ම තවමත් ගබඩාවේ ඇත, නමුත් එය "ලිහිල් වස්තුවක්" ලෙස පමණි. එය වෙනත් ගබඩාවලට පිටපත් නොකරනු ඇත (ක්ලෝන, තල්ලු හරහා), සහ අවකාශය අවසානයේ නැවත ගොඩගනු ඇත - සමහර විට ඉතා ඉක්මනින් නොවේ. ඔබ කනස්සල්ලට පත්ව සිටී නම්, ඔබට ධාවනය කළ හැකිය:
git gc --prune=now
යාවත්කාලීන කිරීම (පහත දැක්වෙන්නේ වඩාත්ම උත්තරීතර පිළිතුරු වලින් ඇතිවිය හැකි ව්යාකූලතා ඉවත් කිරීමට මා දරන උත්සාහයයි):
ඉතින්, සැබෑ අහෝසි කිරීම git add
කුමක්ද?
git reset HEAD <file>
?
හෝ
git rm --cached <file>
?
තදින් කථා කිරීම, සහ මම වරදවා වටහා නොගන්නේ නම්: කිසිවක් නැත .
git add
අහෝසි කළ නොහැක - ආරක්ෂිතව, පොදුවේ.
git add <file>
ඇත්ත වශයෙන්ම කරන්නේ කුමක්දැයි පළමුව සිහිපත් කරමු :
නම් <file>
කරන ලදී මීට පෙර දම්වැල් මත ධාවනය වන නොවේ , git add
හැඹිලි එය එකතු එහි වත්මන් අන්තර්ගතය.
නම් <file>
කරන ලදී දැනටමත් දම්වැල් මත ධාවනය වන , git add
වර්තමාන අන්තර්ගතයට ඉතිරි (සැණරුව, අනුවාදය) පූර්වාපේක්ෂි කිරීමට. Git හි, මෙම ක්රියාව තවමත් එකතු කිරීමක් ලෙස හැඳින්වේ , (එය යාවත්කාලීන කිරීම පමණක් නොවේ), මන්ද ගොනුවක වෙනස් සංස්කරණ දෙකක් (ස්නැප්ෂොට්) වෙනස් අයිතම දෙකක් ලෙස සලකනු ලැබේ: එබැවින්, අපි ඇත්ත වශයෙන්ම හැඹිලියට නව අයිතමයක් එකතු කරන්නෙමු. පසුව කැපවී ඇත.
මේ අනුව, ප්රශ්නය තරමක් අපැහැදිලි ය:
මම වැරදීමකින් විධානය භාවිතා කරමින් ලිපිගොනු එකතු කළෙමි ...
OP හි තත්වය පළමු එක ලෙස (නොකැඩූ ගොනුව) පෙනේ, අපට අවශ්ය වන්නේ "අහෝසි කරන්න" ලුහුබැඳ ඇති අයිතම වලින් ගොනුව (වර්තමාන අන්තර්ගතයන් පමණක් නොවේ) ඉවත් කිරීමයි. මෙය එසේ නම් , ධාවනය කිරීම කමක් නැත git rm --cached <file>
.
අපිටත් දුවන්න පුළුවන් git reset HEAD <file>
. මෙය සාමාන්යයෙන් වඩාත් සුදුසු වන්නේ එය අවස්ථා දෙකෙහිම ක්රියාත්මක වන බැවිනි: අප දැනටමත් ලුහුබැඳ ඇති අයිතමයක අනුවාදයක් වැරදියට එකතු කළ විට එය අහෝසි කරයි.
නමුත් අවවාද දෙකක් තිබේ.
පළමුවැන්න: (පිළිතුරෙහි පෙන්වා ඇති පරිදි) ක්රියාත්මක වන්නේ එක් දර්ශනයක් පමණි git reset HEAD
, නමුත් එය git rm --cached
සිදු කරයි: නව ගබඩාවක් (කොමිස් නැත). එහෙත්, ඇත්ත වශයෙන්ම, මෙය ප්රායෝගිකව අදාළ නොවන නඩුවකි.
දෙවනුව: git reset HEAD
කලින් හැඹිලි ගොනු අන්තර්ගතයන් ඉන්ද්රජාලිකව ලබා ගත නොහැකි බව මතක තබා ගන්න, එය එය හෙඩ් වෙතින් නැවත සමමුහුර්ත කරයි. අපගේ නොමඟ ගිය git add
අය කලින් වේදිකාගත නොකළ අනුවාදයක් ඉක්මවා ගියහොත් අපට එය නැවත ලබා ගත නොහැක. දැඩි ලෙස කිවහොත් අපට අහෝසි කළ නොහැක [*].
උදාහරණයක්:
$ git init
$ echo "version 1" > file.txt
$ git add file.txt # First add of file.txt
$ git commit -m 'first commit'
$ echo "version 2" > file.txt
$ git add file.txt # Stage (don't commit) "version 2" of file.txt
$ git diff --cached file.txt
-version 1
+version 2
$ echo "version 3" > file.txt
$ git diff file.txt
-version 2
+version 3
$ git add file.txt # Oops we didn't mean this
$ git reset HEAD file.txt # Undo?
$ git diff --cached file.txt # No dif, of course. stage == HEAD
$ git diff file.txt # We have irrevocably lost "version 2"
-version 1
+version 3
ඇත්ත වශයෙන්ම, අපි නව ලිපිගොනු (නඩුව 1) එකතු කිරීම සඳහා පමණක් 'git add' කිරීමේ සාමාන්ය කම්මැලි වැඩ ප්රවාහය අනුගමනය කරන්නේ නම් මෙය ඉතා වැදගත් නොවේ, තවද අපි නව අන්තර්ගතයන් commit, git commit -a
command හරහා යාවත්කාලීන කරමු .
* (සංස්කරණය කරන්න: ඉහත සඳහන් දේ ප්රායෝගිකව නිවැරදි ය, නමුත් තවමත් සිදු කර ඇති වෙනස්කම් යථා තත්වයට පත් කිරීම සඳහා තරමක් අශෝභන / කැටි කළ හැකි ක්රම තිබිය හැකි නමුත් කැපවී නොසිට නැවත ලිවීම - ජොහැන්නස් මැටොකික් සහ අයොල්ස්මිත්ගේ අදහස් බලන්න)
HEAD
හෝhead
දැන් භාවිතා කළ හැකිය@
වෙනුවටHEAD
ඒ වෙනුවට. ඔබට එය කළ හැක්කේ මන්දැයි දැන ගැනීමට මෙම පිළිතුර (අවසාන කොටස) බලන්න .