ලිපිගොනු සහ ෆෝල්ඩර ඇතුළුව නොගැලපෙන වෙනස්කම් ආපසු හරවා ගන්නේ කෙසේද?


1090

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



1
හොඳයි, පහත දැක්වෙන විවිධාකාර හා දුෂ්කර පිළිතුරු මතක තබා ගැනීමට මම කියවා ඇත්තෙමි, ඒවායේ අවවාද සහ එජ් සිද්ධි සහ "ඔබට xxx තිබේ නම් වැඩ කළේ නැත", සහ සම්පූර්ණ රිපෝව මකාදැමීම, සංස්කරණය කර එකතු කරන ලද සියලුම ගොනු ඉවත් කිරීම සඳහා ක්ලෝන කිරීම. . යනු විධාන දෙකක් පමණි. rm -r projectdir; git clone xxx. මට නම් මෙය නිරන්තර මෙහෙයුමකි - ඒ සමඟ රෙපෝ නාට්යයක් බලන්න, පසුව පිරිසිදු පිරික්සුමකට යාමට අවශ්ය බැවින් මට එය වෙනස් කිරීමට පටන් ගත හැකිය. විශිෂ්ට නොවේ, නමුත් 100% ක් ක්රියා කරයි. කවදා හෝ බලාපොරොත්තුවෙන් ඔවුන් මේ සඳහා සරල විධානයක් එකතු කරනු ඇත.
ජෝන් ලිට්ල්

Answers:


1790

ඔබට මෙම විධාන දෙක ක්‍රියාත්මක කළ හැකිය:

# Revert changes to modified files.
git reset --hard

# Remove all untracked files and directories.
# '-f' is force, '-d' is remove directories.
git clean -fd

149
Git clean ධාවනය කිරීමට පෙර සිදු වූ වෙනස්කම් පෙරදසුන් කිරීම සඳහා 'git clean -nd' ධාවනය කිරීම හොඳ අදහසක් නම්, ඔබ ඒ ගැන සැලකිලිමත් වන ලිපිගොනු හෝ නාමාවලි ඉවත් නොකෙරේ.
jpw

80
යමෙකු ලේඛනයට චාරිකාවක් සුරකින්න: -f යනු බලය, -d යනු නාමාවලි ඉවත් කිරීම, -n වියලි ධාවනය (එසේම - වියලි ධාවනය; තවම කිසිවක් නොකර ප්‍රතිදානය පෙන්වන්න)
ආරොන් කැම්බල්

12
git clean -iඅන්තර්ක්‍රියාකාරී මාදිලියක් සඳහා.
ගැලත්

එය මගේ අස්ථායී ගොනු නැවත සකසා නැත, මට ඒවා පළමුව වේදිකා ගත කිරීමට සිදු විය.
Aron Lorincz

4
G ඉගෝර්ගනාපොල්ස්කි ඔබ බොහෝ විට ඒකාබද්ධ කිරීමේ ගැටුමේ මැද විය හැකිය. ධාවනය කිරීමට උත්සාහ කරන්න git merge --abort.
htanata

561

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

git checkout -- .

ඊට පෙර, ඇත්ත වශයෙන්ම කිසිදු ක්‍රියාමාර්ගයක් නොගෙන ආපසු හරවන ලද ගොනු ලැයිස්තුගත කළ හැකිය, කුමක් සිදුවේදැයි පරීක්ෂා කිරීමට,

git checkout --

1
මම මෙය උත්සාහ කරන විට මට "දෝෂය: pathspec" ලැබේ. git දන්නා කිසිදු ගොනුවකට (ගොනුවකට) නොගැලපේ.
මයික් කේ

34
මෙය සහ අතර ඇති වෙනස git reset --hardකුමක්ද?
ෆෙලිපේ

105
'git reset --hard' මඟින් වේදිකාගත කර ඇති සහ වේදිකාගත නොකළ වෙනස්කම් අහෝසි කරනු ඇති අතර 'git checkout -.'
අස්ථායි

නමුත් ඔබ පිටවීම භාවිතා කරන්නේ නම් සහ ඔබ විසින් වෙනස් කරන ලද ලිපිගොනු තිබේ නම්, මෙම වෙනස්වීම් ආපසු හැරවීමට අවශ්‍ය වූ විට පවා මට ඒකාබද්ධ කිරීම අවශ්‍ය බව cmd නැවත පැමිණේ
Vinicius Monteiro

8
git checkout - ආපසු හරවන ගොනු සරලව ලැයිස්තුගත කරයි (කිසිදු ක්‍රියාමාර්ගයක්, ලැයිස්තුවක් පමණක්). git checkout කිරීමට පෙර කුමන ගොනු බලපානු ඇත්දැයි බැලීමට ඔබට අවශ්‍ය නම් මෙය ප්‍රයෝජනවත් වේ -.
ක්‍රිෂ් ශ්‍රිනිවාසන්

