කැපවීමට පෙර 'git add' අහෝසි කරන්නේ කෙසේද?


8968

මම වැරදීමකින් Git වෙත ගොනු එකතු කළේ විධානය භාවිතා කරමිනි:

git add myfile.txt

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


23
Git v1.8.4 සමග ආරම්භ වන අතර, ඒ භාවිතය අඩු සියලු පිළිතුරු HEADහෝ headදැන් භාවිතා කළ හැකිය @වෙනුවට HEADඒ වෙනුවට. ඔබට එය කළ හැක්කේ මන්දැයි දැන ගැනීමට මෙම පිළිතුර (අවසාන කොටස) බලන්න .

3
ගොනුවක් අස්ථාපනය කිරීමට සියලු ක්‍රම පෙන්වන කුඩා සාරාංශයක් මා විසින් සාදන ලදී: stackoverflow.com/questions/6919121/…
ඩැනියෙල් ඇල්ඩර්

5
Git checkout නොකරන්නේ ඇයි?
එරික් රෙපන්

13
Ri එරික්රෙපන් කැපවීමේ දර්ශකයෙන් git checkoutවේදිකාගත කළ වෙනස්කම් ඉවත් නොකරයි. එය අවසන් වරට සිදු කරන ලද සංශෝධනයට නැවත සකස් නොකෙරේ - එය මට අවශ්‍ය දේ නොවේ, මට එම වෙනස්කම් අවශ්‍යය, මට අවශ්‍ය වන්නේ පසුකාලීන කැපවීමකදී ය.
paxos1977

4
ඔබ සූර්යග්‍රහණය භාවිතා කරන්නේ නම්, එය
බැඳීම්

Answers:


10375

git addබැඳීමට පෙර ඔබට අහෝසි කළ හැකිය

git reset <file>

එය වෙනත් කිසිවක් වෙනස් නොකර වත්මන් දර්ශකයෙන් ("කැපවීමට සූදානම්" ලැයිස්තුවෙන්) ඉවත් කරයි.

ඔයාට පාවිච්චි කරන්න පුළුවන්

git reset

නියමිත වෙනස්කම් සියල්ලම අස්ථාපනය කිරීමට කිසිදු ගොනු නාමයක් නොමැතිව. සාධාරණ කාලයක් තුළ එකින් එක ලැයිස්තු ගත කළ නොහැකි තරම් ලිපිගොනු ඇති විට මෙය ප්‍රයෝජනවත් වේ.

Git හි පැරණි අනුවාද වල, ඉහත විධානයන් පිළිවෙලින් සමාන git reset HEAD <file>හා සමාන වන අතර git reset HEAD, HEADඑය නිර්වචනය නොකළහොත් (ඔබ තවමත් ඔබේ ගබඩාවේ කිසිදු කැපවීමක් කර නැති නිසා) හෝ නොපැහැදිලි නම් (ඔබ ශාඛාවක් නිර්මාණය කළ නිසා HEADඑය මෝඩ දෙයකි ඔබ නොකළ යුතු බව). මෙය Git 1.8.2 හි වෙනස් කරන ලදි , එනමුත් Git හි නවීන සංස්කරණ වලදී ඔබේ පළමු කැපවීමට පෙර පවා ඉහත විධානයන් භාවිතා කළ හැකිය:

ඔබේ ඉතිහාසයේ කිසිදු කැපවීමක් නොමැති විට දෝෂ නිරාකරණය කිරීම සඳහා භාවිතා කරන "git reset" (විකල්ප හෝ පරාමිතීන් නොමැතිව), නමුත් දැන් එය ඔබට හිස් දර්ශකයක් ලබා දෙයි (ඔබ නොපවතින බැඳීමට ගැලපෙන පරිදි).


93
ඇත්ත වශයෙන්ම, මෙය සත්‍ය අහෝසි කිරීමක් නොවේ, මන්ද වැරැද්ද git addකලින් වේදිකාගත නොකළ අනුවාදයක් ඉක්මවා ගියහොත් අපට එය නැවත ලබා ගත නොහැක. පහත මගේ පිළිතුරෙන් මම මෙය පැහැදිලි කිරීමට උත්සාහ කළෙමි.
ලියොන්බ්ලෝයි

7
git reset HEAD *.extඑහිදී extඔබ unadd කිරීමට අවශ්ය ලබා දීර්ඝ කිරීමේ ගොනු වේ. මට නම් එය *.bmp&*.zip
boulder_ruby

19
Ony ජොනී, දර්ශකයේ (වේදිකාගත වන ප්‍රදේශය) වෙනස් කළ ගොනු පමණක් නොව සියලුම ලිපිගොනු අඩංගු වේ . එය "ජීවිතය ආරම්භ කරයි" (ඔබ බැඳීමක් පරීක්ෂා කරන විට හෝ රෙපෝ ක්ලෝන කරන විට) HEAD විසින් පෙන්වා දී ඇති බැඳීම්වල ඇති සියලුම ලිපිගොනු වල පිටපතක් ලෙස. එබැවින් ඔබ ( ) දර්ශකයෙන් ගොනුවක් ඉවත් කළහොත් git rm --cachedඑයින් අදහස් වන්නේ ඔබ එම ගොනුව මකා දැමිය හැකි බැඳීමක් කිරීමට සූදානම් වන බවයි . git reset HEAD <filename>අනෙක් අතට, ගොනුව HEAD සිට දර්ශකයට පිටපත් කරනු ඇත, එවිට ඊළඟ කැපවීම එම ගොනුවේ කිසිදු වෙනසක් නොපෙන්වයි.
වයිල්ඩ්කාඩ්

11
මම දැනගත්තා git reset -pහරියට ඒ වගේ දෙයක් තියෙනවා කියලා git add -p. මේක නම් නියමයි!
donquixote

10
ඔබට ඇත්ත වශයෙන්ම කලින් වේදිකාගත කර ඇති නමුත් වෙනස් නොකළ වෙනස්කම් නැවත ලබා ගත හැකි නමුත් පරිශීලක හිතකාමී ආකාරයකින් නොව 100% ආරක්ෂිත නොවේ (අවම වශයෙන් මා සොයාගෙන නැත): goto .git / object, git addඔබට නැවත ලබා ගැනීමට අවශ්‍ය අවස්ථාවේදී නිර්මාණය කරන ලද ගොනු සොයන්න ( 61/3AF3...- > වස්තු හැඳුනුම්පත 613AF3...), එවිට git cat-file -p <object-id>(පැය කිහිපයක් වැඩ නැවත ලබා ගැනීම වටී, නමුත් බොහෝ විට කැපවීමට පාඩමක් ද විය හැකිය ...)
පීටර් ෂ්නයිඩර්

