web-dev-qa-db-fra.com

Résoudre les conflits de fusion: forcer l'écrasement de tous les fichiers

Je travaille sur un référentiel git par moi-même (alors oui, je connais les implications et les avertissements de le faire) et d'une manière ou d'une autre l'un des arbres a obtenu un commit après avoir été poussé alors qu'il n'aurait pas dû.

Maintenant, j'essaie de reculer et il se plaint de centaines de conflits de fusion.

Existe-t-il un moyen de dire à git de avec force écraser localement tous les fichiers provenant du serveur distant? Existe-t-il un moyen plus rapide que de faire git reset --hard HEAD~1 puis faire le pull?

Sur cette même note, existe-t-il un moyen de faire de même avec une simple fusion? Tout ce que j'ai vu suggère de vérifier chaque fichier pendant la phase de résolution des conflits de fusion, mais avec des centaines de fichiers, il n'est tout simplement pas possible de le faire manuellement.

38
Qix

Il existe trois solutions simples pour copier la dernière version qui se trouve dans votre référentiel distant, en ignorant toutes les modifications que vous avez apportées localement:

  1. Jetez votre référentiel et clonez à nouveau. C'est la solution la plus simple, mais si votre référentiel est volumineux, cela peut prendre du temps et nécessiter des efforts supplémentaires comme re configureing, etc.

  2. Ignorez les modifications locales avec git reset --hard <hash> puis faites un git pull. Le problème est que vous devez d'abord trouver un commit qui précède l'historique des modifications que vous essayez d'éviter. Après avoir réinitialisé ce hachage de validation, effectuez une git pull.

  3. Fait une git fetch pour apporter les mises à jour à votre référence locale de la branche distante (généralement Origin/master), puis effectuez une git reset --hard en passant cette référence, c'est-à-dire git reset --hard Origin/master.

65
git reset --hard {remote_repository_name}/{branch_name}

Exemple:

git reset --hard upstream/branch1

Si vous travaillez avec une branche, vous pouvez utiliser le code ci-dessus, mais avant cela, vous devez définir (en amont ou Origin) sur votre référentiel local,

git remote add upstream https://github.com/lakini/example.git

ici, https://github.com/lakini/example.git est le référentiel amont distant.

Comme cela, nous pouvons également travailler dans le référentiel distant (Origin).

git reset --hard Origin/branch1
4
Sithara