git herstel verwijderd bestand waar geen vastlegging is gedaan na het verwijderen

Ik heb enkele bestanden verwijderd.

Ik heb me nog NIET vastgelegd.

Ik wil mijn werkruimte opnieuw instellen om de bestanden te herstellen.

Ik heb een git checkout ..

Maar de verwijderde bestanden ontbreken nog.

En git statustoont:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

Waarom zet git checkout .de werkruimte niet terug op HEAD?


Antwoord 1, autoriteit 100%

De uitvoer vertelt u wat u moet doen. git reset HEAD cc.propertiesenz.

Hierdoor wordt de rm-bewerking ongedaan gemaakt. Daarna zal het opnieuw uitvoeren van een git statusje vertellen dat je een git checkout -- cc.propertiesmoet doen om het bestand terug te krijgen.

Bijwerken:
Ik heb dit in mijn configuratiebestand

$ git config alias.unstage
reset HEAD

die ik meestal gebruik om dingen te unstagen.


Antwoord 2, autoriteit 27%

Je hebt de verwijdering gefaseerd, dus je moet het volgende doen:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout .checkt alleen uit van de index waar de verwijdering al is uitgevoerd.


Antwoord 3, autoriteit 24%

Doe gewoon git checkout path/to/file-I-want-to-bring-back.txt


Antwoord 4, autoriteit 20%

Alle niet-gefaseerdeverwijderingen in één keer herstellen, automatisch, zonder elk afzonderlijk pad op te geven:

git ls-files -z -d | xargs -0 git checkout --

Om alle gefaseerdeverwijderingen in één keer automatisch te herstellen, zonder elk afzonderlijk pad op te geven:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

Antwoord 5, autoriteit 10%

Aangezien je een git checkout .doet, lijkt het alsof je je branch probeert te herstellen naar de laatste commit-status.

Je kunt dit bereiken met een git reset HEAD --hard

Waarschuwing

Als u dit doet, kunnen al uw laatste wijzigingen worden verwijderd en uw wijzigingen de stage ongedaan maken. U kunt bijvoorbeeld werk verliezen. Het misschienis wat je wilt, maar bekijk de documentenom zeker te zijn.


Antwoord 6, autoriteit 9%

als je gebruikt

git rm filename

om een ​​bestand te verwijderen

git checkout path/to/filename

werkt niet, dus in dat geval

git checkout HEAD^ path/to/filename

zou moeten werken


Antwoord 7, autoriteit 4%

Hier is de opdracht die me op mijn mac heeft geholpen. Ik heb een paar van de andere oplossingen geprobeerd, maar ze werkten niet voor mij.

Git-versie op OSX Mavericks

mac-pro:main chris$ git version
git version 1.8.5.2 (Apple Git-48)

Opdracht

git checkout HEAD -- path/to/file/file.cc

Antwoord 8, autoriteit 3%

Hier zijn verschillende gevallen als referentie om anderen te helpen:

Als de verwijdering niet is vastgelegd, zal de onderstaande opdracht het verwijderde bestand in de werkboom herstellen.

$ git checkout -- <file>

Je kunt een lijst van alle verwijderde bestandenin de werkboom krijgen met de onderstaande opdracht.

$ git ls-files --deleted

Als de verwijdering is vastgelegd, zoek dan de commit waar het gebeurde en herstel het bestand van deze commit.

#find the commit hash where it had this file deleted
$ git rev-list -n 1 HEAD -- <file>

Het zou je iets moeten geven als c46e81aa403ecb8a0f7a323a358068345, gebruik nu deze commit-hash met de parent-operator (^) als volgt:

$ git checkout <commit>^ -- <file>

Voorbeeld:

$ git checkout c46e81aa403ecb8a0f7a323a358068345^ -- <file> 

In het geval dat u op zoek bent naar het pad van het te herstellen bestand, geeft de volgende opdracht een samenvatting weer van alle verwijderde bestanden.

$ git log --diff-filter=D --summary

Als u alleen de lijst met bestanden wilt weergeven:

git log --diff-filter=D --summary | grep "delete mode"

Antwoord 9, autoriteit 3%

Als u alle bestanden tegelijk wilt herstellen

Vergeet niet om de punt te gebruiken omdat het git vertelt om alle bestanden te pakken.

Dit commando zal de head resetten en alle wijzigingen unstagen:

$ git reset HEAD . 

Voer dit vervolgens uit om alle bestanden te herstellen:

$ git checkout .

Als je dan een git-status doet, krijg je:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Antwoord 10, autoriteit 2%

git checkout HEAD -- client/src/pp_web/index.cljs

Antwoord 11, autoriteit 2%

Gebruik git ls-filesom verwijderde (-d) of gewijzigde (-m) bestanden uit te checken.

git checkout $(git ls-files -d)

zie Hoe kan ik herstellen alleen de gewijzigde bestanden op een git checkout?


Antwoord 12

Wil je dit

zien