2152

ඔබට අවශ්‍යයි:

git rm --cached <added_file_to_undo>

තර්කනය:

මම මේ සඳහා අලුත් වූ විට, මම මුලින්ම උත්සාහ කළෙමි

git reset .

(මගේ මුලික එකතු කිරීම අහෝසි කිරීමට), මෙම (එසේ නොවේ) ප්‍රයෝජනවත් පණිවිඩය ලබා ගැනීම සඳහා පමණි:

fatal: Failed to resolve 'HEAD' as a valid ref.

පළමු කැපවීමෙන් පසුව HEAD ref (ශාඛාව?) නොපවතින බැවිනි. එනම්, ඔබ වැනි මගේ කාර්ය ප්‍රවාහය, මගේ වැනි, ඔබ වැනි ආරම්භක ගැටලුවට මුහුණ දෙනු ඇත:

  1. නව උණුසුම් බව වන Git අත්හදා බැලීමට මගේ විශිෂ්ට නව ව්‍යාපෘති නාමාවලියට සීඩී
  2. git init
  3. git add .
  4. git status

    ... කපටි අනුචලන ගොඩක් ...

    => අපොයි, මට ඒ සියල්ල එකතු කිරීමට අවශ්‍ය නොවීය.

  5. google "git add අහෝසි කරන්න"

    => සිරස් පිටාර ගැලීම සොයා ගන්න - ඔව්

  6. git reset .

    => මාරාන්තික: වලංගු යොමු කිරීමක් ලෙස 'හෙඩ්' නිරාකරණය කිරීමට අපොහොසත් විය.

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

Git තත්ව ප්‍රතිදානයේ නිවැරදි විසඳුම එහි ඇති බව (ඔව්, මම 'කපටිකම' ලෙස විස්තර කර ඇත්තෙමි)

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

ඇත්ත වශයෙන්ම විසඳුම භාවිතා කිරීමයි git rm --cached FILE.

වෙනත් තැන්වල මෙහි අනතුරු ඇඟවීම් සටහන - git rmගොනුව ඔබේ දේශීය කම්කරු පිටපතක් දමයි, නමුත් නොවේ ඔබ භාවිතා කරන්නේ නම් --cached . මෙහි ප්‍රති result ලය මෙන්න git help rm:

--cached මෙම විකල්පය භාවිතා කර දර්ශකයෙන් පමණක් මාර්ග ඉවත් කර ඉවත් කරන්න. නවීකරණය කළත් නැතත් වැඩ කරන ගස් ලිපිගොනු ඉතිරි වේ.

මම දිගටම භාවිතා කරමි

git rm --cached .

සියල්ල ඉවත් කර නැවත ආරම්භ කිරීමට. කෙසේ වෙතත් වැඩ නොකළේ, මන්ද යත්, add .පුනරාවර්තන වන අතර, එය නැවත ලබා ගත rmයුතු -rබැවිනි. සැනසුම් සුසුමක්.

git rm -r --cached .

හරි, දැන් මම නැවත ආරම්භ කළ ස්ථානයට යමි. ඊළඟ වතාවේ මම -nවියළි ධාවනයක් කිරීමට සහ එකතු කරන්නේ කුමක් දැයි බැලීමට යන්නෙමි :

git add -n .

කිසිවක් විනාශ නොකිරීම git help rmගැන විශ්වාස කිරීමට පෙර මම සියල්ල ආරක්ෂිත ස්ථානයකට ගෙන --cachedගියෙමි (සහ මම එය වැරදියට ලියා ඇත්නම් කුමක් කළ යුතුද).


15
හාහ්. මමත් එම ක්‍රියාවලියම අනුගමනය කළෙමි. මම ලබා දුන් හා පැවසීය හැර rm -rf .git, git initමම විශ්වාස නැති නිසා git rm --cachedමගේ වැඩ පිටපතක් තබා ගැනීමට. සමහර ස්ථානවල තවමත් git ඕනෑවට වඩා සංකීර්ණ වන්නේ කෙසේද යන්න ගැන එය ටිකක් පවසයි. git unstageකොටස් සම්මත විධානයක් විය යුතුය, මට එය අන්වර්ථයක් ලෙස එකතු කළ හැකිදැයි මට ප්‍රශ්නයක් නැත.
ඒඩ්‍රියන් මැක්නෙල්

5
මට git පවසයිgit reset HEAD <File>...
drahnr

16
git rm --cached <file> යනු නිවැරදි පිළිතුරයි, එය <file> ගබඩාවට මුලින් ආනයනය කරන්නේ නම්. ඔබ ගොනුවේ වෙනසක් අස්ථිර කිරීමට උත්සාහ කරන්නේ නම්, git reset යනු නිවැරදි පිළිතුරයි. මෙම පිළිතුර වැරදියි යැයි පවසන අය වෙනත් ප්‍රශ්නයක් ගැන සිතති.
බැරී කෙලී

14
මෙම ඇත්තටම වැඩ, එහෙත් එමගින් පමණක් ගොනුව පෙර යාන්තමින් නැති, හෝ වන පළමු නසා මත git addවිධාන නව ගොනු එක් කල, නමුත් දැනට පවතින ගොනු කිරීමට වෙනස් වෙනවා.
naught101

4
හුදෙක් නොදැනුවත්ව හා කැටි ගැසුණු git එක පෙන්වීමට යයි. සමාන්තර "අහෝසි කරන්න" විධානයන් වෙනුවට, ඒවා අහෝසි කරන්නේ කෙසේදැයි ඔබ සොයාගත යුතුය. ඔබේ කකුල ඉක්මන් වැලි වලින් නිදහස් කර ගැනීමට උත්සාහ කිරීම හා පසුව ඔබේ අත හිරවී සිටීම, ඉන්පසු ඔබේ අනෙක් අත හිරවීම ... සෑම විධානයක්ම GUI හරහා කළ යුතුය, විකල්ප සඳහා ඩ්‍රොප් ඩවුන් මෙනු අයිතම සමඟ ... සියලු UI ගැන සිතන්න, අපට ලැබී ඇති tivity ලදායිතා වාසි, නමුත් අපට මෙම රෙට්රෝ විධාන රේඛා අතුරුමුහුණතක් තිබේ. Git GUI වැඩසටහන් මෙය තව දුරටත් අර්ථවත් කරයි.
ahnbizcad

533

