52 votes

Comment rejeter les modifications en utilisant le dépôt

repo status me montre beaucoup de changements non désirés.

Il serait dupliqué si j'entre dans chaque projet et utilise git reset --hard.

Y a-t-il un moyen de réinitialiser tous les changements en utilisant repo, quelque chose comme repo reset --hard?

104voto

stdcall Points 3862

C'est la commande que j'utilise pour ce genre de choses, très utile

repo forall -vc "git reset --hard"

Que signifie tout cela ici ?

le repo forall s'exécutera pour tous les dépôts.

le -v est en mode verbeux, donc il affichera la sortie de la commande

le -c "COMMANDE À EXÉCUTER" est la commande réelle que vous souhaitez

34voto

pmod Points 4401

Si vous avez besoin de revenir à l'état propre du dossier de travail où vous n'avez pas de modifications locales et aucun fichier non suivi (c'est-à-dire où l'état du dépôt ne montre rien), j'ai trouvé ces deux approches utiles sur synchronisation du dépôt et fichiers supprimés/modifiés

repo forall -c 'git reset --hard ; git clean -fdx' 

ou

rm -rf * ; repo sync -l
// notez que .repo est préservé après cela

Notez que ceci n'est pas équivalent à initialiser un nouveau dépôt local et le synchroniser (par exemple, le stash est préservé)

Si vous n'êtes pas sûr de ce qui se passe, veuillez lire le fil complet synchronisation du dépôt et fichiers supprimés/modifiés

12voto

Shantha Kumara Points 993

La commande de travail est :

repo forall -vc "git reset --hard"

La description de la commande et des options

  • forall

Exécute la commande shell donnée dans chaque projet

Options (qui peuvent être utilisées avec la commande forall)

-c: commande et arguments à exécuter. La commande est évaluée via /bin/sh et tous les arguments après sont transmis en tant que paramètres de position du shell.

-p: affiche les en-têtes des projets avant la sortie de la commande spécifiée. Cela est réalisé en reliant des tubes aux stdin, stdout et flux de sterr de la commande, et en redirigeant toute la sortie dans un flux continu qui est affiché dans une seule session de paging.

-v: affiche les messages que la commande écrit sur sterr.

Pour plus d'informations, veuillez consulter le document repo

9voto

rans Points 91

J'utilise la commande repo forall avec la syntaxe ci-dessous et cela m'aide à réinitialiser les fichiers de suivi.

repo forall -p -c 'git checkout -f foo'

foo doit être remplacé par un nom de branche légitime.

5voto

h0tw1r3 Points 2512

Repo forall ne couvre pas tout l'arborescence git

#!/bin/bash
for gitdir in $(find . -type d -name .git -prune); do
    pushd $(dirname $gitdir)
    git reset --hard
    popd
done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X