Hoe kan ik een “git rm -r .” terugzetten?

Ik zei per ongeluk git rm -r .. Hoe herstel ik hiervan?

Ik heb me niet verplicht.

Ik denk dat alle bestanden zijn gemarkeerd voor verwijdering en ook fysiek zijn verwijderd uit mijn lokale kassa.

EDIT:ik kon (als ik het commando kende) teruggaan naar de laatste commit. Maar het zou een stuk beter zijn als ik de git rm -r .gewoon ongedaan kon maken. Omdat ik niet echt zeker weet wat ik deed na de laatste commit en voor de git rm -r ..


Antwoord 1, autoriteit 100%

git reset HEAD

Zou het moeten doen. Als u geen niet-vastgelegde wijzigingen heeft waar u om geeft, dan

git reset --hard HEAD

moet alles geforceerd resetten naar je laatste commit. Als je niet-vastgelegde wijzigingen hebt, maar het eerste commando werkt niet, sla dan je niet-vastgelegde wijzigingen op met git stash:

git stash
git reset --hard HEAD
git stash pop

Antwoord 2, autoriteit 53%

Ik git-rmde een paar bestanden en ging door met het aanbrengen van wijzigingen voor mijn volgende commit toen ik me realiseerde dat ik een aantal van die bestanden terug nodig had. In plaats van te bewaren en opnieuw in te stellen, kunt u desgewenst eenvoudig de afzonderlijke bestanden uitchecken die u hebt gemist/verwijderd:

git checkout HEAD path/to/file path/to/another_file

Hierdoor blijven uw andere niet-vastgelegde wijzigingen intact zonder tijdelijke oplossingen.


Antwoord 3, autoriteit 12%

Om enkele bestanden of mappen terug te krijgen, kan men het volgende gebruiken

git reset -- path/to/file
git checkout -- path/to/file

Hiermee worden eerst de indexvermeldingen voor path/to/fileopnieuw gemaakt en wordt het bestand opnieuw gemaakt zoals het was in de laatste vastlegging, d.w.z.HEAD.

Hint:men kan een commit-hash aan beide commando’s doorgeven om bestanden van een oudere commit opnieuw te maken. Zie git reset --helpen git checkout --helpvoor details.


Antwoord 4, autoriteit 6%

Bijwerken:

Aangezien git rm .alle bestanden in deze en onderliggende mappen in de werkende checkout en in de index verwijdert, moet je elk van deze wijzigingen ongedaan maken:

git reset HEAD . # This undoes the index changes
git checkout .   # This checks out files in this and child directories from the HEAD

Dit zou moeten doen wat je wilt. Het heeft geen invloed op de bovenliggende mappen van uw uitgecheckte code of index.


Oud antwoord dat niet was:

reset HEAD

zal het lukken, en wist geen niet-vastgelegde wijzigingendie u in uw bestanden heeft aangebracht.

daarna moet je alle git addcommando’s herhalen die je in de wachtrij had staan.


Antwoord 5, autoriteit 6%

Als het bovenstaande niet werkt, kun je mogelijk gegevens ophalen met behulp van de suggestie van hier: http://www.spinics.net/lists/git/msg62499.html

git prune -n
git cat-file -p <blob #>

Antwoord 6, autoriteit 5%

git rm ongedaan maken

git rm file             # delete file & update index
git checkout HEAD file  # restore file & index from HEAD

git rm -r ongedaan maken

git rm -r dir          # delete tracked files in dir & update index
git checkout HEAD dir  # restore file & index from HEAD

git rm -rf ongedaan maken

git rm -r dir          # delete tracked files & delete uncommitted changes
not possible           # `uncommitted changes` can not be restored.

Uncommitted changesomvat not staged changes, staged changes but not committed.


Antwoord 7, autoriteit 2%

Als je de wijzigingen hebt doorgevoerd en gepusht, kun je dit doen om het bestand terug te krijgen

// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file

Antwoord 8

Er zijn al enkele goede antwoorden, maar ik zou een weinig gebruikte syntaxis kunnen voorstellen die niet alleen geweldig werkt, maar ook heel expliciet is in wat je wilt (daarom niet eng of mysterieus)

git checkout <branch>@{"20 minutes ago"} <filename>

Antwoord 9

Lijst vastleggen

git log  --oneline

Stable commit heeft bijvoorbeeld hash: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81

git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master

Antwoord 10

Met Git 2.23+ (augustus 2019) zou het juiste commando om bestanden te herstellen (en de index) moeten zijn… git restore(niet reset --hardof de verwarrende git checkout-opdracht)

Dat is:

git restore -s=HEAD --staged --worktree -- .

Of de verkorte vorm:

git restore [email protected] -SW -- .

Antwoord 11

Ik had een identieke situatie. In mijn geval was de oplossing:

git checkout -- .

Antwoord 12

Als u de opdracht git rm -r --cached .op een REPO met wijzigingen die niet worden geënsceneerd (dus ook niet gepleegd), kunt u de bewerking ongedaan maken (UnSplowing of deletion) ongedaan maken De opdracht git restore --staged .

Dus in een notendop, tot ongedaan maken git rm -r --cached .U hoeft alleen maar te gebruiken git restore --staged .


Antwoord 13

Ik had precies hetzelfde probleem: opruimen van mijn mappen, herschikken en verplaatsen van bestanden. Ik ging binnen: git rm . en druk op ENTER; En vond toen mijn darmen een beetje los. Gelukkig typte ik niet in Git Comit -M -M “” meteen.

De volgende opdracht

git checkout .

herstelde alles en heeft mijn leven opgeslagen.

Other episodes