ඔබ ටයිප් කරන්නේ නම්:

git status

වේදිකා ගත කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් ඇතුළුව වේදිකාගත කර ඇති දේ Git ඔබට කියනු ඇත:

use "git reset HEAD <file>..." to unstage

මේ වගේ අවස්ථාවන්හිදී නිවැරදි දේ කිරීමට මට නිරුවත් කිරීම Git ඉතා හොඳ කාර්යයක් බව මට පෙනේ.

සටහන: මෑත කාලීන Git අනුවාදයන් (1.8.4.x) මෙම පණිවිඩය වෙනස් කර ඇත:

(use "git rm --cached <file>..." to unstage)

20
addසංස්කරණ ගොනුව දැනටමත් ලුහුබඳිමින් තිබේද යන්න මත පදනම්ව පණිවිඩය වෙනස් වනු ඇත ( addහැඹිලියට අළුත් අනුවාදයක් සුරකින ලද එකම දෙය - මෙහි එය ඔබගේ පණිවිඩය පෙන්වනු ඇත). වෙනත් තැනක, ගොනුව කලින් වේදිකා ගත නොකළේ නම්, එය දර්ශනය වනු ඇතuse "git rm --cached <file>..." to unstage
ලියොන්බ්ලෝයි

මහා! මෙම git reset HEAD <file>එක් ඔබ delete ගොනුව unstage කිරීමට අවශ්ය අවස්ථාවක වැඩ කරන බව පමණයි
skerit

2
මගේ git අනුවාදය 2.14.3 වේදිකාවට පවසයි git reset HEAD.
සිල්වර් වුල්ෆ් - මොනිකා නැවත

246

පැහැදිලි කිරීම සඳහා: git addවත්මන් වැඩ කරන නාමාවලියෙහි සිට වේදිකා ප්‍රදේශයට (දර්ශකය) වෙනස්කම් ගෙන යයි .

මෙම ක්‍රියාවලිය වේදිකාගත කිරීම ලෙස හැඳින්වේ . එබැවින් වෙනස්කම් (වෙනස් කළ ලිපිගොනු) වේදිකා ගත කිරීමේ වඩාත් ස්වාභාවික විධානය පැහැදිලිව පෙනේ:

git stage

git add සඳහා පහසුවෙන් ටයිප් කළ හැකි අන්වර්ථයකි git stage

අනුකම්පාව git unstageහෝ git unaddවිධානයන් නොමැත . අදාළ එක අනුමාන කිරීමට හෝ මතක තබා ගැනීමට අපහසු නමුත් එය පැහැදිලිව පෙනේ:

git reset HEAD --

මේ සඳහා අපට පහසුවෙන් අන්වර්ථයක් නිර්මාණය කළ හැකිය:

git config --global alias.unadd 'reset HEAD --'
git config --global alias.unstage 'reset HEAD --'

අවසාන වශයෙන්, අපට නව විධානයන් ඇත:

git add file1
git stage file2
git unadd file2
git unstage file1

පුද්ගලිකව මම ඊටත් වඩා කෙටි අන්වර්ථ නාම භාවිතා කරමි:

git a # For staging
git u # For unstaging

4
"චලනයන්"? මෙයින් ඇඟවෙන්නේ එය වැඩ කරන නාමාවලියෙන් ගොස් ඇති බවයි. එය එසේ නොවේ.
තෝමස් වෙල්ලර්

4
එය පැහැදිලිව පෙනෙන්නේ ඇයි?
ලෙනාර් හොයිට්

ඇත්ත වශයෙන්ම, Git සහ අනෙකුත් SCM යන දෙකෙහිම command තිහාසික විධානය වන git stageඅන්වර්ථය වේ git add. මට කිව හැකි නම් එය 2008 දෙසැම්බරයේ "Git's git repository" හි 11920d28da සමඟ එකතු කර ඇත.
ඔබ්සෙඩියන්

1
මෙය සම්බන්ධයක් නැති නමුත් ප්‍රයෝජනවත් අදහසක් එකතු කිරීමට පෙර ගොනුව වලංගු කිරීම මට හමු විය, චෙක්-විධාන ගොනු නාමය && git ගොනු නාමය වැනි දෙයක්, මම මගේ යන්ත්‍රයේ git වෙනුවට කෙටි g එකක් ආදේශ කළෙමි, මෙතෙක් එය ක්‍රියාත්මක වී ඇත හරි මට: github.com/dataf3l/g , මෙය යමෙකුට ප්‍රයෝජනවත් වේදැයි මම නොදනිමි, නමුත් සමහර අයගේ කාලය ඉතිරි කර ගැනීමේ බලාපොරොත්තුවෙන් මම එය මෙහි තබමි.
ෆෙලිපේ වැල්ඩස්

167

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

මෙය කනස්සල්ලට පත්විය යුතු දෙයක් නොවේ; ගොනුව ඇත්ත වශයෙන්ම තවමත් ගබඩාවේ ඇත, නමුත් එය "ලිහිල් වස්තුවක්" ලෙස පමණි. එය වෙනත් ගබඩාවලට පිටපත් නොකරනු ඇත (ක්ලෝන, තල්ලු හරහා), සහ අවකාශය අවසානයේ නැවත ගොඩගනු ඇත - සමහර විට ඉතා ඉක්මනින් නොවේ. ඔබ කනස්සල්ලට පත්ව සිටී නම්, ඔබට ධාවනය කළ හැකිය:

git gc --prune=now

යාවත්කාලීන කිරීම (පහත දැක්වෙන්නේ වඩාත්ම උත්තරීතර පිළිතුරු වලින් ඇතිවිය හැකි ව්‍යාකූලතා ඉවත් කිරීමට මා දරන උත්සාහයයි):

ඉතින්, සැබෑ අහෝසි කිරීම git addකුමක්ද?

git reset HEAD <file> ?

හෝ

git rm --cached <file>?

තදින් කථා කිරීම, සහ මම වරදවා වටහා නොගන්නේ නම්: කිසිවක් නැත .

git add අහෝසි කළ නොහැක - ආරක්ෂිතව, පොදුවේ.

git add <file>ඇත්ත වශයෙන්ම කරන්නේ කුමක්දැයි පළමුව සිහිපත් කරමු :

  1. නම් <file>කරන ලදී මීට පෙර දම්වැල් මත ධාවනය වන නොවේ , git add හැඹිලි එය එකතු එහි වත්මන් අන්තර්ගතය.

  2. නම් <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 -acommand හරහා යාවත්කාලීන කරමු .


