වේදිකා ප්‍රදේශයෙන් එක් ගොනුවක් ඉවත් කරන්නේ කෙසේද (git add අහෝසි කරන්න)?


1243

තත්වය: මා සතුව දැනටමත් දර්ශකයේ ඇති ලිපිගොනු සහිත Git ගබඩාවක් ඇත. මම ලිපිගොනු කිහිපයක වෙනස්කම් සිදු කරමි, Git විවෘත කර මෙම ලිපිගොනු මගේ වේදිකා ප්‍රදේශයට "git add" සමඟ එක් කරන්න.

ප්‍රශ්නය: මම එම ලිපිගොනු වලින් එකක් වේදිකා ප්‍රදේශයෙන් ඉවත් කර දර්ශකයෙන් ඉවත් නොකරන්නේ කෙසේද? නැතහොත් ගොනුවේම වෙනස්කම් අහෝසි කරන්නේ කෙසේද?


42
අල්පය ප්රදේශයේ වන නිසා සමහර විට ඔබ ඔබ අදහස් හරියටම පැහැදිලි විය හැකි, එම දර්ශකය?
සීබී බේලි


Answers:


1918

මම ප්‍රශ්නය නිවැරදිව තේරුම් ගත්තා නම්, ඔබට අවශ්‍ය වන්නේ git addඑම ගොනුව සඳහා කළ දේ "අහෝසි කිරීමට" ය .

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

git reset HEAD -- <file>

ඔබට වේදිකා ප්‍රදේශයෙන් සම්පූර්ණ ඩිරෙක්ටරියක් (ෆෝල්ඩරයක්) ඉවත් කිරීමට අවශ්‍ය නම් භාවිතා කරන්න

git reset HEAD -- <directoryName>

ඔබගේ වෙනස් කිරීම් තබා ඇත. ඔබ ධාවනය කරන git statusවිට ගොනුව යළිත් වරක් වෙනස් කරන ලද නමුත් තවමත් වේදිකාගත වී නැති බව පෙන්වනු ඇත.

විස්තර සඳහා git resetman පිටුව බලන්න.


41
ස්තූතියි ... එය වේදිකාගත කරන ලද ලිපිගොනු වලට ඉහළින් සඳහන් කර ඇති බව මම දුටුවෙමි. අනුමාන කරන්න මම මෙතරම් කාලයක් එම තිරය දෙස බලා සිටිමි.
PHLAK

2
මෙය මා විසින් කරන ලද සෑම උපදෙසකටම පටහැනිව මගේ සියලු වෙනස්කම් අස්ථිර කරයි (මිනිසා පිටු, මෙහි, මිතුරන්, සහ ඇ). මම යම් දවසක කල්පනා කරමින් සිටින්නේ එය ප්‍රචාරය කළ දේ කිරීමට යන නමුත් නැත.
rektide

6
ගබඩාවට කිසිදු කැපවීමක් සිදු නොවූ විට ලිපිගොනු වේදිකාවෙන් ඉවත් කිරීමට කෙසේ හෝ තිබේද?
ජැරඩ් ෆෝසයිත්

3
මම දිගටම මෙම ප්‍රශ්නයට පැමිණෙමින් සිටිමි. මට එය තවත් වාර ගණනක් ඉදිරිපත් කළ නොහැක්කේ ඇයි? :)
Puse

3
@ ජරෙඩ් ෆෝසයිත් වේදිකාවෙන් කිසි විටෙකත් නොකළ ගොනුවක් ඉවත් කිරීමට git rm --cached FILEවෙනත් පිළිතුරකින් යෝජනා කළ පරිදි විධානය භාවිතා කරන්න .
chmike

152
git rm --cached FILE

,

git rm -r --cached CVS */CVS

