2
votes

Ignorer toutes les modifications non validées, les fichiers modifiés, les fichiers ajoutés et non ajoutés

Quelle est la meilleure façon d'annuler les modifications non validées avec Git.

J'ai lu ceci, mais je veux bien comprendre ce que fait chaque étape.

git annule toutes les modifications non validées ou non enregistrées

git clean -fdx

" Cela déstockera tous les fichiers que vous pourriez avoir mis en scène avec git add ", que fait unstage signifie?

Cela signifie-t-il supprimer tous les fichiers ajoutés?

git checkout .

"annuler toutes les modifications locales non validées (doit être exécuté à la racine du dépôt)" h3>

Qu'est-ce qui est considéré comme la racine? Si je suis sur la branche A et que je souhaite ignorer toutes les modifications non validées sur la branche A, la branche A est-elle considérée comme la racine?

git reset

"AVERTISSEMENT: -x supprimera également tous les ignorés fichiers, y compris ceux spécifiés par .gitignore! Vous pouvez utiliser -n pour prévisualiser les fichiers à supprimer. "

Est-ce que cela supprime mes fichiers? y compris les fichiers ignorés? Et si les fichiers ignorés n'ont pas été modifiés?

Je veux simplement revenir à mon dernier commit et ne pas m'inquiéter des changements après cela. Quelle est la manière la plus simple et la plus sûre de faire cela?


3 Réponses :


1
votes

Vous pouvez faire (à partir de la racine de votre dépôt)

git stash

ou alternativement (comme déjà suggéré par eftshift0 et Code-Apprentice dans leurs réponses)

git reset --hard HEAD

Les deux commandes restaureront vos fichiers dans l'état où ils étaient au dernier commit.

Attention cependant: cette opération ne peut pas être annulée . Si vous avez le moindre doute sur l'utilisation future de ces modifications qui ont échoué, il vaut mieux les cacher :

git checkout HEAD -- .

(et avoir la possibilité de les inspecter ou les réutiliser ultérieurement)


Et à propos des autres commandes que vous avez envisagées, git reset ( HEAD est implicite ici) "seulement" récupère tous les changements de l'index, pas de l'arborescence de travail. Ainsi, vos modifications indésirables seraient toujours là dans vos fichiers, juste sans étape pour le prochain commit.

Et méfiez-vous de git clean -fdx , c'est une commande dangereuse si elle est mal utilisée, car il supprimera tous les fichiers non suivis. Il a son utilité, mais dans le cas que vous décrivez (obtenir votre projet dans l'état où il était au dernier commit), ce n'est pas ce dont vous avez besoin.


1 commentaires

@rkta C'est vrai. Mais je faisais référence aux modifications non validées, et bien que vous puissiez effectivement revenir à l'état précédent dans le reflog, vous ne récupérerez pas vos modifications non validées.



3
votes

Ce que les gens font habituellement quand ils pensent f% ck it, je ne veux pas voir ce que j'ai devant moi, je veux tout prendre dans mon arbre de travail tel qu'il était lors de la dernière révision et oubliez tout le reste est:

git reset --hard

À utiliser avec prudence: il faudra que votre arbre de travail soit tel qu'il est sur la révision sur laquelle vous êtes, tous les changements dans l'arbre de travail et dans l'index sont supprimés, vous ne les reverrez donc plus.


0 commentaires

3
votes

Que signifie unstage?

"unstage" signifie que les modifications sont supprimées de l'index. L'index est l'endroit où vous organisez les modifications avant de les valider. La désinstallation ne supprime aucun fichier ni n'annule les modifications de votre répertoire de travail.

Qu'est-ce qui est considéré comme la racine?

Ici, "root" fait référence au répertoire de base de votre projet. Cela n'a rien à voir avec les branches ou les commits.

Je veux simplement revenir à mon dernier commit et ne pas m'inquiéter des changements après. Quelle est la manière la plus simple et la plus sûre de faire cela?

Le moyen le plus simple de supprimer toutes vos modifications locales est d'utiliser

git reset --hard HEAD

2 commentaires

quelle est la différence entre git reset --hard HEAD et git reset --hard


Aucun. HEAD est implicite lorsque vous ne passez aucune référence explicitement.