* (සංස්කරණය කරන්න: ඉහත සඳහන් දේ ප්‍රායෝගිකව නිවැරදි ය, නමුත් තවමත් සිදු කර ඇති වෙනස්කම් යථා තත්වයට පත් කිරීම සඳහා තරමක් අශෝභන / කැටි කළ හැකි ක්‍රම තිබිය හැකි නමුත් කැපවී නොසිට නැවත ලිවීම - ජොහැන්නස් මැටොකික් සහ අයොල්ස්මිත්ගේ අදහස් බලන්න)


4
නිශ්චිතවම කිවහොත්, දැනටමත් වේදිකා ගත කර ඇති ගොනුවක් git add මගින් ප්‍රතිස්ථාපනය කිරීමට ක්‍රමයක් තිබේ. ඔබ සඳහන් කළ පරිදි git add මඟින් එම ගොනුව සඳහා git වස්තුවක් නිර්මාණය වන අතර එය ගොනුව සම්පූර්ණයෙන්ම ඉවත් කිරීමේදී පමණක් නොව නව අන්තර්ගතයන් සමඟ නැවත ලියන විටද ලිහිල් වස්තුවක් බවට පත්වේ. නමුත් එය ස්වයංක්‍රීයව නැවත ලබා ගැනීමට විධානයක් නොමැත. ඒ වෙනුවට ගොනුව හඳුනාගෙන අතින් නිස්සාරණය කළ යුතුය. නැතහොත් මෙම නඩුව සඳහා පමණක් ලියා ඇති මෙවලම් වලින් (libgit2 මෙයට ඉඩ දෙනු ඇත). නමුත් මෙය ගෙවනු ලබන්නේ ගොනුව ඉතා වැදගත් හා විශාල නම් සහ පෙර අනුවාදය සංස්කරණය කිරීමෙන් නැවත ගොඩනඟා ගත නොහැකි නම් පමණි.
ජොහැන්නස් මැටොකික්

2
මා නිවැරදි කර ගැනීම සඳහා: ලිහිල් වස්තු ගොනුව සොයාගත් පසු (නිර්මාණ දිනය / වේලාව වැනි මෙටා-දත්ත භාවිතා කරන්න) git cat-fileඑහි අන්තර්ගතය නැවත ලබා ගැනීමට භාවිතා කළ හැකිය.
ජොහැන්නස් මැටොකික්

2
හැකි තවත් මාර්ගයක් නිරත වූ බව වෙනස්කම් සොයා නමුත් කැප පසුව එය උඩින් ලීවීම නොවන උදා: තවත් git addහරහා වේ git fsck --unreachableඔබ ඒ වන විට පරීක්ෂා කළ හැකි සියලු ළඟාවිය නොහැකි එය විවෘත, ලැයිස්තුගත වනු ඇත git show SHA-1_IDහෝ git fsck --lost-foundඑම කැමැත්ත> ලියන්න බවට වස්තූන් කලිසමකින් .git/lost-found/commit/හෝ .git/lost-found/other/, වර්ගය මත රඳා පවතී. මෙයද බලන්නgit fsck --help
iolsmit

111

අහෝසි දැනටමත් එකතු කර ඇති ගොනුවක් Git භාවිතා තරමක් පහසු වේ. myfile.txtදැනටමත් එකතු කර ඇති නැවත සැකසීම සඳහා , භාවිතා කරන්න:

git reset HEAD myfile.txt

පැහැදිලි කිරීම:

අහෝසි කිරීම සඳහා ඔබ අනවශ්‍ය ලිපිගොනු (ය) වේදිකා ගත කිරීමෙන් පසුව, ඔබට කළ හැකිය git reset.Headඔබේ ගොනුවේ ප්‍රධානියා වන අතර අවසාන පරාමිතිය ඔබේ ගොනුවේ නමයි.

මෙම අවස්ථා වලදී සිදුවිය හැකි සියලු පියවර ඇතුළුව මම ඔබ වෙනුවෙන් වැඩි විස්තර සඳහා පහත රූපයේ පියවර නිර්මාණය කර ඇත්තෙමි.

git reset HEAD ගොනුව


රූපය: "විධානය එක් කරන්න ...""විධානය එකතු කරයි ..." ( වර්තමාන සරල ආතතිය, තුන්වන පුද්ගලයා )
පීටර් මෝර්ටෙන්සන්

රූපය: අවශ්‍යයිඅවශ්‍යයි (මෙහි ස්ලැන්ග් භාවිතා කිරීමට අවශ්‍ය නැත)
පීටර් මෝර්ටෙන්සන්

93
git rm --cached . -r

ඔබගේ වත්මන් නාමාවලියෙන් ඔබ එකතු කළ සියල්ල පුනරාවර්තව "එකතු නොකරනු ඇත"


3
මම සෑම දෙයක්ම එක් කිරීමට බලාපොරොත්තු නොවෙමි, එක් විශේෂිත ගොනුවක් පමණි.
paxos1977

3
ඔබට පෙර කළ යුතු කිසිවක් නොමැති නම් එයද ප්‍රයෝජනවත් වේ. පෙර කැපවීමක් නොමැති නම්, git reset HEAD <file>මෙසේ කියනු ඇතfatal: Failed to resolve 'HEAD' as a valid ref.
ප්‍රියා රන්ජන් සිං

6
නැහැ, මේ එකතු වූ මකා ඔබේ වත්මන් නාමාවලියේ සියල්ල. අස්ථිර වෙනස්කම් වලට වඩා බෙහෙවින් වෙනස් ය.
අමරි

89

දුවන්න

git gui

සියළුම ලිපිගොනු අතින් ඉවත් කරන්න හෝ ඒවා සියල්ලම තෝරාගෙන අස්ථායී සිට බොත්තම ක්ලික් කරන්න.


1
ඔව් මට ඒක තේරෙනවා. මට අවශ්‍ය වූයේ "ඔබට භාවිතා කළ හැකිය git-gui...." වැනි ඔබේ පිළිතුරේ ඇඟවුම් කරන ලෙස ඇඟවීමට පමණි :)
ඇලෙක්සැන්ඩර් සුරෆෙල්

1
එය පවසන්නේ, "git-gui: විධානය හමු නොවීය". මෙය ක්‍රියාත්මක වේදැයි මට විශ්වාස නැත.
පරින්ද රාජපක්ෂ

ඇවැත්නි, මෙය ඔබට තේරුම් ගත නොහැකි විධාන රේඛා කිරීම වඩාත් සරල ය. මා වැනි ආරම්භකයකු සඳහා මෙය අනිවාර්යයෙන්ම නිර්දේශ කෙරේ. මෙය ලිවීමට ස්තූතියි!
ඉර්ෆැන්ඩි ජිප්

ස්තූතියි. එය අවදානමට ලක් කිරීමට අවශ්‍ය නොවූ නිසා GUI භාවිතා කිරීමට සිදුවිය.
සාගර් ඛත්‍රි

84

Git හට සිතාගත හැකි සෑම ක්‍රියාවක් සඳහාම විධාන ඇත, නමුත් දේවල් නිවැරදිව ලබා ගැනීමට එයට පුළුල් දැනුමක් අවශ්‍ය වන අතර එම නිසා එය ප්‍රති-බුද්ධිමත් වේ ...

ඔබ මීට පෙර කළ දේ:

  • ගොනුවක් වෙනස් කර භාවිතා කරන ලදි git add ., හෝgit add <file> .

කුමක්ද ඔයාට උවමනා:

  • ගොනුව දර්ශකයෙන් ඉවත් කරන්න, නමුත් එය පිටපත් කර වැඩ කරන පිටපතෙහි නොගැලපෙන වෙනස්කම් සහිතව තබන්න:

    git reset head <file>
    
  • HEAD වෙතින් ගොනුව අවසන් තත්වයට යලි සකසන්න, වෙනස්කම් අහෝසි කර දර්ශකයෙන් ඉවත් කරන්න:

    # Think `svn revert <file>` IIRC.
    git reset HEAD <file>
    git checkout <file>
    
    # If you have a `<branch>` named like `<file>`, use:
    git checkout -- <file>

    එතැන් සිට මෙය අවශ්ය වේ git reset --hard HEADතනි ලිපිගොනු සමඟ ක්‍රියා නොකරන වේ.

  • <file>වැඩකරන පිටපතෙහි වෙනස්කම් සහිතව අනුවාද නොකළ ගොනුව තබා ගනිමින් දර්ශකයෙන් සහ අනුවාදයෙන් ඉවත් කරන්න :

    git rm --cached <file>
    
  • <file>වැඩ කරන පිටපතෙන් සහ අනුවාදයෙන් සම්පූර්ණයෙන්ම ඉවත් කරන්න :

    git rm <file>
    

1
'Git reset head <file>' සහ 'git rm --cached <file> හි වෙනස මට දරාගත නොහැක. ඔබට එය පැහැදිලි කළ හැකිද?
ජෙස්වාං

6
es ජෙස්වාන්ග් ගොනු එක්කෝ 'දන්නා' ඒවා වේ (ඒවායේ වෙනස්කම් නිරීක්ෂණය කරනු ලැබේ.), නැතහොත් ඒවා 'අනුවාද' නොකෙරේ. reset headඔබගේ වර්තමාන වෙනස්කම් අහෝසි කරයි, නමුත් ගොනුව තවමත් git මගින් නිරීක්ෂණය කරනු ලැබේ. rm --cachedගොනුව අනුවාදයෙන් ඉවතට ගෙන යයි, එබැවින් git තවදුරටත් වෙනස්කම් සඳහා එය පරික්ෂා නොකරයි (තවද කලින් සුචිගත කරන ලද වර්තමාන වෙනස් කිරීම් ද ඉවත් කරයි, කලින් git ට කියනු ලැබේ add), නමුත් වෙනස් කළ ගොනුව ඔබගේ වැඩ කරන පිටපතෙහි තබා ඇත, එය ඔබගේ ගොනු ෆෝල්ඩරයේ ඇත HDD මත.
sjas

3
වෙනස git reset HEAD <file>තාවකාලිකයි - විධානය ඊළඟ බැඳීමට පමණක් අදාළ වේ, නමුත් git rm --cached <file>එය නැවත එකතු වන තෙක් අස්ථිර වනු ඇත git add <file>. එසේම, git rm --cached <file>ඔබ එම ශාඛාව දුරස්ථයට තල්ලු කළහොත්, ශාඛාව අදින ඕනෑම අයෙකුට ඔවුන්ගේ ෆෝල්ඩරයෙන් ගොනුව මකා දැමෙනු ඇත.
DrewT

81

ප්‍රශ්නය පැහැදිලිව මතු නොවේ. හේතුව එහි git addඅර්ථ දෙකක් ඇත:

  1. වේදිකා ප්‍රදේශයට නව ගොනුවක් එක් කිරීමෙන් පසුව අහෝසි කරන්නgit rm --cached file .
  2. නවීකරණය කරන ලද ගොනුවක් වේදිකා ප්‍රදේශයට එක් කිරීමෙන් පසුව අහෝසි කරන්න git reset HEAD file.

සැකයක් ඇත්නම් භාවිතා කරන්න

git reset HEAD file

මන්ද එය අවස්ථා දෙකේදීම අපේක්ෂිත දේ කරන බැවිනි.

අවවාදයයි: ඔබ නම් git rm --cached fileකළ බවට ගොනු මත වෙනස් (නිධිය තුල පෙර පැවති ගොනුවක්), එසේ නම් ගොනුව මත ඉවත් කරනු git commit! එය ඔබගේ ගොනු පද්ධතිය තුළ තවමත් පවතිනු ඇත, නමුත් වෙනත් අයෙකු ඔබගේ කැපවීම ඇද ගන්නේ නම්, ගොනුව ඔවුන්ගේ වැඩ ගසෙන් මකා දැමෙනු ඇත.

git statusගොනුව නව ගොනුවක් හෝ වෙනස් කරන ලද්දක් දැයි ඔබට කියනු ඇත :

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

    new file:   my_new_file.txt
    modified:   my_modified_file.txt

7
+1. මෙම පිටුවේ අසාමාන්‍ය ලෙස ඉහළ මට්ටමේ පිළිතුරු සහ අදහස් දැක්වීම් හැසිරීම පිළිබඳ වැරදිසහගත ය git rm --cached somefile. මෙම පිළිතුර මගින් සියලු ව්‍යාජ හිමිකම් වලින් නොමඟ යාමෙන් නවකයන් ආරක්ෂා කළ හැකි ප්‍රමුඛ ස්ථානයකට පිටුව ඉහළට එනු ඇතැයි මම බලාපොරොත්තු වෙමි.
මාර්ක් අමරි

මෙහි ඇති හොඳම පිළිතුරු වලින් එකක් නම්, එය ලැයිස්තුවේ තරමක් අඩු
වීමයි

64