28
ඇත්ත, නමුත් git resetමෙහි භාවිතා කිරීම වඩා හොඳ යැයි මම සිතමි, මන්ද ඔබ --chached විකල්පය අතහැර දමා ඉක්මනින් git rmවිධානය භාවිතා කර දුක් වනු ඇත :-) git resetඔබ ආරක්ෂිත පැත්තේ සිටින විට, ඔබට “යම් විකල්පයක්” එක් කිරීමට අමතක වුවහොත් එය සිදුවනු ඇත වෙනස තබා ගන්න එවිට එය දෛනික භාවිතය සඳහා "ආරක්ෂිත" වේ (මම මේ කතා කරන්නේ git reset --hard).
කොන්රාඩ් 'ktoso' මලව්ස්කි

20
ඔබට පෙර කොමිස් නොමැති නම් මෙම ක්‍රමය ප්‍රයෝජනවත් වේ.
SomeKittens

2
git rm --cached FILEගොනුව මකා නොදමමින් වැඩ කරන ගස සාදයි. අහෝසි කිරීම පිළිබඳ ප්‍රශ්නයට වඩා මෙය වෙනස් ය git add.
සාම්පෝ ස්මෝලාන්ඩර්

1
ඔබ වැඩ කරන ගසෙන් ගොනුව මකා දමා ඇත්නම් මෙම පිළිතුර දෝෂයක් ඇති කරයි.
සැමුවෙල් රොබට්

3
git rm --cachedගොනුව දර්ශකයෙන් ඉවත් කිරීමට හේතු වනු ඇත, එනම් ගොනුව හඳුනා නොගත් ගොනුවක් බවට පත්වේ . OP ට අවශ්‍ය වන්නේ මෙය යැයි මම නොසිතමි. කරුණාකර මෙහි අදාළ නූලක් බලන්න: stackoverflow.com/questions/45047810/…
smwikipedia

89

git reset <file>

ඔබට පෙර කළ යුතු දේ තිබුණත් නැතත් ක්‍රියා කරයි.


53

එබැවින්, ටිම් හෙනිගන්ගේ පිළිතුරට සුළු වෙනස් කිරීමක්: ඔබ භාවිතා කළ යුතුය - ගොනුවේ නමට පෙර. එය මේ ආකාරයට වනු ඇත:

git reset HEAD -- <file>

6
කරන්නේ කුමක්ද --සහ එය එකතු කරන්නේ ඇයි? මම git reset HEAD <file>එය කළ අතර එය ක්‍රියාත්මක විය.
පාවුලෝ

16
--බෙදුම්කරුවෙක් වගේ. ලිපිගොනු නාමය සාම්ප්‍රදායික නොවන නම් උදා ( -fහෝ master) git එය ගොනු නාමය වෙනුවට විධාන රේඛා තර්කය හෝ ශාඛා නාමය ලෙස අර්ථ නිරූපණය කරයි. මෙතන බලන්න
ඇන්ඩෲ

3
මෙය මට වැඩ කළේ නැති විධානයක් නොමැතිව - එම ගොනුව සඳහා පෙර කොමිස් නොමැති නිසා නොවේ. ස්තූතියි.
මතෙ

18
git reset filename.txt

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


6

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

git reset -p

හෝ

git reset -p <file_name>

මෙම විධානය මූලික වශයෙන් ප්‍රතිලෝම වේ git add -p: එය ඉවත් කරනු ලබන්නේ තෝරාගත් වෙනස්කම් වේදිකා ප්‍රදේශයෙන් පමණි. මම වැරදීමකින් එකතු කළ දෙයක් "ඉවත් නොකිරීම" තුළ එය අතිශයින්ම ප්‍රයෝජනවත් බව මට පෙනේ.


4

ඔබට යම් රටාවක් අනුගමනය කරමින් ගොනු ඉවත් කිරීමට අවශ්‍ය නම් සහ ඔබ භාවිතා කරන්නේ නම් git rm --cached , ඔබට ගොනු-ග්ලෝබ් රටා ද භාවිතා කළ හැකිය.

මෙහි බලන්න .


