Sur ma branche j'avais quelques fichiers en .gitignore
Sur une branche différente, ces fichiers ne le sont pas.
Je veux fusionner les différentes branches dans la mienne, et je me fiche que ces fichiers ne soient plus ignorés ou non.
Malheureusement, je reçois ceci:
Les fichiers d'arborescence de travail non suivis suivants seraient remplacés par la fusion
Comment modifier ma commande pull pour écraser ces fichiers, sans que je doive trouver, déplacer ou supprimer moi-même ces fichiers?
Réponses:
Le problème est que vous ne suivez pas les fichiers localement mais que des fichiers identiques sont suivis à distance, afin de "tirer" votre système serait obligé d'écraser les fichiers locaux qui ne sont pas contrôlés par la version.
Essayez de courir
Cela suivra tous les fichiers, supprimera toutes les modifications locales apportées à ces fichiers, puis récupérera les fichiers du serveur.
la source
git add -A .; git stash
travaillé pour moi. Lagit add *
variante s'est plainte des chemins ignorés.Vous pouvez essayer de supprimer les fichiers non suivis du local
Git 2.11 et versions plus récentes:
Versions plus anciennes de Git:
Où
-d
peut être remplacé par ce qui suit:-x
les fichiers ignorés sont également supprimés ainsi que les fichiers inconnus de Git.-d
supprimer les répertoires non suivis en plus des fichiers non suivis.-f
est nécessaire pour le forcer à s'exécuter.Voici également le lien qui peut être utile.
la source
-i
pour le mode interactif. En plus de supprimer le répertoire indésirable, je viens également de supprimer mes paramètres utilisateur pour le projet :-(-x
peut faire mal.Les seules commandes qui ont fonctionné pour moi étaient:
la source
Un remplacement pour
git merge
cela écrasera les fichiers non suivisLes commentaires ci-dessous utilisent «FOI» pour les «fichiers d'intérêt», les fichiers
Un remplacement pour
git pull
cela écrasera les fichiers non suivispull = fetch + merge
, nousgit fetch
suivons donc l'git checkout -f, git checkout, git merge
astuce ci-dessus.Explication détaillée
git merge -f
n'existe pas, mais existegit checkout -f
.Nous utiliserons
git checkout -f
+git checkout
pour supprimer les fichiers d'intérêt (voir ci-dessus), puis votre fusion pourra se dérouler normalement.Étape 1. Cette étape remplace de force FOI non suivi par des versions suivies de la branche donneur (il vérifie également la branche donneur et met à jour le reste du répertoire de travail).
Étape 2. Cette étape supprime le FOI car ils sont suivis dans notre branche actuelle (donneur) et absents dans le
receiving-branch
commutateur vers lequel nous basculons.Étape 3. Maintenant que la FOI est absente, la fusion dans la branche des donateurs n'écrasera aucun fichier non suivi, nous n'obtiendrons donc aucune erreur.
la source
Supprimez tous les fichiers non suivis:
la source
S'il s'agit d'une opération ponctuelle, vous pouvez simplement supprimer tous les fichiers non suivis du répertoire de travail avant d'effectuer l'extraction. Lire Comment supprimer des fichiers locaux (non suivis) de l'arborescence de travail Git actuelle?pour savoir comment supprimer tous les fichiers non suivis.
Assurez-vous de ne pas supprimer accidentellement le fichier non suivi dont vous avez encore besoin;)
la source
Vous pouvez essayer cette commande
la source
Mise à jour - une meilleure version
Cet outil ( https://github.com/mklepaczewski/git-clean-before-merge ) permettra:
git pull
équivalents,git pull
équivalents,git pull
version,--pretend
option qui ne modifiera aucun fichier.Ancienne version
En quoi cette réponse diffère-t-elle des autres réponses?
La méthode présentée ici supprime uniquement les fichiers qui seraient écrasés par la fusion. Si vous avez d'autres fichiers non suivis (éventuellement ignorés) dans le répertoire, cette méthode ne les supprimera pas.
La solution
Cet extrait extraira tous les fichiers non suivis qui seraient écrasés par
git pull
et les supprimera.puis faites simplement:
Ce n'est pas une commande git porcelain alors vérifiez toujours ce qu'il ferait avec:
Explication - parce que l'une des doublures fait peur:
Voici une ventilation de ce qu'il fait:
git pull 2>&1
- capturez lagit pull
sortie et redirigez le tout vers stdout afin que nous puissions facilement le capturer avecgrep
.grep -E '^\s
- l'intention est de capturer la liste des fichiers non suivis qui seraient écrasés pargit pull
. Les noms de fichiers ont un tas de caractères blancs devant eux, nous les utilisons donc pour les obtenir.cut -f2-
- supprimer les espaces blancs au début de chaque ligne capturée en 2.xargs -I {} rm -rf "{}"
- nousxargs
pour parcourir tous les fichiers, enregistrer leur nom dans "{}" et appelerrm
chacun d'eux. Nous utilisons-rf
pour forcer la suppression et la suppression des répertoires non suivis.Ce serait formidable de remplacer les étapes 1 à 3 par la commande porcelaine, mais je ne connais aucun équivalent.
la source
git pull
pargit checkout <branch_name>
Si vous envisagez d'utiliser le
-f
drapeau, vous pouvez d'abord l'exécuter comme un essai à sec. Juste que vous savez d'avance quel genre de situation intéressante vous vous retrouverez ensuite ;-Pla source
En plus de la réponse acceptée, vous pouvez bien sûr supprimer les fichiers s'ils ne sont plus nécessaires en spécifiant le fichier:
N'oubliez pas de l'exécuter avec l'indicateur -n d'abord si vous souhaitez voir quels fichiers git clean supprimera. Notez que ces fichiers seront supprimés. Dans mon cas, je m'en fichais de toute façon, c'était donc une meilleure solution pour moi.
la source
Une façon de le faire consiste à cacher vos modifications locales et à tirer du référentiel distant. De cette façon, vous ne perdrez pas vos fichiers locaux car les fichiers iront à la cachette.
Vous pouvez vérifier vos fichiers cachés locaux en utilisant cette commande -
git stash list
la source
Pour ceux qui ne le savent pas, git ignore les différences de nom en majuscules / minuscules dans les fichiers et les dossiers. Cela se révèle être un cauchemar lorsque vous les renommez exactement au même nom avec un cas différent.
J'ai rencontré ce problème lorsque j'ai renommé un dossier de "Petstore" en "petstore" (en majuscules en minuscules). J'avais modifié mon fichier .git / config pour arrêter d'ignorer la casse, apporté des modifications, écrasé mes validations et caché mes modifications pour passer à une autre branche. Je ne pouvais pas appliquer mes modifications cachées à cette autre branche.
Le correctif que j'ai trouvé qui fonctionnait était de modifier temporairement mon fichier .git / config pour ignorer temporairement la casse à nouveau. Cela a
git stash apply
réussi. Ensuite, j'ai changé ignoreCase pourfalse
. J'ai ensuite tout ajouté à l'exception des nouveaux fichiers dans le dossier petstore qui, étrangement, ont prétendu avoir été supprimés, pour une raison quelconque. J'ai commis mes modifications, puis j'ai courugit reset --hard HEAD
pour me débarrasser de ces nouveaux fichiers non suivis. Mon commit est apparu exactement comme prévu: les fichiers du dossier ont été renommés.J'espère que cela vous aidera à éviter mon même cauchemar.
la source
git pull -f
alorsgit checkout .
. Quel cauchemard.Ni nettoyer / réinitialiser / checkout / rebase dur n'a fonctionné pour moi.
J'ai donc juste supprimé les fichiers dont git se plaignait *
* J'ai vérifié si ces fichiers peuvent être supprimés en vérifiant un nouveau dépôt dans un dossier séparé (les fichiers n'étaient pas là)
la source
Dans mon cas, quand j'ai eu ce problème. J'avais un fichier local que j'avais renommé sur la télécommande.
En essayant de
git pull
Git m'a dit que le nouveau nom de fichier n'était pas suivi - qu'il était sur la télécommande bien qu'il n'existait pas encore en local.Parce qu'il n'y avait pas d'exemple localement, je ne pouvais pas le faire
git pull
avant de le fairegit rm
sur l' ancien nom de fichier (ce qui n'était pas évident au début à cause de mon idée stupide de le renommer).la source
Si vous avez les fichiers écrits sous .gitignore, supprimez les fichiers et réexécutez git pull. Cela m'a aidé.
la source
Le problème est lorsque nous avons des modifications entrantes qui fusionneront un fichier non suivi, se plaint git. Ces commandes m'ont aidé:
la source