ඔබ ඔබේ මූලික කැපවීමෙහි යෙදී සිටින අතර ඔබට භාවිතා කළ නොහැකි නම් git reset, "Git බංකොලොත්භාවය" ප්‍රකාශ කර .gitෆෝල්ඩරය මකා දමා නැවත ආරම්භ කරන්න


5
ෆෝල්ඩරය මකා දැමීමට පෙර ඔබ දුරස්ථ සම්භවයක් එකතු කර ඇත්නම් .git / config ගොනුව පිටපත් කිරීම එක් ඉඟියක් වේ.
ටියාගෝ

4
H ක්‍රිස් ජොන්සන් අදහස් දැක්වීම ක්‍රියාත්මක වේ. සමහර විට, එකක් හැර අනෙක් සියලුම ගොනු කිරීමට ඔබට අවශ්‍යය: git add -A && git rm --cached EXCLUDEFILE && git commit -m 'awesome commit' (මෙය පෙර සිදු නොවූ විටද මෙය ක්‍රියාත්මක වේ, නැවත Failed to resolve 'HEAD'ගැටළුවක් ඇත)

57

වෙනත් බොහෝ පිළිතුරු වලට අනුව, ඔබට භාවිතා කළ හැකිය git reset

එහෙත්:

මේ සඳහා Git විධානය (ඇත්තෙන්ම අන්වර්ථයක්) එකතු කරන මෙම කුඩා පෝස්ට් එක මට හමු විය git unadd: විස්තර සඳහා git unadd බලන්න හෝ ..

සරලවම,

git config --global alias.unadd "reset HEAD"

දැන් ඔබට පුළුවන්

git unadd foo.txt bar.txt

45

git add -iඔබගේ ඉදිරියට එන බැඳීමෙන් එකතු කළ ගොනු ඉවත් කිරීමට භාවිතා කරන්න . උදාහරණයක්:

ඔබට අවශ්‍ය නැති ගොනුව එකතු කිරීම:

$ git add foo
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]#

ඔබගේ එකතු කිරීම අහෝසි කිරීම සඳහා අන්තර්ක්‍රියාකාරී එකතු කිරීමකට යාම (මෙහි git හි ටයිප් කර ඇති විධානයන් "r" (ප්‍රතිවර්තනය), "1" (ලැයිස්තුවේ පළමු ප්‍රවේශය ප්‍රතිවර්තනය පෙන්වයි), ප්‍රතිවර්ත ප්‍රකාරයෙන් ඉවත් වීමට 'ආපසු' සහ "q" (ඉවත්):

$ git add -i
           staged     unstaged path
  1:        +1/-0      nothing foo

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> r
           staged     unstaged path
  1:        +1/-0      nothing [f]oo
Revert>> 1
           staged     unstaged path
* 1:        +1/-0      nothing [f]oo
Revert>> 
note: foo is untracked now.
reverted one path

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp
What now> q
Bye.
$

ඒක තමයි! මෙන්න ඔබේ සාක්ෂිය, "foo" නැවත සොයා නොගත් ලැයිස්තුවට ඇති බව පෙන්වයි:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
# [...]
#       foo
nothing added to commit but untracked files present (use "git add" to track)
$

42

git removeහෝ ධජය git rmසමඟ මේ සඳහා භාවිතා කළ හැකිය --cached. උත්සාහ කරන්න:

git help rm

9
මෙය ගොනුව මුළුමනින්ම ඉවත් කිරීමට යන්නේ නැද්ද?
විල්ලා

8
git rm --cached ...git repo එකකින් ගොනු ඉවත් කරයි. ඒවා තවමත් ඔබේ පරිගණකයේ පවතිනු ඇත, නමුත් මෙය ගොනුවක අස්ථිර වෙනස්කම් වලට වඩා බෙහෙවින් වෙනස් ය. මේ ගැන පැකිලෙන ඕනෑම කෙනෙකුට එය ප්‍රශ්නයට වලංගු පිළිතුරක් නොවේ.
ඇඩිසන්

38

ඔබ නව ව්‍යාපෘතියක් ආරම්භ කරන විට මෙම කරදරකාරී ගැටළුව මඟහරවා ගත හැකි ක්‍රමයක් මෙන්න:

  • ඔබගේ නව ව්‍යාපෘතිය සඳහා ප්‍රධාන නාමාවලිය සාදන්න.
  • දුවන්න git init.
  • දැන් .gitignore ගොනුවක් සාදන්න (එය හිස් වුවත්).
  • ඔබගේ .gitignore ගොනුව කැප කරන්න.

Git git resetඔබට කිසිදු කැපවීමක් නොමැති නම් එය කිරීම දුෂ්කර කරයි. ඔබ නිර්මාණය කරන්නේ නම් ඉතා කුඩා ආරම්භක එක් සහිත වෙනුවෙන්, ඔබට හැකි බව පසු සිදු git add -Aසහ git resetඔබට කළ හැකි සෑම දෙයක්ම අයිතිය ලබා ගැනීමට අවශ්ය තරම් කාලය.

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

  • ආරම්භක බැඳීම පරීක්ෂා කරන්න. මෙය ඔබගේ සියලුම ලිපිගොනු ඉවත් කරයි.
  • ඉන්පසු ඔබගේ නවතම කැපවීම නැවත පරීක්ෂා කරන්න. මෙය ඔබගේ වර්තමාන රේඛා අවසන් සැකසුම් භාවිතා කරමින් ඔබගේ ලිපිගොනු වල නැවුම් පිටපත් ලබා ගනී.

1
තහවුරු කර ඇත! Git එකතු කිරීමෙන් පසු git යළි පිහිටුවීමට උත්සාහ කරන්න. git දූෂිත හෙඩ් ගැන පැමිණිලි කරමින් සිටියේය. ඔබගේ උපදෙස් අනුව, මට කිසිදු ගැටළුවක් නොමැතිව නැවත නැවත සකස් කළ හැකිය :)
Kounavi

1
දෙවන කොටස ක්රියා කරයි, නමුත් එය ටිකක් අවුල් සහගත ය. රේඛීය අවසානයන් හසුරුවන ආකාරය, autocrlfවටිනාකම මත රඳා පවතී ... සැකසුම් අනුව මෙය සෑම ව්‍යාපෘතියකම ක්‍රියාත්මක නොවේ.
sjas

1
මෙම පිළිතුර පළ කරන අවස්ථාවේ දී සාධාරණ වූ නමුත් දැන් යල්පැන ඇත; git reset somefileහා git resetදෙකම දැන්, ප්රථම සිදු කිරීමට පෙර ඒ සඳහා වැඩ. Git කිහිපයක් නැවත නිකුත් කළ දා සිට මෙය සිදුවිය.
මාර්ක් අමරි

