J’ai un projet dans lequel j’ai lancé git init
. Après plusieurs commits, j’ai obtenu le git status
qui m’a dit que tout était à jour et qu’il n’y avait pas de changements locaux.
Puis j’ai fait plusieurs changements consécutifs et j’ai réalisé que je voulais tout jeter et revenir à mon état initial. Est-ce que cette commande le fera pour moi?
git reset --hard HEAD
Si vous souhaitez rétablir les modifications apscopes à votre copie de travail, procédez comme suit:
git checkout .
Si vous souhaitez rétablir les modifications apscopes à l’index (c’est-à-dire que vous avez ajouté), procédez comme suit. Attention, cela réinitialisera tous vos commits non compressés à maîsortingser! :
git reset
Si vous souhaitez annuler une modification que vous avez validée, procédez comme suit:
git revert
Si vous souhaitez supprimer les fichiers non suivis (par exemple, nouveaux fichiers, fichiers générés):
git clean -f
Ou des répertoires non suivis (par exemple, des répertoires nouveaux ou générés automatiquement):
git clean -fd
Note: Vous pouvez aussi vouloir courir
git clean -fd
comme
git reset --hard
ne supprimera pas les fichiers non suivis, où git-clean supprimera tous les fichiers du répertoire racine suivi qui ne sont pas sous suivi git. ATTENTION – ATTENTION AVEC CE! Il est utile de lancer une parsing sèche avec git-clean pour voir ce qu’il va supprimer.
Ceci est également particulièrement utile lorsque vous recevez le message d’erreur
~"performing this command will cause an un-tracked file to be overwritten"
Ce qui peut se produire lorsque vous effectuez plusieurs opérations, dont la mise à jour d’une copie de travail lorsque vous et votre ami avez tous deux ajouté un nouveau fichier du même nom, mais que vous le supprimez d’abord. .
Dans cette situation, faire une parsing à sec vous aidera également à afficher une liste de fichiers qui seraient écrasés.
Si vous voulez annuler tous les changements ET être à jour avec le maître distant actuel (par exemple, vous constatez que le HEAD principal a avancé depuis que vous l’avez dérivé et que votre push est «rejeté»), vous pouvez utiliser
git fetch # will fetch the latest changes on the remote git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.
Regardez dans git-reflog. Il listera tous les états dont il se souvient (la valeur par défaut est 30 jours) et vous pouvez simplement extraire celui que vous voulez. Par exemple:
$ git init > /dev/null $ touch a $ git add . $ git commit -m"Add file a" > /dev/null $ echo 'foo' >> a $ git commit -a -m"Append foo to a" > /dev/null $ for i in bcde; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null $ git reset --hard HEAD^^ > /dev/null $ cat a foo b c $ git reflog 145c322 HEAD@{0}: HEAD^^: updating HEAD ae7c2b3 HEAD@{1}: commit: Append e to a fdf2c5e HEAD@{2}: commit: Append d to a 145c322 HEAD@{3}: commit: Append c to a 363e22a HEAD@{4}: commit: Append b to a fa26c43 HEAD@{5}: commit: Append foo to a 0a392a5 HEAD@{6}: commit (initial): Add file a $ git reset --hard HEAD@{2} HEAD is now at fdf2c5e Append d to a $ cat a foo b c d
GIT=$(git rev-parse --show-toplevel) cd $GIT/.. rm -rf $GIT git clone ...
.gitignore
(comme les fichiers de construction) .gitignore
Voici d’autres commandes que j’oublie quotidiennement.
git clean -f -d -x git reset --hard
.gitignore
(comme les fichiers de construction) .gitignore
git clean -f -d -x
.gitignore
(comme les fichiers de construction) .gitignore
git reset --hard
.gitignore
(comme les fichiers de construction) .gitignore
Cas de test pour confirmer tout ce qui précède (utilisez bash ou sh):
mkdir project cd project git init echo '*.built' > .gitignore echo 'CODE' > a.sourceCode mkdir b echo 'CODE' > b/b.sourceCode cp -rbc git add . git commit -m 'Initial checkin' echo 'NEW FEATURE' >> a.sourceCode cp a.sourceCode a.built rm -rf c echo 'CODE' > 'd.sourceCode'
Voir également
git revert
à faire de nouveaux commits qui annulent les commits antérieurs git checkout
pour revenir dans le temps aux commits antérieurs (il peut être nécessaire d’exécuter les commandes ci-dessus en premier) git stash
même que git reset
ci-dessus, mais vous pouvez le défaire DANGER AHEAD: (veuillez lire les commentaires. L’exécution de la commande proposée dans ma réponse pourrait supprimer plus que vous ne le souhaitez)
supprimer complètement tous les fichiers, y compris les répertoires que je devais exécuter
git clean -f -d
Après avoir lu un tas de réponses et les avoir essayées, j’ai trouvé différents cas extrêmes qui signifient parfois qu’ils ne nettoient pas complètement la copie de travail.
Voici mon script bash actuel pour le faire, qui fonctionne tout le temps.
#!/bin/sh git reset --hard git clean -f -d git checkout -- HEAD
Exécuter à partir du répertoire racine de la copie de travail.
dis simplement
git stash
cela supprimera toutes vos tâches locales. et vous pouvez également utiliser plus tard en disant
git stash apply
J’ai rencontré un problème similaire. La solution consiste à utiliser git log
pour rechercher quelle version du commit local est différente de la télécommande. (Par exemple, la version est 3c74a11530697214cbcc4b7b98bf7a65952a34ec
).
Ensuite, utilisez git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
pour git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
le changement.
Vous ne voudrez pas nécessairement / ne pas avoir besoin de ranger votre travail / fichiers dans votre répertoire de travail, mais simplement de vous en débarrasser complètement. La commande git clean
fera pour vous.
Certains cas d’utilisation courants pour ce faire seraient de supprimer les erreurs générées par les fusions ou les outils externes ou de supprimer d’autres fichiers afin de pouvoir exécuter une version propre.
Gardez à l’esprit que vous souhaiterez être très prudent avec cette commande, car elle est conçue pour supprimer les fichiers de votre répertoire de travail local qui ne sont PAS SUIVIS. Si vous changez soudainement d’avis après avoir exécuté cette commande, vous ne pourrez plus voir le contenu des fichiers supprimés. Une alternative plus sûre consiste à exécuter
git stash --all
qui enlèvera tout, mais gardera tout dans une réserve. Cette réserve peut ensuite être utilisée.
Cependant, si vous voulez vraiment supprimer tous les fichiers et nettoyer votre répertoire de travail, vous devez exécuter
git clean -f -d
Cela supprimera tous les fichiers et tous les sous-répertoires qui ne contiennent aucun élément suite à la commande. Une chose intelligente à faire avant d’exécuter la commande git clean -f -d
est d’exécuter
git clean -f -d -n
qui vous montrera un aperçu de ce qui sera supprimé après l’exécution de git clean -f -d
Donc, voici un résumé de vos options du plus agressif au moins agressif
Option 1 : Supprimer tous les fichiers localement (le plus agressif)
git clean -f -d
Option 2 : prévisualiser l’impact ci-dessus (aperçu le plus agressif)
git clean -f -d -n
Option 3 : Stash tous les fichiers (les moins agressifs)
`git stash --all`
J’ai cherché un problème similaire,
Voulu jeter des engagements locaux:
Ainsi que ci-dessous:
git reset --hard origin/dev
Vérifier:
git status On branch dev Your branch is up-to-date with 'origin/dev'. nothing to commit, working tree clean
maintenant les commits locaux sont perdus, reviennent à l’état initial cloné, point 1 ci-dessus.
Essayez ceci pour annuler tous les changements non validés dans la twig locale
$ git reset --hard HEAD
Mais si vous voyez une erreur comme celle-ci:
fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.
Vous pouvez naviguer dans le dossier ‘.git’ puis supprimer le fichier index.lock:
$ cd /directory/for/your/project/.git/ $ rm index.lock
Enfin, relancez la commande:
$ git reset --hard HEAD