git: නව ලිපිගොනු ඇතුළුව වැඩ කරන සියලු වෙනස්කම් අහෝසි කරන්න


1164

අළුත් නොකල ගොනු ඇතුළුව වැඩ කරන නාමාවලියෙන් සියලුම වෙනස්කම් මකා දැමිය හැකි ආකාරය. එය git checkout -fසිදු වන බව මම දනිමි , නමුත් එය අවසාන කැපවීමෙන් පසුව නිර්මාණය කරන ලද නව සොයා නොගත් ගොනු මකා නොදමනු ඇත.

එය කරන්නේ කෙසේදැයි යමෙකුට අදහසක් තිබේද?


1
@Joel සහ ගාථා: ඇයි ඔබ උත්සාහ කරන්නේ නැහැ git help resetසහgit help clean
SHernandez

3
ඔබගේ git වින්‍යාසය තුළ මේ සඳහා අන්වර්ථයක් සෑදීම හොඳ අදහසකි;)
anubina

Answers:


1722
git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

අතින් මකා දැමිය යුතු දේ බැලීමට, එය සැබවින්ම මකා නොදමමින්, -nධජය භාවිතා කරන්න (මෙය මූලික වශයෙන් පරීක්ෂණ ධාවනයකි). ඔබ සැබවින්ම මකා දැමීමට සූදානම් වූ විට, -nධජය ඉවත් කරන්න :

git clean -nfd


16
සටහන: git reset --hard විසින් වේදිකාගත කරන ලද වෙනස්කම් මෙන්ම වැඩ කරන නාමාවලි වෙනස්කම්ද ඉවත් කරයි. එසේම, git clean -f -d නව සොයා නොගත් ගොනුවක් එක් කිරීමට වඩා හොඳ ප්‍රතිවිරුද්ධ දෙයකි. ප්රශ්නයෙන්, අසන්නා ඔහුගේ වර්තමාන නොසලකා හරින ලද ගොනු සමූහය ගැන සෑහීමකට පත්විය හැකිය.
සීබී බේලි

7
ඊළඟ පිළිතුර කියවා -x ස්විචයෙන් බැහැරව සිටින්න. (එමඟින් මුරපදය / ඩීබී-සැකසුම් ලිපිගොනු වැනි ඔබේ දේශීය වින්‍යාසයද ඉවත් කළ හැකිය. උදා: database.yml)
බොරිස්

9
මෙම අවස්ථාවේදී -x ස්විචය අනවශ්‍ය හා තරමක් භයානක ය.
ටිම් ගෝටියර්

66
git clean -fxdඔබ කරන්නේ කුමක්දැයි ඔබ නොදන්නේ නම් ඇත්තෙන්ම භයානක විය හැකිය. ඔබේ දත්ත සමුදාය වැනි ඉතා වැදගත් හඳුනා නොගත් ලිපිගොනු ස්ථිරවම මකා දැමිය හැකිය. ප්‍රවේශම් වන්න.
මේසන් ස්ටුවර්ට්

10
git clean -f -dනොසලකා හරින ලද ෆෝල්ඩර වලින්ද ගොනු මකා දැමිය හැකි බව සලකන්න . එබැවින් ඔබ සියලු දේශීය ල logs ු-සටහන් සහ ඒ හා සමාන දෑ නැති වී යයි. සාමාන්යයෙන් එය විශාල ගැටළුවක් නොවේ, නමුත් දැන ගැනීම වඩා හොඳය.
සිරිල්

303

මම නිතර භාවිතා කරන ආරක්ෂිතම ක්‍රමය:

git clean -fd

/docs/git-cleanපිටුවට අනුව සින්ටැක්ස් පැහැදිලි කිරීම :

  • -f(අන්වර්ථය :) --force. Git වින්‍යාස විචල්‍යය clean.requireForce අසත්‍ය ලෙස සකසා නොමැති නම්, -f, -n හෝ -i ලබා නොදුන්නේ නම් git clean ගොනු හෝ නාමාවලි මකා දැමීම ප්‍රතික්ෂේප කරනු ඇත. තත්පර -f ලබා නොදුනහොත් .git උප බහලුම හෝ ගොනුව සහිත නාමාවලි මකා දැමීම Git ප්‍රතික්ෂේප කරයි.
  • -d. හඳුනා නොගත් ලිපිගොනු වලට අමතරව හඳුනා නොගත් නාමාවලි ඉවත් කරන්න. හඳුනා නොගත් නාමාවලිය වෙනත් Git ගබඩාවක් මගින් කළමනාකරණය කරන්නේ නම්, එය පෙරනිමියෙන් ඉවත් නොකෙරේ. ඔබට එවැනි නාමාවලියක් ඉවත් කිරීමට අවශ්‍ය නම් දෙවරක් -f විකල්පය භාවිතා කරන්න.