Ark මාක්ඇමරි, ඔබ නිවැරදියි (ඔබේ ප්‍රකාශය සඳහා මූලාශ්‍රයක් පළ කළහොත් එය සිසිල් වනු ඇත), නමුත් පිරිසිදු කැපවීමකින් හෝ දෙකකින් ඔබේ නිධිය ආරම්භ කිරීමේ වටිනාකම තවමත් පවතී.
රයන් ලුන්ඩි

34

සමහර විට ඔබ ඔබේ ප්‍රශ්නය පළ කළ දා සිට Git පරිණාමය වී ඇත.

$> git --version
git version 1.6.2.1

දැන්, ඔබට උත්සාහ කළ හැකිය:

git reset HEAD .

මෙය ඔබ සොයන දේ විය යුතුය.


2
ෂුවර්, නමුත්, පසුව, ඔබ එක් එක් unadd කළ යුතු ආකාරය පිළිබඳ followup ප්රශ්නයක් තියෙනවා දෙකක් (හෝ වැඩි) ගොනු කළේය. කෙසේ වෙතත්, "git reset <paths>" යනු "git add <paths>" ට ප්‍රතිවිරුද්ධ බව "git reset" අත්පොතේ සඳහන් වේ.
ඇලෙක්ස් නෝර්ත්-කීස්

34

ඔබ සංශෝධනයක් නියම කිරීමට අපොහොසත් වුවහොත් ඔබට බෙදුම්කරුවෙකු ඇතුළත් කළ යුතු බව සලකන්න. මගේ කොන්සෝලයෙන් උදාහරණය:

git reset <path_to_file>
fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git reset -- <path_to_file>
Unstaged changes after reset:
M    <path_to_file>

(Git අනුවාදය 1.7.5.4)


2
මම උත්සාහ කළ git reset <path>අතර එය බෙදුම්කරුවෙකු නොමැතිව හොඳින් ක්‍රියා කරයි. මම git 1.9.0 ද භාවිතා කරමි. සමහර විට එය පැරණි අනුවාද වල ක්‍රියා නොකරන්නේද?

31

ඉහත යෝජනා කර ඇති පරිදි, නව ගොනු වේදිකා ප්‍රදේශයෙන් ඉවත් කිරීමට (සහ නව ගොනුවක් සඳහා පමණක්):

git rm --cached FILE

අහම්බෙන් එකතු කරන ලද නව ගොනු සඳහා පමණක් rm --cached භාවිතා කරන්න.


4
බව කමක් --cachedමෙහි ඉතා වැදගත් කොටසකි.
takehin

1
-1; නැත, මෙය ගොනුව අවධි නොකරයි, එය ගොනුව මකාදැමීමක් සිදු කරයි (ඇත්ත වශයෙන්ම එය ඔබගේ වැඩ ගසෙන් මකා නොදමනු ඇත).
මාර්ක් අමරි

25

විශේෂිත ෆෝල්ඩරයක (සහ එහි උප ෆෝල්ඩරවල) සෑම ගොනුවක්ම නැවත සැකසීමට, ඔබට පහත විධානය භාවිතා කළ හැකිය:

git reset *

4
ඇත්ත වශයෙන්ම, මෙය සෑම ගොනුවක්ම යළි පිහිටුවන්නේ නැත, මන්ද * ෂෙල් ප්‍රසාරණය භාවිතා කරන අතර එය තිත් ගොනු (සහ තිත්-නාමාවලි) නොසලකා හරියි.
ලූක්

ඔබට git statusඉතිරිව ඇති ඕනෑම දෙයක් දැක බලා එය අතින් නැවත සකසන්න git reset file.
සෝරෙයාර්

25

*වරකට ගොනු කිහිපයක් හැසිරවීමට විධානය භාවිතා කරන්න :

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

ආදිය.


3
ඔබ පැහැදිලිවම සඳහන් කළහොත් මිස * සාමාන්‍යයෙන් තිත් ලිපිගොනු හෝ 'තිත්-නාමාවලි' ඇතුළත් නොවන බව සිතන්න.*.*.prj
ලූක්

23

ටයිප් git resetකිරීමෙන් එය නැවත යථා තත්ත්වයට පත් වන අතර එය git add .ඔබගේ අවසන් කැපවීමෙන් පසු ඔබ කිසි විටෙකත් ටයිප් නොකළේය . ඔබ මීට පෙර කැපවී ඇති බවට වග බලා ගන්න.


එය සිදු වන විට, අවසාන කැපවීමක් සිදුවිය ... නමුත් මම විශේෂයෙන් ඉල්ලා සිටියේ බැඳීමෙන් එක් ගොනුවක් ඉවත් කිරීම ගැන මිස සෑම ගොනුවක්ම කැපවීමෙන් නොවේ.
paxos1977

20

මම නව ගොනුවක් සාදමි යැයි සිතමු newFile.txt:

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

මම අහම්බෙන් ගොනුව එකතු සිතන්න git add newFile.txt:

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

දැන් මම පෙර සිදු, මෙම එකතු ඉවත් කිරීමට අවශ්ය නම්, git reset newFile.txt:

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


මම 1 වන පින්තූරයේ සිටිමි යැයි සිතමු, එයින් අදහස් වන්නේ මා "git.add" වත් කර නොමැති බවයි. එසේම, මට මේ සියල්ල වෙනස් කිරීමට අවශ්‍ය නැත. මම අදහස් කළේ මම git තත්ත්වය කරන විට, එය රතු ලිපිගොනු නොපෙන්විය යුතුය. මා අදහස් කළේ එය අවසන් වරට තල්ලු කිරීමෙන් පසු එක ගොනුවක්වත් වෙනස් වී නැති ආකාරයට සමමුහුර්ත විය යුතු බවයි. එය සාක්ෂාත් කරගන්නේ කෙසේද?
නොබිඳිය හැකි

SO ඔබ පළමු පියවරේ යැයි සිතමු. රතු පැහැයෙන් ඉහළට පැමිණීමට "newFile.txt" කරන ඔබ විසින් සිදුකරන ලද සියලුම වෙනස්කම් ඉවත් කිරීමට ඔබට අවශ්‍යය.
නොබිඳිය හැකි

මම git තත්ත්වය කරන විට. මම කිසිසේත් වෙනසක් නොදකිමි. සියලුම රතු ලිපිගොනු ආපසු හැරවිය යුතුය.
නොබිඳිය හැකි

