Git හි අස්ථායී වෙනස්කම් ඉවතලන්නේ කෙසේද?


4821

දර්ශකයේ නොමැති මගේ වැඩ කරන පිටපතෙහි වෙනස්කම් ඉවතලන්නේ කෙසේද?


9
git-cleanවැඩ කරන ගසෙන් ඉවත් නොකළ ගොනු පමණක් ඉවත් කරයි git-scm.com/docs/git-clean
Yega

24
ඉහත අසෙනාර්ගේ අදහස පැහැදිලි කිරීම git-clean -dfභයානක විය හැකිය. එමඟින් දේශීය හඳුනා නොගත් ලිපිගොනු මකා දමනු ඇත (උදා. .Gitignore මගින් ආවරණය කර ඇත) පහත සියල්ල හොඳින් කියවා git checkout සලකා බලන්න. ඒ වෙනුවට
jacanterbury

15
'git clean -df' අවවාද කරන්න! මම එය උත්සාහ කර යථා තත්වයට පත් කළ නොහැකි යතුරු ෆෝල්ඩර නැති කර ගත්තා ... අපොයි!
ගේබ් කර්කනිස්

46
පහර දීම git statusඑය කරන්නේ කෙසේද යන්න පිළිබඳ යෝජනාවක් ලබා දෙයි! git checkout -- .
පාවුලෝ

4
Au පවුලෝ: 2019 ජූලි මාසයේ සිට ඇරඹී git statusයෝජනාව ලබා දෙයි : git restore. git restoreහරියටම මේ සඳහා නව විධානයකි. මගේ 2019 යාවත්කාලීන කිරීම බලන්න .
prosoitos

Answers:


2687

තවත් ඉක්මන් ක්‍රමයක් නම්:

git stash save --keep-index --include-untracked

ඔබට ඒ --include-untrackedගැන ගැඹුරින් දැන ගැනීමට අවශ්‍ය නැතිනම් ඇතුළත් කිරීමට අවශ්‍ය නොවේ.

ඊට පසු, git stash dropඔබ කැමති නම් විධානයකින් එම තොගය අතහැර දැමිය හැකිය .


122
ඒ ගැන හොඳින් දැන ගැනීමට නම් ඔබටත් අවශ්‍ය වනු --include-untrackedඇත.
ටී. ජේ ක්‍රෝඩර්

9
Ar කරීම්සාමිර්: ප්‍රශ්නය විශේෂයෙන් දර්ශකයේ නොමැති වෙනස්කම් ගැන අසයි . මෙම git resetවිධානය ද දර්ශකය වෙනස් මාරු කරනු ලබයි.
ග්‍රෙග් හෙව්ගිල්

146
git checkout -. වඩා වේගවත්
ෆ්‍රෑන්ක්

38
මේ කිසිවෙකුත් git stashහෝ ඕනෑම විවිධ git checkoutකැමැත්ත unstaged දමයි ඉවතලන්න. ප්රතිදානය අනුව git status, මෙහි සත්ය නිවැරදි පිළිතුර යම් රසයක් වේgit reset HEAD
ක්රිස් Warth

127
මෙය තොග ගබඩාව දූෂණය කරයි. git checkout -- .එක විධානයකින් පමණක් කාර්යය කරයි.
ෆෙලිපේ ටොනෙලෝ

5342

වත්මන් වැඩ කරන නාමාවලි භාවිතයේ ඇති සියලුම අස්ථායී ගොනු සඳහා:

git checkout -- .

විශේෂිත ගොනු භාවිතය සඳහා:

git checkout -- path/to/file/to/revert

--මෙහි තර්ක විතර්ක ඉවත් කිරීමට .


117
මෙය git කැනොනිකල් ක්‍රමය බව පෙනේ. එනම් ඔබ ටයිප් කළහොත් කළ යුතු දේ හරියටම git ඔබට කියයිgit status
ABMagil

27
හඳුනා නොගත් ලිපිගොනු තිබේ නම් ක්‍රියා නොකරයි. Git පවසයි error: The following untracked working tree files would be overwritten by checkout: ....
මයිකල් ඉල්ස්

92
නවක ප්‍රශ්නය, “git checkout -” යනු කුමක්ද? අර්ථයෙන් අදහස් කරන්නේ?
කයිඩ්

120
In නින්ජැක් git checkout -- .යන්නෙන් අදහස් git checkout .කරන්නේ ඔබ ශාඛා නාමය සඳහන් නොකිරීම යන කාරණය පිළිබඳව ඔබ පැහැදිළිවම පැවසීමයි . ඔවුන් දෙදෙනාම පවසන්නේ මා දැනට සිටින ශාඛාවේ HEAD අනුවාදය පරීක්ෂා කර බලන්න. හෝ './'. ඔබ git checkout branch-name directory-or-file-nameපොදුවේ කරන්නේ නම් , ඔබට directory-or-file-nameශාඛාවේ HEAD අනුවාදය ලැබේ branch-name.
akgill

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

1900

සම්පූර්ණ විසඳුම ලෙස පෙනේ:

git clean -df
git checkout -- .