අදහස් දැක්වීම්වල සඳහන් කර ඇති පරිදි, git clean -ndවියළි ධාවනයක් සිදු කිරීම වඩාත් සුදුසු විය හැකි අතර එය මකා දැමීමට පෙර මකා දැමිය යුතු දේ ඔබට කියයි.

ලේඛ git cleanපිටුවට සබැඳිය : https://git-scm.com/docs/git-clean


126
මම සෑම විටම git clean -nd .භාවිතා කරමින් ලිපිගොනු මකා දැමීමට පෙරgit clean -fd .
tbear

14
මන්ද? කරුණාකර ඔබට විස්තර පැහැදිලි කළ හැකිද?
ග්‍රෙග් බී

32
එක් git clean -n විකල්පය ඇත්ත වශයෙන්ම වියළි ධාවනයකි, එය කිසිවක් ඉවත් නොකරයි, එය ඔබට පෙන්වන්නේ කුමක් කරනු ඇත්ද යන්නයි.
RNickMcCandless

2
@tbear, ඔබ හැම විටම හිස් කරන්න පුළුවන් add -A+ commit -a+ revert headපළමු පෙර git clean. සෑම මකාදැමීමක්ම සමාලෝචනය කිරීම ප්‍රධාන සිදුවීම් සඳහා ප්‍රමාණවත් නොවේ. එසේම, වියලි ධාවනය රිදී උණ්ඩයක් නොවේ: සමාලෝචනයේදී ඔබට යමක් මග හැරුණි හෝ වැරැද්දක් කර ඇත්නම් කුමක් කළ යුතුද?
පැසීරියර්

1
මෙය ගොනු ඉවත් කරයි, නමුත් එය වෙනස් කිරීම් අහෝසි නොකරයි.
donquixote

208

සියලු දම්වැල් මත ධාවනය වන unstaged ගොනු භාවිතය:

git checkout -- .

මෙම .අවසානයේ වැදගත් වේ.

.ඔබේ ව්‍යාපෘතියේ නිශ්චිත උප නාමාවලියක් පමණක් ඉවත් කිරීමට ඔබට උප-නාමාවලි නාමයක් ආදේශ කළ හැකිය . ගැටළුව මෙහි විශේෂයෙන් ආමන්ත්‍රණය කෙරේ .


7
In වින්සන්ට්: - පරාමිතීන් නිශ්චිතව දක්වා නොමැති බව චෙක්පට් විධානයට පැවසීමෙන් - යතුරු ලියනය කිරීමේ දෝෂ මඟහරවා ගනී. ඒවා නොමැතිව ඔබට වර්තමාන ශාඛාව නැවත සැකසීම වෙනුවට නව ශාඛාවකින් අවසන් කළ හැකිය!
ඊගෝර් රොඩ්රිගස්

2
මෙය ආරක්ෂිතම මාර්ගයයි, නමුත් එය ඉවත් නොකළ ගොනු (අලුතින් එකතු කරන ලද ගොනු) ඉවත් නොකරනු ඇත.
TinkerTenorSoftwareGuy

5
මෙය මකාදැමූ, නමුත් අනුමත නොකළ ගොනු නැවත පිහිටුවන්නේ නැත.
සෙරින්

යන්තම් FYI. මට මෙය මඟ හැරුණි. අස්ථිර වෙනස්කම් මකා දැමීමට අවශ්‍ය නාමාවලියෙහි ඔබ සිටින බවට වග බලා ගන්න. උදාහරණයක් ලෙස, ශාඛාවක විවිධ ස්ථානවල විවිධ ගොනු 2 ක වෙනස්කම් මට තිබුණි, එනම්: src/app/work/filename.jsසහ ../app/working/test/filename.js. git checkout -- .ශාඛාව මත භාවිතා කිරීමෙන් පළමු ගොනුව පමණක් මකාදමා ඇත ( ප්‍රමුඛයා නොමැතිව ../ ). cd ../එම විධානය භාවිතා කරමින් දෙවන ගොනුව මකා දැමීම සඳහා මට දෙවන ස්ථාන නාමාවලිය වෙත යාමට සිදු විය.
ක්‍රිස් 22