109

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

git checkout -- app/views/posts/index.html.erb

හෝ

git checkout -- *

git තත්වයේ අස්ථායි ගොනු වල සිදු කරන ලද සියලුම වෙනස්කම් ඉවත් කරයි

modified:    app/controllers/posts.rb
modified:    app/views/posts/index.html.erb

5
git checkout -- *වෙනස් කළ ලිපිගොනු පිහිටා ඇති නාමාවලියෙහි මා සිටින්නේ නම් මිස මට වැඩ නොකරයි. මුළු ගබඩාව පුරාම ඇති සියලුම ලිපිගොනු git checkout -- :/
පිරික්සීමට

දී git checkout -- *, වත්මන් නාමාවලියෙහි ඇති සියලුම ගොනු සහ නාමාවලි සමඟ තාරකාව ෂෙල් මගින් ප්‍රතිස්ථාපනය වේ. එබැවින් එය උප බහලුම් තුළට යා යුතුය. එය මට වැඩ කරයි. නමුත් මගේ මතය අනුව පිරිසිදු කරන මැහුම් ": /" ඉස්මතු කිරීමට ස්තූතියි.
mcoolive

මටත් හැකි බව පෙනේ git checkout -- '**/*.md'. මට දැන් අවශ්‍ය දේ සේම.
Polv

55

සුළු නොවන එක් ක්‍රමයක් නම් මෙම විධාන දෙක ක්‍රියාත්මක කිරීමයි:

  1. git stash මෙය ඔබගේ වෙනස්කම් තොගයට ගෙන යන අතර ඔබව නැවත HEAD තත්වයට ගෙන එනු ඇත
  2. git stash drop මෙය අවසාන විධානය තුළ සාදන ලද නවතම තොගය මකා දමනු ඇත.

3
මෙය නොගැලපෙන වෙනස්කම් සඳහා ක්‍රියා නොකරයි, කැපවූ වෙනස්කම් පමණි.
b0xxed1n

4
වෙනස් නොකළ වෙනස්කම් සඳහා මම එය භාවිතා කර ඇති අතර එය ක්‍රියාත්මක වේ.
පෝල් ඩී. ඊඩන්

8
@ b0xxed1n ගබඩා කිරීම යනු නොගැලපෙන වෙනස්කම් පිළිබඳව වන අතර පැහැදිලිවම එය ඔවුන් සඳහා ක්‍රියා කරයි.
ටී.ජේ

git stash සාදන ලද්දේ ඔබට කළ නොහැකි වෙනස්කම් සුරැකීමටයි .. එවිට ඒවා සිදු නොකර ඉතිරි කරන්න.
රොබ්

git stash පහත සඳහන් දෝෂයට හේතු වේ:fatal: git-write-tree: error building trees Cannot save the current index state
IgorGanapolsky

20
git clean -fd

උදව් කළේ නැත, නව ලිපිගොනු ඉතිරිව තිබේ. මා කළේ වැඩ කරන ගස මුළුමනින්ම මකා දැමීමයි

git reset --hard

"බලන්න ? මම කොහොමද GIT මගේ දේශීය කම්කරු බහලුම ඉවත් කරන්නේ එකතු කිරීම සඳහා උපදෙස් සඳහා" -xපිරිසිදු විකල්පය:

git clean -fdx

සටහන් -x ධජය මඟින් Git විසින් නොසලකා හරින ලද සියලුම ගොනු ඉවත් කරනු ඇත, එබැවින් ප්‍රවේශම් වන්න (මා යොමු කරන පිළිතුරේ සාකච්ඡාව බලන්න).


-fdx යනු කුමක්ද? "බලය, නාමාවලිය සහ x යනු කුමක්ද?
Adi Prasetyo

DAdiPrasetyo -x ධජය නොසලකා හරින ලද සියලුම ගොනු ඉවත් කරයි; එය නුසුදුසු බලපෑමක් විය හැකි නිසා මම මගේ පිළිතුර යාවත්කාලීන කළෙමි.
Fr0sT

මට තවමත් නැවත පැමිණිය නොහැක. මට දෝෂය ලැබුණි
ඉගෝර්ගනාපොල්ස්කි

14

ඔබට පහත විධානය භාවිතා කළ හැකි යැයි මම සිතමි: git reset --hard


හ්ම් ... මම එය කළ නමුත් මගේ ලිපිගොනු තවමත් පවතී. මම පසුව යමක් කළ යුතුද?
MEM