git cleanඉවත් නොකළ සියලුම ලිපිගොනු ඉවත් කරයි ( අනතුරු ඇඟවීම : .gitignore හි සෘජුවම සඳහන් කර ඇති නොසලකා හරින ලද ගොනු මකා නොදමන අතර, එය ෆෝල්ඩරවල ඇති නොසලකා හරින ලද ගොනු මකා දැමිය හැක ) සහ git checkoutඅස්ථායී සියළු වෙනස්කම් ඉවත් කරයි.


116
අනෙක් පිළිතුරු දෙක ඇත්ත වශයෙන්ම ක්‍රියාත්මක නොවේ, මෙය ක්‍රියාත්මක විය.
ජෝන් හන්ට්

18
valdval මෙය පළමු විධානය මඟින් ඉවත් නොකළ ලිපිගොනු ඉවත් කළ අතර දෙවැන්න අස්ථායී වෙනස් කිරීම් (සුචිගත කරන ලද ලිපිගොනු) ඉවත් කළේය. එබැවින් ඔබට කිසිදු වේදිකාගත වෙනසක් සිදු නොවූයේ නම්, මෙය අන්තිම git reset --hard
බැඳීම

3
හඳුනා නොගත් නාමාවලිය git clone නම් -dff භාවිතා කරන්න .
accya

87
Git clean -df ධාවනය කිරීමට ප්‍රවේශම් වන්න. එය කරන්නේ කුමක්දැයි ඔබට වැටහෙන්නේ නැත්නම්, ඔබ තබා ගැනීමට අදහස් කරන ලිපිගොනු මකා දැමිය හැකිය, එනම් robots.txt, උඩුගත කරන ලද ගොනු යනාදිය.
ctlockey