හායි, මම හිතන්නේ ඔබේ ප්‍රශ්නය වත්මන් ගසෙන් ඉවත් නොකළ ගොනු ඉවත් කරන්නේ කෙසේද යන්නයි. ඒ සඳහා ඔබට "git clean -f -d" භාවිතා කළ හැකිය. මෙය සොයා නොගත් නාමාවලි ද ඉවත් කරනු ඇත.
විදුර මුදලිගේ

සලකුණු නොකළ ලිපිගොනු මකා දැමීමට ඔබට අවශ්‍ය නැතිනම්, "-f" ධජය නොසලකා හරින්න.
විදුර මුදලිගේ

19

විශේෂිත ගොනුවක් සඳහා:

  • git reset my_file.txt
  • git checkout my_file.txt

එකතු කළ සියලුම ගොනු සඳහා:

  • git reset.
  • git checkout.

සටහන: පිටවීම මඟින් ලිපිගොනු වල කේතය වෙනස් කර අවසන් යාවත්කාලීන කළ (කැපවූ) තත්වයට ගමන් කරයි. යළි පිහිටුවීම කේත වෙනස් නොකරයි; එය ශීර්ෂකය නැවත සකසයි.


3
git reset <file>සහ අතර වෙනස කරුණාකර පැහැදිලි කරන්න git checkout <file>.
ට්‍රෙන්ට්

1
යළි පිහිටුවීම ගොනුව වෙනස් නොකරයි, එය වේදිකාවෙන් ඉවතට තබන්න (= දර්ශකය, එය git add මගින් තැබූ ස්ථානය)
ෆ්‍රෑන්ක්

පිටවීම ගොනුවේ කේත වෙනස් කර අවසන් යාවත්කාලීන කළ තත්වයට ගෙන යන්න. යළි පිහිටුවීම කේත වෙනස් නොකරයි, එය ශීර්ෂකය යළි පිහිටුවයි. නිදසුනක් ලෙස, තල්ලු කිරීමට පෙර එකතු කරන ලද හෝ කැපවූ ලිපිගොනු නැවත සකස් කිරීම සහ git එකතු කිරීමට පෙර අවසන් යාවත්කාලීන / කැපවූ අදියර වෙත ආපසු යාම සඳහා භාවිතා කිරීම.
හසීබ් කමල්

1
reset = ගොනුව වේදිකාවෙන් ඉවත් කරන්න, කෙසේ වෙතත් වෙනස්කම් තවමත් පවතී. checkout = යාවත්කාලීන කරන ලද ගොනුව නිධියෙන් ලබා ගන්නා අතර වත්මන් ගොනුව අභිබවා යනු ඇත
ඉමාම් බක්ස්

14

මෙම විධානය මඟින් ඔබගේ වෙනස්කම් අස්ථාවර වනු ඇත:

git reset HEAD filename.txt

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

git add -p 

ගොනු වල කොටස් එකතු කිරීමට.


14

අන්තර්ක්‍රියාකාරී මාදිලියක් ද ඇත:

git add -i

ගොනු එක් කිරීමට 3 වන විකල්පය තෝරන්න. මගේ නඩුවේදී මට බොහෝ විට එක් ගොනුවකට වඩා එක් කිරීමට අවශ්‍ය වන අතර අන්තර්ක්‍රියාකාරී මාදිලිය සමඟ ඔබට ගොනු එකතු කිරීමට මෙවැනි අංක භාවිතා කළ හැකිය. මෙය 4: 1, 2, 3, සහ 5 හැර අන් සියල්ලම ගනු ඇත

අනුක්‍රමයක් තෝරා ගැනීමට, 1 සිට 5 දක්වා සියල්ල ගැනීමට 1-5 ටයිප් කරන්න.

Git වේදිකාගත ගොනු


"කිසිවෙකු අන්තර්ක්‍රියාකාරී මාදිලිය ගැන සඳහන් නොකිරීම ගැන මට පුදුමයි" - ඔවුන් කළේ: stackoverflow.com/a/10209776/1709587
මාර්ක්


10
git reset filename.txt

වෙන කිසිවක් වෙනස් නොකර, "කැපවීමට ආසන්න" ප්‍රදේශයෙන් filename.txt නම් ගොනුවක් ඉවත් කරනු ඇත.


10

git add myfile.txt # මෙය ඔබගේ ගොනුව කැපවිය යුතු ලැයිස්තුවට එකතු කරනු ඇත

මෙම විධානයට වඩා ප්‍රතිවිරුද්ධ දෙය නම්,

git reset HEAD myfile.txt  # This will undo it.

ඉතින්, ඔබ පෙර තත්වයේ සිටිනු ඇත. නිශ්චිතව දක්වා ඇති ලැයිස්තුව නැවත ලැයිස්තුගත නොකෙරේ (පෙර තත්වය).

එය එම ගොනුව සමඟ ඔබේ හිස නැවත සකසනු ඇත. එබැවින්, ඔබේ හිසට එහි තේරුම නොමැති නම්, එය සරලවම එය නැවත සකසනු ඇත.


9

Sourcetree හි ඔබට GUI හරහා පහසුවෙන් මෙය කළ හැකිය. ගොනුවක් අස්ථාපනය කිරීමට Sourcetree භාවිතා කරන්නේ කුමන විධානයදැයි ඔබට පරීක්ෂා කළ හැකිය.

මම නව ගොනුවක් සාදා එය Git වෙත එක් කළෙමි. පසුව මම එය Sourcetree GUI භාවිතයෙන් අස්ථාපනය කළෙමි. ප්රති result ලය මෙයයි:

අස්ථිර ලිපිගොනු [08/12/15 10:43] git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - path / to / file / filename.java

resetනව ලිපිගොනු අස්ථාපනය කිරීමට Sourcetree භාවිතා කරයි .


ඔව්, ටර්ටොයිස්ගිට් සමඟ එකම තාක්ෂණය භාවිතා කළ හැකිය , පොදු භාවිත අවස්ථා සඳහා Git විධාන ලබා ගනී.
පීටර් මෝර්ටෙන්සන්

8
git reset filename.txt  

වෙන කිසිවක් වෙනස් නොකර, "කැපවීමට ආසන්න" ප්‍රදේශයෙන් filename.txt නම් ගොනුවක් ඉවත් කරනු ඇත.


git reset [ගොනුවේ නම] උදා: git reset src / main / java / com / dao / ImportCsvDataDaoImpl.java
Rohit Chaurasiya
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.