1
git reset මඟින් ආපසු හරවනු ලබන්නේ වැඩ කරන ගසෙහි නොගැලපෙන වෙනස්කම් පමණි. එය නව ලිපිගොනු සහ ෆෝල්ඩර ඉවත් නොකරනු ඇත. Git සමඟ එය කරන්නේ කෙසේදැයි මට විශ්වාස නැත
ජොස්නිඩින්

1
ඉතින්, අපි නව ලිපිගොනු සහ ෆෝල්ඩර එකතු කිරීමෙන් පද්ධති නාමාවලියක් වෙනස් කළහොත්, එම නාමාවලිය පෙර තත්වයකට ගෙන ඒමට අපට අවශ්‍ය නම් (එම ලිපිගොනු සහ ෆෝල්ඩර ඉවත් කරන්න), අපට එය git සමඟ කළ නොහැකිද? ඉතින් අපට කළ හැකි හොඳම දේ ගොනු තත්වයන් ආපසු හැරවීමද? නමුත් අපි ගොනුවක් සෑදූ පසු, එය අතින් සිදු නොකරන්නේ නම් අපට එය ඉවත් කළ නොහැකිද?
එම්ඊඑම්

6

අතුරුදහන් නොවන බව පෙනෙන ලිපිගොනු තවමත් තිබිය හැකි බව කරුණාවෙන් සලකන්න - ඒවා සංස්කරණය නොකළ ඒවා විය හැකිය, නමුත් CRLF / LF වෙනස්වීම් නිසා ඒවා සංස්කරණය කළ බව git විසින් සලකුණු කර ඇත. ඔබ .gitattributesමෑතකදී යම් යම් වෙනස්කම් කර ඇත්දැයි බලන්න .

මගේ නඩුවේදී මම CRLF සැකසුම් .gitattributesගොනුවට එකතු කර ඇති අතර සියලුම ලිපිගොනු "නවීකරණය කරන ලද ගොනු" ලැයිස්තුවේ පවතී. .Gitattributes සැකසුම් වෙනස් කිරීමෙන් ඒවා අතුරුදහන් විය.


6

ඔබගේ නවතම බැඳීමෙහි පිටපත වෙත ආපසු යාමට ඔබ බලාපොරොත්තු නොවූ වෙනසක් (එය ඔබගේ වැඩ කරන පිටපතෙහි පමණක්) තිබේ නම්, පහත සඳහන් දේ කරන්න:

git checkout filename

මම මෙය උත්සාහ කරන්නේ එකඟතාවයකින් තොරව git rm filenameවන අතර එය ක්‍රියාත්මක නොවේ. error: pathspec 'filename' did not match any file(s) known to git.
falsePockets

අහෝසි git rmකිරීම සඳහා විසඳුම නම්git checkout master -- filename
ව්‍යාජ පොකට්

3

git restoreවැඩ කරන ගස් ලිපිගොනු යථා තත්වයට පත් කිරීම සඳහා Git 2.23 විධානය හඳුන්වා දුන්නේය .

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

වත්මන් නාමාවලියෙහි ඇති සියලුම ගොනු ප්‍රතිස්ථාපනය කිරීමට

git යථා තත්වයට පත් කරන්න.

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

git restore '* .c'


1
එය git 2.23 , 2.13 නොවේ
phuclv

2

ඔබට පහත දැක්වෙන git විධානය භාවිතා කළ හැකි අතර එමඟින් ඔබේ ගබඩාවේ සිදු නොවූ සියලු වෙනස්කම් ආපසු ලබා ගත හැකිය:

git checkout .

උදාහරණයක්:

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

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:   application/controllers/Drivers.php
        modified:   application/views/drivers/add.php
        modified:   application/views/drivers/load_driver_info.php
        modified:   uploads/drivers/drivers.xlsx

no changes added to commit (use "git add" and/or "git commit -a")

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git checkout .

ABC@ABC-PC MINGW64 /c/xampp/htdocs/pod_admin (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean

-2

මම සාමාන්‍යයෙන් භාවිතා කරන්නේ හොඳින් ක්‍රියා කරන මේ ආකාරයටයි:

mv fold/file /tmp
git checkout fold/file

"කැමති" 357 ක් ඇති පුද්ගලයා යෝජනා කළ ආකාරයටම මෙයයි. ඔබ අලුතින් පරීක්ෂා කරන ලද ගොනුවේ උපස්ථයක් පවා නිර්මාණය කරන්නේ නම් පමණි.
මතියස්

-3

ආරක්ෂිත සහ දිගු මාර්ගයක්:

  1. git branch todelete
  2. git checkout todelete
  3. git add .
  4. git commit -m "I did a bad thing, sorry"
  5. git checkout develop
  6. git branch -D todelete

-3

භාවිත:

git reset HEAD filepath

උදාහරණයක් වශයෙන්:

git reset HEAD om211/src/META-INF/persistence.xml
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.