40
Loctlockey පැවසූ පරිදි, පළමු විධානය මඟින් නොසලකා හරින ලද ගොනු වලින් පමණක් ඩිරෙක්ටරි මකා දමනු ඇත ... මගේ ව්‍යාපෘතියේ වින්‍යාස ගොනු රාශියක් නැති විය :( ප්‍රවේශම් වන්න.
මැක්සිම් ලෝරන්ට්

326

මෙය වත්මන් නාමාවලිය සඳහා වත්මන් දර්ශකය පරික්ෂා කරයි, වත්මන් නාමාවලියෙන් ලිපිගොනු වල සියලුම වෙනස්කම් පහළට විසි කරයි.

git checkout .

හෝ මෙය දර්ශකයෙන් සියලුම ලිපිගොනු පරීක්ෂා කරමින් වැඩ කරන ගස් ලිපිගොනු නැවත ලියයි.

git checkout-index -a -f

28
හායි, git checkout .සහ අතර ඇති වෙනස git checkout -- .කුමක්ද?
ඉවාන් හු

5
An ඉවාන්: මෙම නඩුවේ වෙනසක් නැත.
රොබට් සීමර්

10
O රොබට් සීමර් සහ පොදුවේ?
RJFalconer

2
V ඊවාන්: මෙම ප්‍රශ්නය ඇසීමට නරක ස්ථානයක්. - එය OP හි ප්‍රශ්නයට සම්බන්ධ නැති අතර මෙහි පිළිතුරට සම්බන්ධ නැත.
රොබට් සීමර්

14
+1 මෙය නිවැරදි පිළිතුරයි, මන්දයත් සමහර ලිපිගොනු වේදිකාගත කර ඇති සහ වේදිකාගත නොකළ වෙනස්කම් ඇති අවස්ථාව නිවැරදිව හසුරුවයි . මෙම විසඳුම අස්ථායී වෙනස්කම් අනාවරණය කරන බව සලකන්න; ඔබට ඒවා රඳවා ගැනීමට අවශ්‍ය නම්, ඔබ භාවිතා කළ යුත්තේ g ග්‍රෙග්-හෙව්ගිල්ගේ පිළිතුරයි git stash save --keep-index.
රුබ්බාර්බ්

248
git clean -df

වත්මන් නාමාවලියෙන් පටන් ගෙන අනුවාද පාලනයට යටත් නොවන ගොනු නැවත නැවත ඉවත් කිරීමෙන් වැඩ කරන ගස පිරිසිදු කරයි.

-d: සොයා නොගත් ලිපිගොනු වලට අමතරව හඳුනා නොගත් නාමාවලි ඉවත් කරන්න

-f: බලය ( clean.requireForceසැකසුම අනුව අවශ්‍ය නොවනු ඇත )

git help cleanඅත්පොත බැලීමට දුවන්න


මෙම පිළිතුරට සියලු ඡන්ද නොමැති ඇයි? 2011 දී නැවත පිළිතුරු දුන් අතර තවමත් නිවැරදි ය.
ඉයුජින් බ්‍රැජිනට්ස්

106

මගේ ප්‍රියතමය

git checkout -p

එමඟින් ඔබට කුට්ටි තෝරා ගැනීමට හැකිය.

මෙයද බලන්න:

git add -p

9
සැබෑ වෙනස ඉවතලෑමට පෙර එය දැකීමේ හැකියාවට මම කැමතියි.
පෙන්ගෙ ජෙන්ග්

මම භාවිතා කරන්නේ මෙයයි. git checkout -p ඉන්පසු සියල්ල පිළිගැනීමට "a".
මැටිස්

2
මම කවදාවත් හිතුවේ නැහැ. එමඟින් -pහොඳ ආරක්ෂිත තට්ටුවක් එක් කරයි. git clean -dඇත්ත වශයෙන්ම OP ට පිළිතුරු දීමට එය ඒකාබද්ධ කරන්න .
ස්ටීවන් හෙනිංසන්

96

මා භාවිතා කරන විකල්ප විකල්ප සංයෝජනය කිසිදු පිළිතුරක් යෝජනා නොකරන බැවින්, මෙන්න එයයි:

git clean -dfx
git checkout .

භාවිතා කළ git cleanවිකල්ප සඳහා මාර්ගගත උපකාරක පා is ය මෙයයි :

-d

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

-f

මෙම Git වින්යාස විචල්ය නම් clean.requireForceකිරීමට පිහිටුවා නැත falseGit, ලබා දෙන තුරු පිරිසිදු delete ගොනු හෝ නාමාවලි ප්රතික්ෂේප කරනු -f, -nහෝ -i. .gitතත්පරයක් -fලබා නොදුනහොත් උප බහලුම හෝ ගොනුව තුළ ඇති නාමාවලි මකා දැමීම Git විසින් ප්‍රතික්ෂේප කරනු ඇත .

-x

.gitignore(එක් නාමාවලියකට) වෙතින් නොසලකා හැරීමේ නීති භාවිතා නොකරන්න $GIT_DIR/info/exclude, නමුත් -eවිකල්ප සමඟ ලබා දී ඇති නොසලකා හැරීමේ නීති තවමත් භාවිතා කරන්න . නිමැවුම් නිෂ්පාදන ඇතුළුව සියලුම නොකැඩූ ගොනු ඉවත් කිරීමට මෙය ඉඩ දෙයි. git resetපිරිසිදු ගොඩනැඟිල්ලක් පරීක්ෂා කිරීම සඳහා පෞරාණික වැඩ කරන නාමාවලියක් නිර්මාණය කිරීම සඳහා මෙය භාවිතා කළ හැකිය (සමහරවිට සමගාමීව ).

එසේම, git checkout .repo හි මුලෙහි කළ යුතුය.


මෙම විසඳුම සඳහා +1. "Git checkout. Repo හි මුලදී කළ යුතුය" යන ඔබේ ප්‍රකාශය සම්බන්ධයෙන්, සමහර විට අපට ඒ git reset --hardවෙනුවට කළ හැකි යැයි ඔබ සඳහන් කළ හැකිද? (එය ඇත්ත වශයෙන්ම සමාන git reset --hard HEADවන අතර වත්මන් නාමාවලිය
කුමක් වුවත්

2
පළමු විධානය සම්බන්ධයෙන් git clean -dfx, මෙන්න මම එය ක්‍රියාත්මක කිරීමට පෙර ආරක්ෂිත පැත්තේ සිටීමට භාවිතා කරන ඉඟියක්: ඉවත් කිරීමට git clean -d -x -nපෙර ගොනු ලැයිස්තුව පෙන්වීමට පෙර ධාවනය කරන්න , පසුව ධාවනය කිරීමෙන් ක්‍රියාකාරිත්වය තහවුරු කරන්න git clean -d -x -f(මම තර්කය ඉදිරිපත් කළෙමි -n, resp. -fඅවසානයේදී එය පර්යන්තයකින් ඉක්මනින් වෙනස් කිරීමට හැකි වනු ඇත)
ErikMD

5
මෙය ආපසු හැරවිය නොහැකි බව ඉක්මන් සටහනක් තබන්න, ඔබ සතුව ලිපිගොනු තිබේ .gitignoreනම් ඒවා නැති වේ. එබැවින් මීට පෙර ඔබේ ව්‍යාපෘතිය උපස්ථ කිරීම ගැන සලකා බලන්න.
රොබ්

69

ඔබ හුදෙක් පවතින ලිපිගොනු වල වෙනස්කම් ඉවත් කිරීමට කැමති නම් , භාවිතා කරන්න checkout( මෙහි ලේඛනගත කර ඇත ).

git checkout -- .
  • කිසිදු ශාඛාවක් නිශ්චිතව දක්වා නැත, එබැවින් එය වත්මන් ශාඛාව පරීක්ෂා කරයි.
  • ද්විත්ව හයිපනය ( --) Git ට පවසන්නේ පහත දැක්වෙන දේ එහි දෙවන තර්කය (මාර්ගය) ලෙස ගත යුතු බවයි, ඔබ ශාඛාවක පිරිවිතරයන් මඟ හැර ඇති බවයි.
  • කාල සීමාව ( .) මඟින් සියලු මාර්ග දක්වයි.

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

git clean -i 
  • මෙම -iවිකල්පය අන්තර් ක්රියාකාරී ආරම්භනය cleanවැරදි මකාදැමීම් වැළැක්වීම සඳහා.
  • ඉක්මණින් ක්‍රියාත්මක කිරීම සඳහා වෙනත් විකල්ප අතලොස්සක් තිබේ; ප්‍රලේඛනය බලන්න.

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

git stash
  • පසුකාලීනව ප්‍රවේශ වීම සඳහා සියලු වෙනස්කම් Git's Stash වෙත ගෙන යනු ලැබේ.
  • වඩාත් සූක්ෂම ලෙස ගබඩා කිරීම සඳහා විකල්ප අතලොස්සක් තිබේ; ප්‍රලේඛනය බලන්න.

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

පැහැදිලි කිරීම සඳහා මෙය ඉහළට ඔසවා ඇත :)
ආචී ජී. ක්වීනෝන්ස්

62

කුමන විධානයක් භාවිතා කළ යුතුද යන්න පැහැදිලි කිරීමට මෙම ලිපිය මට ප්‍රයෝජනවත් විය: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

යුවළකට වෙනස් අවස්ථා තිබේ:

  1. ඔබ ගොනුව වේදිකාගත කර නොමැති නම්, ඔබ භාවිතා කරයි git checkout. පිටවීම "දර්ශකයේ අනුවාදයට ගැලපෙන පරිදි වැඩ කරන ගසෙහි ගොනු යාවත්කාලීන කරයි". ලිපිගොනු වේදිකාගත කර නොමැති නම් (දර්ශකයට එකතු කරන ලදි) ... මෙම විධානය මඟින් මූලිකවම ඔබගේ අවසන් කැපවීම වූ ලිපිගොනු නැවත ලබා දෙනු ඇත.

    git checkout -- foo.txt

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

    git reset -- foo.txt

git stashඑය ටිකක් අඩු භයානක බැවින් භාවිතය ජනප්‍රිය තේරීමක් යැයි මම සැක කරමි . Git reset භාවිතා කරන විට ඔබ අහම්බෙන් ඕනෑවට වඩා ඉවතට විසිවුවහොත් ඔබට සෑම විටම එය වෙත ආපසු යා හැකිය. නැවත සැකසීම පෙරනිමියෙන් පුනරාවර්තනය වේ.

වැඩිදුර උපදෙස් සඳහා ඉහත ලිපිය බලන්න.


60

මෙය කිරීමට ඇති පහසුම ක්‍රමය නම් මෙම විධානය භාවිතා කිරීමයි:

වැඩ කරන නාමාවලියෙහි වෙනස්කම් බැහැර කිරීමට මෙම විධානය භාවිතා කරයි -

git checkout -- .

https://git-scm.com/docs/git-checkout

Git විධානය තුළ, භාවිතයට නොගත් ලිපිගොනු ගබඩා කිරීම සිදු කරන්නේ:

git stash -u

http://git-scm.com/docs/git-stash


19
දෙවරක් මම මෙහි පැමිණ, මෙම පිළිතුර කියවා, .අවසානයේ දී අමතක කළෙමි . මට අනාගතය සඳහා: කාලය අත්‍යවශ්‍යයි !
bejado

2
උප නාමාවලියක ඇති සියලුම දේශීය වෙනස්කම් ඉවත් කිරීමට මට අවශ්‍ය විය. මෙම පිළිතුර බොහෝ සෙයින් උපකාරී විය, ස්තූතියි
Ally

2
විධාන දෙක කරන්නේ කුමක්දැයි කරුණාකර විස්තර කරන්න. පැහැදිලි කිරීමක් නොමැති වීම ඇත්තෙන්ම උදව්වක් නොවේ.
ක්‍රිස් කෙනඩි

2
විශිෂ්ටයි. පිටවීම එක් විධානයකින් වඩාත්ම ජනප්‍රිය තැනැත්තා දෙකින් කරන දේ කරයි. git clean -fdදර්ශකයේ නොමැති ගොනු පිරිසිදු කිරීම සඳහා ද පසු විපරම් කළ හැකිය .
oligofren

49

අස්ථායී වෙනස්කම් තබා ගැනීමට ඔබ අකමැති නම් (විශේෂයෙන් වේදිකාගත කරන ලද වෙනස්කම් නව ලිපිගොනු නම්), මම මෙය පහසු බව සොයා ගතිමි:

git diff | git apply --reverse

44

git checkout -f


man git-checkout:

-f, --force

ශාඛා මාරු කිරීමේදී, දර්ශකය හෝ වැඩ කරන ගස HEAD ට වඩා වෙනස් වුවද ඉදිරියට යන්න. දේශීය වෙනස්කම් ඉවත දැමීමට මෙය භාවිතා කරයි.

දර්ශකයෙන් මාර්ග පරීක්ෂා කරන විට, නොකැඩූ ඇතුළත් කිරීම් මත අසමත් නොවන්න; ඒ වෙනුවට, නොකැඩූ ඇතුළත් කිරීම් නොසලකා හරිනු ලැබේ.


2
මෙය දර්ශකයේ වෙනස්කම් ඉවතලනු ඇත !! (OP විසින් ඔවුන්ව එලෙසම අත්හැර
දැමිය

44

ඔබ git තත්ත්වය ටයිප් කරන විට, (වැඩ කරන නාමාවලියෙහි වෙනස්කම් ඉවතලීමට "git checkout - ..." භාවිතා කරන්න) පෙන්වනු ලැබේ.

උදා git checkout -- .


1
සියලු ලිපිගොනු ඉක්මනින් ඉවත දැමීමට එය උදව් නොකරන නිසා පහත් කොට සලකනු ලැබේ. තිත් තුනෙන් පෙන්නුම් කරන්නේ ඔබ සියලු ලිපිගොනු ලැයිස්තු ගත කළ යුතු බවයි. ඔබට එකවර ටොන් ගණනක් ඉවත දැමීමට අවශ්‍ය නම් මෙය විශේෂයෙන් නරක ය, උදා. ඔබ තබා ගැනීමට කැමති සියලු වෙනස් කිරීම් සිදු කිරීමෙන් පසු විශාල ඒකාබද්ධ කිරීමක් අතරතුර
usr-local-ΕΨΗΕΛΩΝ

2
ඇත්ත වශයෙන්ම, නිවැරදි විධානය වන්නේ "git checkout -." තනි තිතක්. අදහස් දැක්වීමේදී, තිත් තුන ව්‍යාකරණමය දෙයක් විය, වෙනත් විකල්ප බොහොමයක් භාවිතා කළ හැකි බව
දැක්වීමට

39

ඔබට git stash භාවිතා කළ හැකිය - යමක් වැරදුනහොත්, ඔබට තවමත් තොගයෙන් ආපසු යා හැකිය. මෙහි ඇති වෙනත් පිළිතුරකට සමානය, නමුත් මෙයද සියලු අස්ථායී ලිපිගොනු ඉවත් කරයි.

git add .
git stash

සෑම දෙයක්ම හරිදැයි ඔබ පරීක්ෂා කරන්නේ නම්, තොගය ඉවතට විසි කරන්න:

git stash drop

සමඟ බිලාල් මැක්සූඩ්ගේ පිළිතුර git clean ද මා වෙනුවෙන් වැඩ කළ නමුත්, තොගය සමඟ මට වැඩි පාලනයක් ඇත - මම අහම්බෙන් sth කළහොත්, මට තවමත් මගේ වෙනස්කම් ලබා ගත හැකිය

යාවත්කාලීන කරන්න

මම හිතන්නේ තවත් වෙනස්කම් 1 ක් ඇත (මෙය මීට පෙර මා වෙනුවෙන් වැඩ කළේ ඇයිදැයි නොදනී):

git add . -A වෙනුවට git add .

-Aඉවත් කළ ලිපිගොනු නොමැතිව වේදිකා ගත නොවේ


39

2019 යාවත්කාලීන කිරීම:

2019 ජූලි මාසයේ සිට , නව විධානයක් ඇත, එය හරියටම මෙය කරයි:git restore .

තුළ git status, දැන් Git මෙම විධානය වෙනුවට නිර්දේශ කරයිgit checkout භාවිතා කිරීමයි.

මෙම විධානය මඟින් වැඩ කරන ගස නිශ්චිත කැපවීමකට හෝ දර්ශකයේ අන්තර්ගතය යථා තත්වයට පත් කිරීමට ද භාවිතා කළ හැකි අතර, පෙරනිමියෙන්, වැඩ කරන ගස දර්ශකයේ ඇති තත්වයට යථා තත්වයට පත් කරනු ලැබේ (මෙහි අසනු ලබන දේ).

එබැවින්, පාස්පෙක් එකකට ගැලපෙන ලිපිගොනු යථා තත්වයට පත් කිරීම සඳහා (ඒවායේ අස්ථායී වෙනස්කම් ඉවත් කිරීම), ඔබ කරන්නේ:

git restore <pathspec>

උදාහරණයක් ලෙස, වත්මන් නාමාවලියෙහි අස්ථායි වෙනස්කම් සියල්ල යථා තත්වයට පත් කිරීම සඳහා, ඔබට ක්‍රියාත්මක කළ හැකිය:

git restore .

ඔබ මෙය ව්‍යාපෘතියේ මුල සිට ක්‍රියාත්මක කරන්නේ නම්, එය සමස්ත ගබඩාවේ අස්ථායි වෙනස්කම් සියල්ලම යථා තත්වයට පත් කරනු ඇත.

සමග මෙන් සටහන, ඒ git checkout -- .(Mariusz Nowak විසින් උල් පිටතට ලෙස), ගොනු කිරීමට මෙම ඉවත ලන්න වෙනස්කම් පමණක් වනු ඇත Git මගින් සොයා බැලුනු හා ඕනෑම නව untracked ගොනු ඉවතලන්න නැහැ. අළුත් නොකැඩූ ලිපිගොනු ඇතුළුව අස්ථායි වෙනස්කම් ඉවත් කිරීමට ඔබට අවශ්‍ය නම්, ඔබට අතිරේකව ධාවනය කළ හැකිය:

git clean -df

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


සටහන git restore: මෙය නව විධානයක් බැවින් එහි man පිටුව අනතුරු ඇඟවීමක් කරයි:

මෙම විධානය පර්යේෂණාත්මක ය. හැසිරීම වෙනස් විය හැකිය.

එබැවින් අනාගතයේ දී හැසිරීම වෙනස් වුවහොත් මෙම පිළිතුර යල් පැන ගිය එකක් විය හැකිය. එබැවින් එය man git-restoreභාවිතා කිරීමට පෙර ඉක්මන් ධාවනය කිරීම නුවණට හුරුය .


2
මගේ අස්ථායී වෙනස්කම් නැවත ලබා ගැනීමට මට අවශ්‍ය වූයේ අලුතින් එකතු කරන ලද ලිපිගොනු වලට බලපෑමක් නොකර පමණි git restore .. ස්තූතියි.
සෞරබ් මිස්රා

3
මම git restore <filename>එය කළ අතර එය හොඳින් ක්‍රියාත්මක විය.
මර්ලින්

1
මට හොඳින් වැඩ කළා.
Prometheus

1
මෑන් පිටුවට අනුව git restore .සියලුම ලිපිගොනු වත්මන් නාමාවලියෙහි ප්‍රතිස්ථාපනය කරයි, සමස්ත ගබඩාවේ නොවේ.
jarno

1
ඔයා හරි. ස්තූතියි! මම එය අත්හදා බැලූ අතර ඇත්ත වශයෙන්ම එය එයයි. කෙසේ වෙතත් එය පුනරාවර්තන වේ. එබැවින් ව්‍යාපෘතියේ මුල සිට ක්‍රියාත්මක වන විට එය සමස්ත ගබඩාවට අදාළ වේ. මම මගේ පිළිතුර සංස්කරණය කරමි.
prosoitos

35

වෙනස්කම් ඉවතලනවා වෙනුවට, මම මගේ දුරස්ථය මූලාරම්භයට යලි සකසමි. සටහන - මෙම ක්‍රමය වන්නේ ඔබේ ෆෝල්ඩරය repo වෙත සම්පූර්ණයෙන්ම ප්‍රතිස්ථාපනය කිරීමයි.

ඒ නිසා මම මෙය සිදු කරන්නේ මා නැවත සැකසීමේදී ඔවුන් එහි නොසිටින බවට වග බලා ගැනීම සඳහාය (පසුව - මූලාරම්භය / ශාඛා නාමය මත ගිටිග්නෝර්ස් බැහැර කරයි)

සටහන: ඔබට ලිපිගොනු තවමත් ලුහුබැඳ නොතිබීමට අවශ්‍ය නම්, නමුත් GITIGNORE හි නොවන්නේ නම්, මෙම පියවර මඟ හැරීමට ඔබට අවශ්‍ය විය හැකිය, මන්දයත් එය ඔබගේ දුරස්ථ ගබඩාවේ නොමැති මෙම නොකැඩූ ලිපිගොනු අතුගා දමනු ඇත (ස්තූතියි @XtrmJosh).

git add --all

එහෙනම් මම

git fetch --all

ඉන්පසු මම මූලාරම්භයට යලි සකසමි

git reset --hard origin/branchname

එය නැවත වර්ග 1 ට දමනු ඇත. ශාඛාව නැවත ක්ලෝන කිරීම සේම, මගේ සියලු ලිපිගොනු දේශීයව සහ නිසි පරිදි තබා ගන්න.

පහත දැක්වෙන පරිශීලක විවරණයකට යාවත්කාලීන කරන ලදි: පරිශීලකයා සිටින ඕනෑම ශාඛාවකට නැවත සැකසීමේ විචලනය.

git reset --hard @{u}

මෙය මගේ ප්‍රියතම විකල්පයයි, නමුත් ඔබ මුලින්ම සියලු වෙනස්කම් එකතු කරන්නේ ඇයි? මා දන්නා පරිදි මෙය Git ලිපිගොනු වල නාමාවලි ලැයිස්තුගත කිරීම වෙනස් කරයි, git reset --hard භාවිතා කරන අතරම, කෙසේ හෝ මෙය නැති වී යන අතර ඩිරෙක්ටරි තවමත් ඉවත් කරනු ඇත.
XtrmJosh

මම මැක් හෝ ලිනක්ස් මත නොසිටිමි, ගිතබ් වින්ඩෝස් පවර්ෂෙල් සමහර විට නැවත සැකසීමෙන් පසු ලිපිගොනු එහි තබයි. මම හිතන්නේ එය git reset මගින් repo හි ඇති සියලුම ගොනු එහි මුල් තත්වයට සකසයි. ඒවා එකතු නොකළේ නම්, ඒවා ස්පර්ශ නොවේ. එවිට ඩෙස්ක්ටොප් සේවාදායකයා "ඒයි මෙම ගොනුව මෙහි ඇති අතර එය කැපවිය යුතුය"
නික්

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

මම දැන් මැක් එකකත් මේ ප්‍රශ්නය දිව්වා. Repo හි ගොනුව ලුහුබැඳ නොමැති නම් සමහර විට git reset එය ස්පර්ශ නොකරයි. මට "WHY" හුදකලා කළ නොහැක, නමුත් එය සිදු වූ විට, මම යළි පිහිටුවන්නේ නම්, සහ මා සතුව තවමත් නොගැලපෙන ලිපිගොනු 1 ක් හෝ දෙකක් තිබේ නම්, මම --all එකතු කර නැවත සකසන්න --හාර්ඩ්
නික්

2
මම කැමති මෙහි git reset --hard @{u}ඇති ඉතා කුඩා විචලනය නම් , වර්තමාන දුරස්ථ ලුහුබැඳීමේ ශාඛාව කොතැනක සිටියත් ශාඛාව නැවත සකස් කිරීමයි
user2221343

31

ඉහත සියලු විසඳුම් උත්සාහ කළ නමුත් තවමත් නව, අස්ථායී ගොනු ඉවත් කිරීමට නොහැකි විය.

git clean -fඑම නව ලිපිගොනු ඉවත් කිරීමට භාවිතා කරන්න - ප්‍රවේශමෙන් වුවද! බල විකල්පය සටහන් කරන්න.


21

සරලව කියන්න

git stash

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

git stash apply 

හෝ git stash pop


21

භාවිතා කරන්න:

git stash -u

සිදු විය. පහසු.

ඔබ ඔබේ තොග ගබඩාව ගැන සැබවින්ම සැලකිලිමත් වන්නේ නම් ඔබට එය අනුගමනය කළ හැකිය git stash drop. නමුත් එම අවස්ථාවේදී ඔබ භාවිතා කිරීම වඩා හොඳය (මාරියස් නෝවාක් වෙතින්):

git checkout -- .
git clean -df

එසේ වුවද, මම git stash -uහොඳම දේට කැමති වන්නේ එය එක් විධානයක ලුහුබැඳ ඇති සහ සොයා නොගත් වෙනස්කම් සියල්ල "බැහැර කරන" බැවිනි . එහෙත් git checkout -- .එකම වෙනස්කම්, සහ ඉවත් කර දමන්නාක් දම්වැල් මත ධාවනය වන git clean -dfඑකම ඉවත් කර දමන්නාක් untracked වෙනස්කම් ... සහ දෙකම විධාන ටයිප් කිරීම වේ දුර ද බොහෝ වැඩ :)


සටහන: git stash -uළඟදීම (Git 2.14.x / 2.15, Q3 2017) ටිකක් පරිණාමය වනු ඇත: stackoverflow.com/a/46027357/6309
VonC

මට OP පිළිබඳ ප්‍රශ්නය නිවැරදි නම් සුචිගත කරන ලද ලිපිගොනු තබා ගත යුතුය. ඉවත් කළ යුත්තේ අස්ථිර වෙනස්කම් පමණි. git stash -kමගේ මතය අනුව විය යුතුය .
ස්නැප් කරන්න

21

ස්ථිර ඉවතලෑමක් කිරීමට: git reset --hard

පසුකාලීන වෙනස්කම් සුරැකීමට: git stash


16

මෙය පවතින නාමාවලිවල පවා ක්‍රියාත්මක වේ; සාමාන්‍ය git අවසරයෙන් පිටත.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

මෑතකදී මට සිදු විය


නොසලකා හරින ලද අන්තර්ගතය එහි මුල් අවසරයන් රඳවා නොගන්නා බවට පරිස්සම් වන්න! එබැවින් එය ආරක්ෂක අවදානමක් ඇති කළ හැකිය.
දෙවරක්

wtwicejr ඔබ වැරදියි, කරුණාකර කියවන්න git help clean"-d සොයා නොගත් ලිපිගොනු වලට අමතරව හඳුනා නොගත් නාමාවලි ඉවත් කරන්න."
GlassGhost

ඔබගේ සියලුම ලිපිගොනු ලෝක කියවීමට / ලිවීමට ඔබ සැකසුවේ ඇයි? හොඳ පුහුණුවක් නොවේ.
ගෝටි

H ගෝති මගේ නරක, 664 නිවැරදිද? පිළිතුර සංස්කරණය කිරීමට ඔබව සාදරයෙන් පිළිගනිමු.
GlassGhost

සියළුම අවසරයන් 664 ලෙස සැකසීම මඟින් ව්‍යාපෘතියට අවශ්‍ය කුමන ආකාරයේ අවසරයන්ද යන්න පිළිබඳව බොහෝ උපකල්පන සිදු වේ. මම හිතන්නේ එම විධානය භාවිතා කිරීම සමහර අයට ගැටළු ඇති කරයි.
ianrandmckenzie

15

ඔබට ඉතා සරල git විධානයක් ඇත git checkout .


14
cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

12

මගේ මතය අනුව,

git clean -df

උපක්‍රමය කළ යුතුයි. අනුව තොරතුරු තාක්ෂණය පිරිසිදු මත Git ප්රලේඛනය

git-clean - වැඩ කරන ගසෙන් ඉවත් නොකළ ගොනු ඉවත් කරන්න

විස්තර

වත්මන් නාමාවලියෙන් පටන් ගෙන අනුවාද පාලනයට යටත් නොවන ගොනු නැවත නැවත ඉවත් කිරීමෙන් වැඩ කරන ගස පිරිසිදු කරයි.

සාමාන්‍යයෙන්, Git නොදන්නා ගොනු පමණක් ඉවත් කරනු ලැබේ, නමුත් -x විකල්පය නියම කර ඇත්නම්, නොසලකා හරින ලද ගොනු ද ඉවත් කරනු ලැබේ. නිදසුනක් ලෙස, සියලු නිමැවුම් නිෂ්පාදන ඉවත් කිරීමට මෙය ප්‍රයෝජනවත් වේ.

කිසියම් විකල්ප ... තර්ක ලබා දී ඇත්නම්, එම මාර්ග පමණක් බලපායි.

විකල්ප

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

-f --force Git වින්‍යාස විචල්‍යය clean.requireForce අසත්‍ය ලෙස සකසා නොමැති නම්, -f, -n හෝ -i ලබා නොදුනහොත් git clean ධාවනය කිරීම ප්‍රතික්ෂේප කරනු ඇත.


11

ඔබගේ ගබඩාව ඔබ තුළ කුමන තත්වයක පැවතියද, සෑම විටම පෙර සිදු කළ ඕනෑම කැපවීමකට නැවත සැකසිය හැකිය:

git reset --hard <commit hash>

මෙම කැපවීමෙන් පසුව සිදු කරන ලද සියළු වෙනස්කම් මෙමඟින් ඉවතලනු ඇත.


2
මෙය ද දර්ශකයේ ඇති සියල්ල (දර්ශකයේ නැති දේවල් පමණක් නොවේ) ඉවතලනු ඇත, එය OP ඉල්ලා සිටින දෙයින් ඔබ්බට ය.
ලිනස් ආවර්

10

Git clean -df ට වඩා විශේෂිත වූ නව ලිපිගොනු ඉවත් කිරීමට තවත් ක්‍රමයක් (එය අනිවාර්යයෙන්ම සියල්ලම අවශ්‍ය නොවන සමහර ගොනු ඉවත් කිරීමට ඔබට ඉඩ සලසයි), නව ගොනු පළමුව දර්ශකයට එක් කිරීම, පසුව ගබඩා කිරීම, පසුව අතහැර දමන්න stash.

කිසියම් හේතුවක් නිසා, කිසියම් සාමාන්‍ය යාන්ත්‍රණයකින් (rm වැනි) සොයා නොගත් සියලුම ගොනු පහසුවෙන් මකා දැමිය නොහැකි විට මෙම තාක්ෂණය ප්‍රයෝජනවත් වේ.


9

පහත දැක්වෙන්නේ සැබවින්ම විසඳුමකි, ඔබ නිතිපතා සමමුහුර්ත කරන නිධියක දෙබලක සමඟ වැඩ කරන්නේ නම් (උදා. ඉල්ලීම) වෙනත් ගබඩාවක් සමඟ. කෙටි පිළිතුර: දෙබලක සහ refork මකන්න, නමුත් github හි අනතුරු ඇඟවීම් කියවන්න .

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

මට බොහෝ විට මේ වගේ git තත්ව පණිවිඩ ඇත (අවම වශයෙන් 2/4 ලිපිගොනු ඇතුළත්):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

මෙම ලිපිගොනු වල ඩොප්ලෙගන්ජර්ස් ඇති බව දැඩි ඇසකින් සටහන් වේ. කෙසේ හෝ, මා ආරම්භ කිරීමට මෙම මාවතට යොමු වූයේ කුමක් දැයි මා දන්නේ නැත (මම මෙම ලිපිගොනු සමඟ උඩුමහලේ ගබඩාවෙන් වැඩ නොකළ නිසා), මම මෙම ලිපිගොනු මාරු කළෙමි. මෙම පිටුවේ ලැයිස්තුගත කර ඇති බොහෝ විසඳුම් උත්සාහ කරන්න (සහ වෙනත් පිටු) උදව් නොවන බව පෙනේ.

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


7

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

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

අදහස් දක්වා ඇති පරිදි, සංස්කරණය කරන්න, stashes නම් කළ හැකිය. හොඳයි, ඔබේ තොගය බෙදා ගැනීමට අවශ්‍ය නම් මෙය භාවිතා කරන්න;)


