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/file
opnieuw 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 --help
en git checkout --help
voor 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 add
commando’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 changes
omvat 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 --hard
of de verwarrende git checkout
-opdracht)
Dat is:
git restore -s=HEAD --staged --worktree -- .
Of de verkorte vorm:
git restore -s@ -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.