Les fichiers d'arbre de travail suivants, non tracés, seraient remplacés par merge, mais je m'en fous.

sur ma branche, j'avais des dossiers .gitignore

sur une branche différente ces fichiers ne 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 pas.

malheureusement je comprends:

les fichiers d'arbre de travail suivants, non tracés, seraient remplacés par merge

comment modifier ma commande pull pour écraser ces fichiers, sans que je doive les trouver, les déplacer ou les supprimer moi-même?

155
demandé sur ROMANIA_engineer 2013-07-01 16:16:32
la source

10 ответов

le problème est que vous ne suivez pas les fichiers localement mais les fichiers identiques sont suivis à distance donc afin de" tirer " votre système serait forcé d'écraser les fichiers locaux qui ne sont pas contrôlés par version.

Essayez d'exécuter

git add * 
git stash
git pull

cela va suivre tous les fichiers, supprimer toutes vos modifications locales à ces fichiers, et puis obtenir les fichiers à partir du serveur.

281
répondu userFog 2014-10-29 22:44:42
la source

vous pouvez essayer la commande pour effacer les fichiers non tracés à partir du local

git 2.11 et versions plus récentes

git clean  -d  -f .
"151940920 plus anciens" git
git clean  -d  -f ""

où - D peut être remplacé par le texte suivant:

  • -x signifie que les fichiers ignorés sont également supprimés ainsi que les fichiers inconnus de git.

  • - D signifie supprimer les répertoires Non tracés en plus de des fichiers non tracés.

  • -f est requise pour le forcer à exécuter.

, voici le lien qui peut être utile.

46
répondu silentBeep 2018-04-25 07:11:24
la source

les seules commandes qui ont fonctionné pour moi étaient:

git fetch --all
git reset --hard origin/{{your branch name}}
39
répondu Asaf Manassen 2016-04-24 17:36:32
la source

S'il s'agit d'une opération unique, vous pouvez simplement supprimer tous les fichiers non tracés du répertoire de travail avant de procéder à l'extraction. Lire comment supprimer les fichiers locaux (non tracés) de l'arbre de travail Git actuel? pour des informations sur la façon de supprimer tous les fichiers non tracés.

assurez-vous de ne pas supprimer accidentellement le fichier introuvable dont vous avez encore besoin;)

18
répondu mnagel 2017-05-23 15:10:43
la source

vous pouvez essayer cette commande

git clean -df
17
répondu Amr Mohammed 2016-01-28 19:49:54
la source

supprimer tous les fichiers non tracés:

git clean  -d  -fx .
10
répondu Abhishek Goel 2018-04-25 07:15:42
la source

si vous envisagez d'utiliser le drapeau -f , vous pourriez d'abord l'exécuter comme un dry-run. Juste que vous savez d'avance quel genre de situation intéressante vous allez finir par la suite ; - p

-n 
--dry-run 
    Don’t actually remove anything, just show what would be done.
6
répondu Maarten 2016-08-09 16:31:20
la 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:

git clean -f '/path/to/file/'

N'oubliez pas de l'exécuter avec le drapeau-n en premier si vous souhaitez voir quels fichiers git clean supprimera. Notez que ces fichiers seront supprimés. Dans mon cas, je ne me souciais pas d'eux de toute façon, donc c'était une meilleure solution pour moi.

6
répondu MMM 2017-03-29 05:01:20
la source

git merge -f ne quittez pas, mais git checkout -f ne.

git checkout -f donor-branch
git checkout receiving-branch
git merge donor-branch

cela fonctionne parce que vous faites git force-checkout l'autre branche, et donc force-remplacer les fichiers non tracés par leurs versions tracées. Si vous revenez ensuite à votre branche d'origine, les fichiers suivis disparaissent, comme dans chaque caisse où les fichiers n'existent pas dans la branche de destination.

vous mentionnez une commande pull dans votre réponse. Pull n'est rien mais git fetch (acquérir l'historique à distance) + une fusion automatique de la branche amont; si vous précédez la solution ci-dessus avec un git fetch , et fusionner la branche amont, les étapes se présenteront comme suit.

git fetch origin
git checkout -f origin/mybranch
git checkout mybranch
git merge origin/mybranch
1
répondu Esteis 2018-07-04 19:48:37
la source

en quoi cette réponse diffère-t-elle des autres réponses?

la méthode présentée ici ne supprime que les fichiers qui seraient écrasés par fusion. Si vous avez d'autres fichiers non tracés (éventuellement ignorés) dans le répertoire, cette méthode ne les supprimera pas.

la solution

cet extrait extraira tous les fichiers non tracés qui seraient écrasés par git pull et supprimera ils.

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"

et puis il suffit de faire:

git pull

ce n'est pas git porcelaine commande donc toujours double vérifier ce qu'il serait faire avec:

git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"

explication-parce que les doublures sont effrayantes:

voici une répartition de ce qu'il fait:

  1. git pull 2>&1 - capture git pull sortie et redirigez tout vers stdout pour que nous puissions facilement le capturer avec grep .
  2. grep -E '^\s - le but est de capturer la liste des fichiers non tracés qui seraient écrasés par git pull . Les noms de fichiers ont un tas de caractères blancs en face d'eux donc nous l'utilisons pour les obtenir.
  3. cut -f2- - supprimer les espaces au début de chaque ligne capturée en 2.
  4. xargs -I {} rm -rf "{}" nous xargs itérez tous les fichiers, enregistrez leur nom dans " {} "et appelez rm pour chacun d'eux. Nous utilisons -rf pour forcer la suppression et la suppression des répertoires Non tracés.

Il serait bien de remplacer les étapes 1 à 3 avec de la porcelaine de commande, mais je ne suis pas au courant de tout équivalent.

0
répondu matt 2018-09-13 14:00:36
la source

Autres questions sur git merge git-merge git-fetch