5
ඇත්තටම Git stash ට මාතෘකාවක් තිබිය හැකිය. උදාහරණයක් ලෙස git stash save "Feature X work in progress".
කොලින් ඩී බෙනට්

7

විස්තරාත්මක ආකාරයකින් එය කරන්නේ කෙසේද යන්න විස්තර කරන ඔබේම අන්වර්ථයක් ඔබට නිර්මාණය කළ හැකිය.

වෙනස්කම් ඉවතලීමට මම ඊළඟ අන්වර්ථය භාවිතා කරමි.


වැඩ කරන ගසෙහි (ලැයිස්තුවේ) ගොනුවක වෙනස්කම් ඉවතලන්න

discard = checkout --

සියලු වෙනස්කම් ඉවතලීමට ඔබට එය ඊළඟට භාවිතා කළ හැකිය:

discard .

නැතහොත් ගොනුවක් පමණි:

discard filename

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

වැඩ කරන ගසෙහි වෙනස්කම් සහ හඳුනා නොගත් ගොනු පිරිසිදු කර ඉවතලන්න

cleanout = !git clean -df && git checkout -- .

එබැවින් භාවිතය ඊළඟට සරල ය:

cleanout

දැන් අන්වර්ථ නාම රාශියක් අඩංගු ඊලඟ ගිතුබ් ගබඩාවේ ඇත:


7

ගොනුවක් සෑම විටම වේදිකාගත නොවූ අමුතු තත්වයක් මට තිබුණි, මෙය විසඳීමට මට උපකාරී වේ.

git rm .gitattributes
git add -A
git reset --hard

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.