ආරම්භකයින්ට එම ද්විත්ව ඉර (()) එහි කුමක් කරන්නේ දැයි දැන ගැනීම ප්‍රයෝජනවත් විය හැකිය : එක්තරා ගොනුවකට (පෙර ගොනුවේ) සිදු කරන ලද සියළු වෙනස්කම් git checkout fileහෝ git checkout .ආපසු හැරවිය හැකි වුවද හෝ සියලු ලිපිගොනු වල වෙනස්කම් (පසුකාලීනව), නමුත් සාමාන්‍යයෙන් ඒවා එසේ භාවිතා නොකරන අතර එය "ශාඛා පිරික්සුමක්" නොවන බව සම්පූර්ණයෙන්ම පැහැදිලි කිරීම සඳහා ද්විත්ව ඉරක් ඒවාට පෙර තිබේ. එබැවින් ශාඛා නාමයක් සහ ලිපිගොනු නමක් සමාන වුවද, කිසිදු නාම ගැටුම් ගැටළු ඇති නොවේ.
aderchox

57

git cleanවිධානය දෙස බලන්න .

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

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

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


මම git clean -iමෙනුවෙන් "පිරිසිදු" උත්සාහ කර තෝරාගෙන ඇත - මෙය අවසානයේ නව ගොනු ඉවත් කළේය.
සානි

44

ඔබට මෙය පියවර දෙකකින් කළ හැකිය:

  1. වෙනස් කළ ගොනු ආපසු හරවන්න: git checkout -f
  2. හඳුනා නොගත් ගොනු ඉවත් කරන්න: git clean -fd

3
+1 සරල නිසා. එසේම එය ක්‍රියාත්මක වන නිසාත්, ඔම්ග් සමඟ බිය නොවී OP ට අවශ්‍ය දේ හරියටම කරන නිසාත් මෙය සියල්ල මකා දමනු ඇත.
geekzster

43

පහත සඳහන් ක්‍රියා:

git add -A .
git stash
git stash drop stash@{0}

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

සාමාන්‍ය භාවිත නඩුවක්: ඔබ ලිපිගොනු හෝ නාමාවලි විශාල ප්‍රමාණයක් වටා ගෙන ගොස්, පසුව මුල් තත්වයට පැමිණීමට අවශ්‍යය.

බැර: https://stackoverflow.com/a/52719/246724