2

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

  • තනි ගොනුවකට බලපාන්න

  • වේදිකා ප්‍රදේශයෙන් ගොනුව ඉවත් කරන්න

  • තනි ගොනුවක් දර්ශකයෙන් ඉවත් නොකරන්න

  • වෙනස අහෝසි නොකරන්න

සහ විසඳුම වේ

git reset HEAD file_name.ext

හෝ

git reset HEAD path/to/file/file_name.ext

2

ඔබ එසේ කළ විට git status, වේදිකා ගත කරන්නේ කෙසේදැයි Git ඔබට කියයි:

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

ඒ නිසා git reset HEAD <file>මා වෙනුවෙන් වැඩ කළ අතර වෙනස්කම් ස්පර්ශ නොවීය.


2

@CB බේලි අදහස් දැක්වූ පරිදි, ඔබ බොහෝ විට දර්ශක සංකල්පය සමඟ ව්‍යාකූල වී ඇතැයි මම සිතමි .

වේදිකා ප්‍රදේශය යනු දර්ශකයයි.

වේදිකාගත කිරීමේ නාමාවලිය සහ දර්ශකය එකම දේ ලෙස සලකා බැලිය හැකිය .
ඉතින්, im ටිම් හෙනිගන්ගේ පිළිතුර මෙන් , මම අනුමාන කරමි:

ඔබට අවශ්‍ය වන්නේ git addඑම ගොනුව සඳහා කළ දේ "අහෝසි කිරීමට" ය .



මෙන්න මගේ පිළිතුර:

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

git reset HEAD <file>

සහ

git rm --cached <file>

නමුත් වෙනස කුමක්ද?

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

git status

මෙම මෙහෙයුමෙන් පසුව, ඔබ මෙය දකිනු ඇත:

        deleted:    <file>

එය ගොනුව වේදිකා නාමාවලියෙන් ඉවත් කිරීම පිළිබඳ වාර්තාවකි . ඔබට එම වාර්තාව තබා ගැනීමට අවශ්‍ය නැතිනම් ගොනුවක පෙර අදියර මෙහෙයුමක් අහෝසි කිරීමට අවශ්‍ය නම්, git reset HEAD <file>ඒ වෙනුවට භාවිතා කරන්න.


-------- පිළිතුරේ අවසානය --------

PS: සඳහන් කර ඇති පිළිතුරු කිහිපයක් මම දැක ඇත්තෙමි.

git checkout -- <file>

මෙම විධානය ගොනු කර ඇත විට තත්ත්වය සඳහා නිරත , නමුත් ගොනුව තුල වෙනස් කර ඇත වැඩකරන බහලුම තුල ගොනු නැවත මෙම මෙහෙයුම භාවිතා එය නිරත වීමෙන් පසු, බහලුම වැඩ සිට වේදිකාගත බහලුම . වෙනත් වචන වලින් කිවහොත්, මෙම මෙහෙයුමෙන් පසුව, ඔබගේ වැඩ කරන නාමාවලියෙහි වෙනස්කම් සිදු වේ , ඔබේ වේදිකා නාමාවලිය නොවේ .


2

අනුවාදයෙන් පසුව 2.23, Git විසින් git restoreඔබට එය කිරීමට භාවිතා කළ හැකි විධානය හඳුන්වා දී ඇත. නිල ලියකියවිලි උපුටා දක්වමින්:

ප්‍රතිස්ථාපන ප්‍රභවයකින් සමහර අන්තර්ගතයන් සමඟ වැඩ කරන ගසෙහි නිශ්චිත මාර්ග ප්‍රතිස්ථාපනය කරන්න. මාර්ගයක් ලුහුබඳින නමුත් ප්‍රතිස්ථාපන ප්‍රභවයේ නොපවතී නම්, එය ප්‍රභවයට ගැලපෙන පරිදි ඉවත් කරනු ලැබේ.

දර්ශකයේ අන්තර්ගතය යථා තත්වයට පත් කිරීමට --stagedහෝ වැඩ කරන ගස සහ දර්ශකය යන දෙකම යථා තත්වයට පත් කිරීමට ද විධානය භාවිතා කළ හැකිය --staged --worktree.

