web-dev-qa-db-fra.com

git merge "supprimé par nous"

Je suis en train de faire une grande fusion . De nombreux fichiers ont été supprimés du référentiel dans ma branche, et lors de la fusion, je souhaite conserver cette modification pour tous ces fichiers. aura besoin d’une fusion explicite et j’ai l’intention d’utiliser git mergetool pour les fusionner.

Je souhaite conserver le changement "supprimé par nous" (c'est-à-dire que les fichiers doivent rester supprimés) pour tous les fichiers supprimés. Autres conflits de fusion que je veux résoudre moi-même.
Est-il possible de dire à git de garder les fichiers supprimés supprimés?

24
kris

Voici une solution partielle:

  1. Résoudre tous les conflits de fusion non supprimés à la main, ce que vous devez faire quand même

  2. Tapez git diff --name-only --diff-filter=U pour obtenir une liste de tous les fichiers restants en conflit. Ces fichiers doivent être ceux que vous souhaitez supprimer. Enregistrez la liste des fichiers supprimés sous le nom filesToRemove.txt

  3. Ensuite, faites cat filesToRemove.txt | xargs git rm pour supprimer tous les fichiers.

12
Tim Biegeleisen

Une ligne correctif:

git diff --name-only --diff-filter=U | xargs git rm
8

Vous pouvez résoudre ce problème en conservant les fichiers modifiés en les rajoutant et en les validant une nouvelle fois:

git add .

ou 

git add -A

Puis commettre

git commit

Si vous voulez résoudre le conflit en supprimant les fichiers, vous devez exécuter git rm au lieu de git add.

Voir: Résolution d'un conflit de fusion à partir de la ligne de commande

5
androidevil

Je vais laisser la question - car je suis sûr qu'il y a une bonne réponse - voici ce que j'ai fait entre-temps:

  1. Faites git status pour voir la liste des fichiers supprimés (1082) et le nombre de conflits de fusion (3)
  2. Dans un éditeur de texte, éditez manuellement les 3 fichiers qui avaient des conflits de fusion, puis faites git add sur eux
  3. Créez un fichier texte avec une ligne avec la lettre "d" sur chaque ligne et rien d'autre pour chacun des fichiers (1082) supprimés (d.txt)
  4. exécuter git mergetool < d.txt

Pas élégant, mais plus rapide que d'appuyer sur la lettre "d" et entrez 1082 fois

0
kris

J'ai aussi observé

abc.txt: doit fusionner

en essayant 

git rm abc.txt

après la sélection et la visualisation du fichier en statut "supprimé par nous".

Je me suis retrouvé avec une suppression résolue en procédant comme suit:

git add abc.txt
rm abc.txt
git add abc.txt

cela ajoute abc.txt à la zone de stockage intermédiaire (en recréant essentiellement le fichier "supprimé par nous" (qui résout le statut du conflit).

supprime ensuite les fichiers du système de fichiers

ajoute ensuite à la zone de déclaration le fait que le fichier est maintenant parti.

il y a probablement des astuces de Shell pour exécuter ces 3 commandes sur votre ensemble de plus de 1000 fichiers sans trop de maux de tête.

il existe probablement de meilleurs moyens de gérer cela, mais comme git rm abc.txt ne fonctionnait pas comme prévu, nous pensions partager un ensemble alternatif de commandes qui semblent avoir fonctionné sans utiliser mergetool.

0
Brian Davis