1
සාධාරණ වෙනුවට ඔබ {{0 st තොගය සඳහන් කරන්නේ ඇයි git stash drop?
මයිකල්

අවංකවම, මට මතක නැත :)
donquixote

මේ කෙනා වැඩ කළා. සටහනක් ලෙස, ඔබ නිවාස නාමාවලියෙහි සිටින බවට සහතික වන්න ( git add -A .). ලිපිගොනු ගැලපීමක් නොතිබූ නිසා මට මීටර් 30 ක් අහිමි විය. ස්තූතියි!
user9869932

මම මෙම ප්‍රවේශය භාවිතා කළ අතර එයට කුසලතා ඇත. කෙසේ වෙතත්, එතැන් සිට jfountain සහ Heath Dutton විසින් යෝජනා කරන ලද විසඳුම් මුල් ගැටලුවට වඩා උචිත IMHO සොයාගෙන ඇත.
හෙයිසිකෝ

2
git stash drop stash @ {0} නවතම තොගය ඔබ git stash කළහොත් එය ඔබ කළ සියලු කොටස් පහත වැටෙනු ඇත
DonatasD

33

මම හිතන්නේ එය ( අනතුරු ඇඟවීම: පහත සඳහන් කරනු ඇත හැම දෙයක්ම පිස )

$ git reset --hard HEAD
$ git clean -fd

මෙම resetවෙනස්කම් ඉවත් කිරීමට. මෙම cleanකිසිදු untracked ඉවත් කිරීමට f iles හා irectories.


මෙය ක්‍රියාත්මක නොවේ, git pullපසුව සිදු කරන විට මට තවමත් ගැටුම් අනතුරු ඇඟවීමක් ලැබේ : CONFLICT (content): Merge conflict in...මම මෙය විසඳුවේ agit pull --strategy=ours
rubo77


4

git clean -iමකා දැමිය යුතු අයිතම පළමුව ඔබට පෙන්වනු ඇති අතර ඔබගේ තහවුරු කිරීමෙන් පසුව ඉදිරියට යනු ඇත. අහම්බෙන් මකා නොදැමිය යුතු වැදගත් ලිපිගොනු සමඟ කටයුතු කිරීමේදී මෙය ප්‍රයෝජනවත් බව මට පෙනේ.

git help cleanතවත් ප්‍රයෝජනවත් විකල්ප කිහිපයක් ඇතුළුව වැඩි විස්තර සඳහා බලන්න .


4

ඔබට සියලු වෙනස්කම් ඉවත දැමීමට අවශ්‍ය නම්, ඔබට අන්වර්ථයක ඕනෑම වලංගු විකල්පයක් භාවිතා කළ හැකිය .gitconfig. උදාහරණයක් වශයෙන්:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

භාවිතය: git discard


1
මෙම අන්වර්ථය මම බෙහෙවින් කැමතියි
ධජ

3

විකල්ප විසඳුමක් වන්නේ වෙනස්කම් සිදු කිරීම, ඉන්පසු එම ක්‍රියාවන් ඉවත් කිරීම ය. මෙය මුලදී ක්ෂණික ප්‍රතිලාභයක් නොලැබෙන නමුත්, එය කුට්ටි වල කැපවීමේ හැකියාව විවෘත කරයි, සහ උපස්ථ සඳහා git ටැගයක් නිර්මාණය කරයි.

වත්මන් ශාඛාවේ ඔබට මෙය කළ හැකිය:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

නැතහොත් ඔබට එය වෙන් කළ හෙඩ් මත කළ හැකිය. (ඔබ බ්‍රැන්ච්නාම් ශාඛාවෙන් ආරම්භ යැයි උපකල්පනය කරමු):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

කෙසේ වෙතත්, මම සාමාන්‍යයෙන් කරන්නේ කුට්ටි වල කැපවීමයි, පසුව සමහරක් හෝ සියල්ලම "ඩිස්කාර්ඩ්: ..." ලෙස නම් කරන්න. ඉන්පසු අයහපත් ක්‍රියා ඉවත් කර හොඳ ඒවා තබා ගැනීමට අන්තර්ක්‍රියාකාරී නැවත භාවිතා කරන්න.

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

මෙය වඩාත් වාචික ය, නමුත් ඔබට ඉවත දැමීමට අවශ්‍ය වෙනස්කම් හරියටම සමාලෝචනය කිරීමට එය ඉඩ දෙයි.

මෙම git lolසහgit lola කෙටි මං මේ කාර්ය ප්රවාහ සමඟ ඉතා ප්රයෝජනවත් වී ඇත.



0

මෙය බොහෝ විට උත්තරීතර පිළිතුරක් විය හැකිය, නමුත්: මම කවුළු සඳහා ඉබ්බා ගිට් භාවිතා කරන අතර එයට REVERT නමින් ලස්සන අංගයක් ඇත. එබැවින් ඔබගේ දේශීය නොවන වේදිකාගත නොකළ වෙනස්වීම් ආපසු හැරවීමට ඔබ කරන්නේ කුමක්ද:

  1. අවශ්‍ය ෆෝල්ඩරය සඳහා සන්දර්භය මෙනුවක් ගෙන ඒම සහ ප්‍රතිවර්තනය තෝරන්න, එය ප්‍රතිවර්තනය කරන ලද උත්පතන පෙන්වයි, එහිදී ඔබට ප්‍රතිවර්තනය / ප්‍රතිසාධනය සඳහා වෙනස් කළ ගොනු තෝරා ගත හැකිය.
  2. ඔබට එකතු කරන ලද ලිපිගොනු මකා දැමීමට අවශ්‍ය නම් (එය තවමත් ගිටියේ නොමැති) ක්ලික් කරන්න (එකම සන්දර්භය මෙනුවෙන්) එය බැඳීම් උත්පතන ගෙන එන අතර එකතු කළ ලිපිගොනු ඔබට පෙන්වයි, ඉන්පසු ඒ සෑම එකක්ම දකුණු ක්ලික් කර මකන්න තෝරන්න. නමුත් ඔබට මෙම පොප්අප් එකේ commit btn ඔබන්න එපා, ඔබට කැපවීමට අවශ්‍ය නැති නමුත් එකතු කළ ලිපිගොනු පමණක් දැක ඒවා මෙතැනින් මකන්න.
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.