එබැවින් ඔබට git restore --staged <path>ගොනුව ආයාචනා කර වේදිකා ගත කළ හැකි අතර ඔබ කළ වෙනස්කම් තබා ගන්න. ගොනුව වේදිකාගත නොකළේ නම් ඔබ විසින් සිදු කරන ලද සියළු වෙනස්කම් ඔබට අහිමි වන බව මතක තබා ගන්න.


2

Git හි නවතම සංස්කරණ සඳහා ඇත git restore --staged <file> .

මම git statusGit අනුවාදය සමඟ කරන 2.26.2.windows.1විට එය අස්ථායි කිරීම සඳහා ද නිර්දේශ කෙරේ:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

( මෙම ලිපියෙන් පෙන්නුම් කරන්නේ, පෙර සංස්කරණ git reset HEADවලදී මෙම අවස්ථාවේදී නිර්දේශ කර ඇති බවයි)

මා අතිශයින් නිර්දේශ කරන්න පුළුවන් මේ අතර වෙනස්කම් පැහැදිලි පශ්චාත් git revert, git restoreසහ git resetද සඳහා අතිරේක පරාමිතියන් git restore.


1

ඔබ ලුහුබැඳ ඇති බොහෝ ලිපිගොනු වල වෙනස්කම් සිදු කළත් ඒවායින් කිහිපයක් පමණක් වේදිකා ගත කිරීමට අවශ්‍ය නම්, a

git add .

සෑම විටම වාසිදායක නොවේ (හෝ නිර්දේශිත) - එය ලුහුබැඳ ඇති සියලුම ලිපිගොනු (සමහර අවස්ථා ඔබට පමණක් වෙනස් කර තබා ගැනීමට අවශ්‍ය වන අතර ඒවා දුරස්ථ ගබඩාවට යොමු කිරීමට අවශ්‍ය නොවන).

පොකුරක් කිරීම වඩාත් සුදුසු නොවේ

git add path/to/file1 path/to/file2

ඔබට බොහෝ කැදැලි නාමාවලි තිබේ නම් (බොහෝ ව්‍යාපෘති වල තත්වය එයයි) - කරදරයක් වේ

Git GUI ප්‍රයෝජනවත් වන්නේ එවිටය (බොහෝ විට මම එය භාවිතා කරන කාලය පමණි). Git GUI විවෘත කරන්න, එය වේදිකාගත කර ඇති සහ වේදිකාගත නොකළ ගොනු කොටස් පෙන්වයි. ඔබට වේදිකා ගත කිරීමට අවශ්‍ය වේදිකා කොටසේ සිට ගොනු තෝරන්න සහ ඔබන්න

Ctrl+U (කවුළු සඳහා)

ඒවා වේදිකා ගත කිරීමට.


-1

ඔබ ගොනුවේ නාමාවලියෙහි සිටිය යුතු අතර පසුව ටර්මිනලයට ටයිප් කරන්න

git reset HEAD .

උපකල්පනය නම් ඔබට එක් ගොනුවක් පමණක් නැවත සැකසිය යුතුය.


-1

මගේ නියැදිය:

$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

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

    modified:   ShopBack/Source/Date+Extension.swift
    modified:   ShopBack/Source/InboxData.swift
    modified:   ShopBack/en.lproj/Localizable.strings

ඔබ දකින පරිදි

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


-10

git checkout -- <file>

වේදිකා ප්‍රදේශයෙන් ලිපිගොනු ඉවත් කිරීමට එය හොඳින් ක්‍රියා කරයි


4
පහත සඳහන් පරිදි, මෙය ගොනුවේ වෙනස්කම් ආපසු හරවයි, එය OP යන්නට වඩා පියවරක් ඉදිරියට යයි.
stolli

git rm flie.txt --cached
ජුවාන් රමිරෙස්
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.