Comment puis-je annuler toutes les modifications locales dans Git projet géré par l'état précédent?
J'ai un projet dans lequel j'ai couru git init
.
Après plusieurs commits, je n'ai git status
qui m'a dit que tout était à jour et il n'y avait pas de changements locaux.
Ensuite, j'ai effectué plusieurs changements consécutifs et réalisé que je voulais à tout jeter et de revenir à mon état d'origine. Sera cette commande le faire pour moi?
git reset --hard HEAD
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez annuler les modifications apportées à votre copie de travail, faites ceci:
Si vous souhaitez annuler les modifications apportées à l'index (c'est à dire, que vous avez ajouté), ce faire. Avertissement ceci permet de réinitialiser tous vos unpushed s'engage à maîtriser!:
Si vous voulez revenir un changement que vous avez commis ce faire:
Si vous voulez retirer sans traces de fichiers (par exemple, de nouveaux fichiers, les fichiers générés):
Ou non chaînée des répertoires (par exemple, nouveaux ou générés automatiquement les répertoires):
git checkout path/to/file
ne revenir les variations locales depath/to/file
git reset
revient votre s'engage à maîtriser! (Ce n'était pas assez clair pour moi que ajouté serait include commis, et j'ai accidentellement perdu mes modifications)git checkout .
etgit reset [--hard HEAD]
n'ai pas de travail, j'ai dû faire unegit clean -fd
de revenir de mes modifications.git clean
ainsigit reset
ne pas réinitialiser vos modifications,git reset --hard
le fait.git reset --mixed
("Réinitialise l'index, mais pas de l'arbre de travail (c'est à dire, les fichiers modifiés sont conservés mais pas marqué pour la validation) et des rapports de ce qui n'a pas été mis à jour. C'est l'action par défaut.") qui est ce que j'ai dit. git-scm.com/docs/git-resetgit checkout .
dans le répertoire racine de votre projet. Ou dans le sous répertoire que vous voulez revenir.git checkout .
dans la racine de mon projet s'applique uniquement aux fichiers que dir, j'ai eu à fairegit checkout *
de revenir tous les sous-répertoires.--hard
. En fait, parfois c'est pas bon... à voir. Vous pourriez avoir plus de chance avec le--gentle
de commande.Remarque: Vous pouvez également exécuter
comme
sera pas retirer sans traces de fichiers, où que git-clean supprimer tous les fichiers de la zone racine du répertoire qui ne sont pas sous git de suivi. AVERTISSEMENT - ÊTRE PRUDENT AVEC CE! Il est utile pour exécuter un dry-run avec git-propre d'abord, pour voir ce qu'il va supprimer.
C'est particulièrement utile lorsque vous obtenez le message d'erreur
Qui peut se produire lorsque vous effectuez plusieurs choses, l'une en cours de mise à jour d'une copie de travail lorsque vous et votre ami avez à la fois ajouté un nouveau fichier du même nom, mais il s'est engagé dans le contrôle de source première, et vous n'avez pas de soins sur la suppression de votre sans traces copie.
Dans cette situation, faire une marche à sec permettra également de vous montrer une liste des fichiers qui seraient remplacées.
Re-cloner
.gitignore
(comme les fichiers de compilation).gitignore
Suivantes sont d'autres commandes que j'oublie tous les jours.
Nettoyer et réinitialiser
.gitignore
(comme les fichiers de compilation).gitignore
Propre
.gitignore
(comme les fichiers de compilation).gitignore
Réinitialiser
.gitignore
(comme les fichiers de compilation).gitignore
Notes
De cas de Test pour la vérification de tous les ci-dessus (utilisez bash ou sh):
Voir aussi
git revert
pour faire de nouvelles s'engage à ce que annuler avant commetgit checkout
à remonter dans le temps d'avant s'engage (peut exiger l'exécution de commandes ci-dessus en premier)git stash
même quegit reset
ci-dessus, mais vous pouvez l'annulergit clean -f -d -x
: si l'option-x est spécifié, les fichiers ignorés sont également supprimés. Cela peut, par exemple, être utile pour supprimer tous les produits de construction.- à partir de GIT docsSi vous voulez annuler tous les changements ET être à jour avec la distance en cours de maître (par exemple, vous trouvez que la TÊTE de maître, a progressé depuis que vous avez bifurqué et vos push est "rejeté"), vous pouvez utiliser
origin
dansgit reset --hard origin/master
(qui fonctionne) – sans elle (c'est à diregit reset --hard
) rien ne semble changé.Chercher dans le dépôt git-reflog. C'est la liste de tous les états, il se souvient (la valeur par défaut est de 30 jours), et vous pouvez simplement checkout celui que vous voulez. Par exemple:
git rebase -i
avait mal tourné (fini d'effacer une partie s'engage à cause d'une faute de frappe). Grâce à cette astuce, je suis de retour dans un bon état!DANGER à l'AVANCE: (merci de lire les commentaires. L'exécution de la commande proposée dans ma réponse pourrait supprimer plus que vous le souhaitez)
pour supprimer complètement tous les fichiers, y compris les répertoires, j'ai dû courir
Après la lecture d'un tas de réponses et de les essayer, j'ai trouvé divers cas limites qui signifie parfois, ils ne sont pas entièrement nettoyer la copie de travail.
Voici mon script bash pour le faire, qui travaille tout le temps.
Exécuter à partir de la copie de travail répertoire racine.
error: pathspec 'HEAD' did not match any file(s) known to git.
git checkout HEAD
git reset --hard
revient dossiers (mise en scène ou pas),git clean -f -d
enlève sans traces de fichiers,git checkout -- HEAD
pourquoi avons-nous besoin de ce alors?simplement dire
il va supprimer tous vos locaux changements. et vous pouvez aussi l'utiliser plus tard en disant
git stash pop
serait de supprimer automatiquement le niveau supérieur de l'planqué changer pour vousgit stash drop
de supprimer le dernier planqué de l'état sans s'appliquent à la copie de travail.J'ai rencontré un problème similaire.
La solution est d'utiliser
git log
de regarder la version de la validation est différente de la télécommande. (E. g. la version est3c74a11530697214cbcc4b7b98bf7a65952a34ec
).Ensuite utiliser
git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
pour annuler la modification.J'ai cherché un sujet similaire,
Voulait se jeter local s'engage à:
N'a donc le ci-dessous:
Vérifier:
maintenant modifications locales sont perdues, retour à la première cloné de l'état, point 1 ci-dessus.
Vous ne pouvez pas forcément envie/besoin de ranger vos fichiers dans votre répertoire de travail, mais au lieu de simplement se débarrasser d'eux complètement. La commande
git clean
le fera pour vous.Certains cas d'utilisation courante pour ce faire serait de supprimer les fichiers inutiles qui a été générée par des fusions ou des outils externes ou supprimer d'autres fichiers de sorte que vous pouvez exécuter une construction propre.
Gardez à l'esprit, vous voulez être très prudent à ce commandement, car il est conçu pour supprimer des fichiers à partir de votre répertoire local de travail qui ne sont PAS SUIVIES. si vous avez soudainement changer d'avis après l'exécution de cette commande, il n'est plus possible de revenir en arrière pour voir le contenu des fichiers qui ont été supprimés. Une alternative qui est plus sûr est d'exécuter
git stash --all
qui permettra d'éliminer tout, mais l'enregistrer tout dans une cachette. Cette cachette peut ensuite être utilisé ultérieurement.
Toutefois, si vous avez réellement NE voulez supprimer tous les fichiers et nettoyer votre répertoire de travail, vous devez exécuter
git clean -f -d
Cela va supprimer tous les fichiers et également tous les sous-répertoires qui n'ont pas de points à la suite de la commande. Une chose intelligente à faire avant l'exécution de la
git clean -f -d
de commande est à exécuterqui vous montrera un aperçu de ce que SERA supprimé après l'exécution de
git clean -f -d
Voici donc un résumé de vos options de plus agressif à moins agressif
Option 1: Supprimer tous les fichiers localement(Plus agressif)
Option 2: Aperçu de la au-dessus de l'impact(Aperçu plus agressif)
Option 3: Ranger tous les fichiers (Moins agressif)
Essayez ceci pour annuler tous les changements uncommited dans les locaux de la succursale
Mais si vous voyez une erreur comme ceci:
Vous pouvez naviguer vers".git dossier, puis supprimer l'index.verrouillage de fichier:
Enfin, exécutez de nouveau la commande: