7701 votes

La Force de Git pour remplacer les fichiers locaux sur pull

Comment puis-je la force un écrasement des fichiers en local, sur un Git pull?

Le scénario est le suivant:

  • Un membre de l'équipe est en train de modifier les modèles pour un site web, nous travaillons sur
  • Il est l'ajout de quelques images dans le répertoire d'images (mais oublie de les ajouter en vertu de l' contrôle de la source)
  • Il est à envoyer les images par mail à moi
  • Je suis ajoutant des images sous le contrôle de la source et de la pousser à Github avec d'autres changements
  • Il ne peut pas extraire les mises à jour à partir de Github parce que git ne voulez pas écraser ses fichiers.

Les erreurs que j'obtiens sont:

erreur: sans traces de travail de l'arborescence de fichier "public/images/icon.gif" serait remplacé par fusion.

Comment puis-je la force de Git pour les remplacer? Le gars est un concepteur - je suis généralement à résoudre tous les conflits par la main de sorte que le serveur dispose de la version la plus récente qu'il a juste besoin de mise à jour sur son ordinateur.

10848voto

RNA Points 19596

Je pense que c'est la bonne façon:

git fetch --all
git reset --hard origin/master

Explication:

git fetch télécharge la dernière version de la télécommande sans essayer de fusionner ou de rebase quoi que ce soit.

Puis l' git reset réinitialise la branche master ce que vous venez de récupérer. L' --hard les changements d'option tous les fichiers dans votre arbre de travail pour faire correspondre les fichiers dans origin/master, donc si vous avez des modifications locales, ils seront perdus. Avec ou sans --hard, toutes les modifications locales, qui n'ont pas été poussés seront perdues.

Si vous avez des fichiers qui ne sont pas suivis par Git (par exemple, téléchargé le contenu de l'utilisateur), ces fichiers ne seront pas affectés.

995voto

Travis R Points 8935

Essayez ceci:

git reset --hard HEAD
git pull

Devrait faire ce que vous voulez.

487voto

David Avs Points 2105

AVERTISSEMENT: git clean supprime toutes vos sans traces de fichiers/répertoires et ne peut pas être annulé.


Parfois, juste en clean -f n'aide pas. Dans le cas où vous avez sans traces de RÉPERTOIRES, l'option-d nécessaires:

git reset --hard HEAD
git clean -f -d
git pull

402voto

Buildrr LLC Points 1097

Comme le Hérisson, je pense que les réponses sont terribles. Mais si sa pourrait être mieux, je ne pense pas que c'est aussi élégante qu'elle pourrait l'être. J'ai trouvé à faire c'est à l'aide de "chercher" et "fusion" avec une stratégie définie. Qui doit faire en sorte que vos modifications sont conservées tant qu'elles ne sont pas l'un des fichiers que vous essayez de forcer le remplacer.

d'abord faire une livraison de vos modifications

 git add *
 git commit -a -m "auto dev server commit"

ensuite, récupérez les changements et les remplacer si il y a un conflit

 git fetch origin master
 git merge -s recursive -X theirs origin/master

300voto

Johanneke Points 1099

Je voulais faire un commentaire, mais je n'ai pas assez de rep pour que...

Je voulais faire remarquer qu'au lieu de faire

git fetch --all
git reset --hard origin/master

Je vous conseille de faire ce qui suit:

git fetch origin
git reset --hard origin/master

Pas besoin d'aller chercher toutes les télécommandes si vous allez à réinitialiser à l'origine/la branche master de droit?

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