dat geldt voor gevallen waarin je gebruikte

git checkout -- .

voordat je iets begaat.

Misschien wilt u ook gemaakte bestanden verwijderen die nog niet zijn gemaakt. En je wilt ze niet. Met :

git reset -- .

Antwoord 13

Als je geen wijzigingen hebt doorgevoerd, hoef je alleen maar die wijzigingen op te bergen en je bent terug bij de laatste werkende commit.

git stash
git stash clear
git clean 

Antwoord 14

Ik vond dit bericht terwijl ik op zoek was naar antwoorden over het ongedaan maken van het verwijderen van een bestand dat in mijn werkdirectory was verwijderd na een samenvoeging van de branch van een ander. Er is nog geen commit gedaan na de fusie.
Omdat het een lopende samenvoeging was, kon ik het niet zomaar weer toevoegen met:

$ git reset <commitid#-where-file.cpp-existed> file.cpp

Ik moest naast de reset nog een stap doen om het bestand terug te brengen:

$ git checkout -- file.cpp

Antwoord 15

als u op zoek bent naar een verwijderde map.

git checkout ./pathToDir/*

Antwoord 16

Nieuwere git (de mijne is 2.27.0) is vriendelijker en de daadwerkelijke commando’s worden getoond tijdens “git status”.
Als u bijvoorbeeld het bestand tf.c heeft verwijderd, dan

$ git status
...
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
      deleted:    tf.c

Je zou “git restore tf.c” gebruiken om het terug te krijgen, zoals het zegt. Nooit meer zoeken!


Antwoord 17

Voor mij werkte git checkout {SHA1 of commit with version to restore} "{path to file to restore}"

Bijvoorbeeld git checkout 5a6b3179e58edff9c90326b9a04284b02fd67bd0 "src-ui/views/includes/radar.pug"

(uitgevoerd in de branch waar we het bestand in willen hebben)

Nadat die opdracht is uitgevoerd, zal het herstelde bestand bestaan ​​op de oorspronkelijke locatie (die moet worden gecomiteerd)


Antwoord 18

1. Vind die specifieke commit waarnaar je wilt terugkeren met:

  git log
This command will give you a list of commits done by you .

2.Ga terug naar die commit met :

   git revert <commit id> 

Nu zou je lokale vestiging alle bestanden in het bijzonder hebben


Antwoord 19

Als je ToroiseGIT hebt geïnstalleerd, selecteer dan het menu-item “Revert…” voor het pop-upmenu van de bovenliggende map.


Antwoord 20

VOORZICHTIG: maak eerst werk dat u wilt behouden.

U kunt uw werkruimte resetten(en de verwijderde bestanden herstellen)

git checkout ./*

Antwoord 21

Dit was de gemakkelijkste manier voor mij:

git checkout HEAD~1 path/to/myfile.rb

Ik heb het hiergevonden.


Een andere manier die ook voor mij werkte:

git reset HEAD path/to/myfile.rb
git restore path/to/myfile.rb

Antwoord 22

Ik had hetzelfde probleem, maar geen van de bovenstaande oplossingen werkte voor mij.
Wat ik uiteindelijk deed was:
– maak een leeg bestand met dezelfde naam
– vergelijk dit bestand met de lokale geschiedenis
– kopieer de geschiedenis naar een leeg bestand.


Antwoord 23

Ik had hetzelfde probleem en geen van de antwoorden die ik hier probeerde, werkte ook voor mij. Ik gebruik Intellij en ik had een nieuwe branch git checkout -b minimalExampleuitgecheckt om een ​​”minimaal voorbeeld” te maken op de nieuwe branch van een probleem door een aantal bestanden te verwijderen en een aantal andere aan te passen in het project. Helaas, ook al heb ik geen van de wijzigingen in de nieuwe “minimaal voorbeeld” -branch doorgevoerd, toen ik mijn “oorspronkelijke” -vertakking opnieuw uitcheckte, waren alle wijzigingen en verwijderingen van de “minimaal voorbeeld” -vertakking gebeurd in de ” originele” tak ook (althans zo leek het). Volgens git statuswaren de verwijderde bestanden net uit beide branches verdwenen.

Gelukkig, hoewel Intellij me had gewaarschuwd “het verwijderen van deze bestanden is mogelijk niet volledig herstelbaar”, was ik in staat om ze te herstellen (op de minimale voorbeeldbranch waaruit ze waren verwijderd) door met de rechtermuisknop op het project te klikken en lokale geschiedenis selecteren > Geschiedenis weergeven (en vervolgens herstellen op het meest recente geschiedenisitem dat ik wilde). Nadat Intellij de bestanden in de “minimale voorbeeld” -vertakking had hersteld, heb ik de vertakking naar de oorsprong gepusht. Daarna schakelde ik terug naar mijn “originele” lokale branch en voerde git pull origin minimalExampleuit om ze ook terug in de “originele” branch te krijgen.

Other episodes