web-dev-qa-db-fra.com

Git: ne peut pas faire de commit partiel pendant une fusion (SourceTree)

Après avoir mis à jour SourceTree vers sa dernière version, je me bats avec ce problème. Supposons le scénario suivant:

Il existe des fichiers A , B et C sous le contrôle de version et il n'y a qu'une seule branche. Dans ma copie de travail, j'apporte quelques modifications au fichier A afin qu'il se transforme en A ' ainsi qu'en fichier - B à B '. Quelqu'un d'autre dans sa copie de travail modifie le fichier C -> C '.

Je met en scène et valide mes modifications dans le fichier B uniquement. J'ai donc une nouvelle révision: A , B ', C et copie de travail A ', B', C .

L'autre valide ses modifications, il fait donc une révision A , B , C ' et le pousse vers l'origine.

Et ça vient. Lorsque j'effectue le pull, j'obtiens des changements de fusion (le C '). Et je veux valider une révision composée de A , B ', C'. Je ne veux rien faire maintenant avec le fichier modifié A . Cependant, le GIT, SourceTree resp., Échoue avec:

fatal: impossible d'effectuer une validation partielle lors d'une fusion.

jusqu'à ce que j'étape ou annule les modifications apportées au fichier A .

Je suis sûr que la version précédente de SourceTree n'a pas exposé ce comportement.

Mise à jour 2017/05

Il apparaît dans la version la plus récente de SourceTree 2.0.20.1 que ce problème a été résolu. Cependant, assurez-vous que vous souhaitez mettre à jour vers cette version, car elle contient beaucoup de "bugs" (nouvelles fonctionnalités) que je n'aime vraiment pas.

9
Jan Drozen

fatal: impossible d'effectuer une validation partielle lors d'une fusion.

Cela indique que votre fusion est toujours en cours, il pourrait y avoir des conflits que vous devez encore résoudre.

Veuillez sélectionner Conflits dans la liste déroulante comme capture d'écran et vous devriez pouvoir voir une liste des fichiers en conflit avec une icône en triangle. Résoudre ces problèmes, puis effectuer une validation devrait résoudre votre problème.

enter image description here

Ce message devrait donner une brève idée de la façon de configurer et d'utiliser un outil externe pour résoudre les conflits de fusion - Comment résoudre interactivement (visuellement) les conflits dans SourceTree/git

Si vous ne pouvez toujours pas vous rattraper, vous pouvez cacher vos modifications. Tirez d'Origin et appliquez une cachette pour y remédier.

Modifications

Vous pouvez également automatiser toutes ces opérations à l'aide d'une "action personnalisée". Un exemple de script pour faire une cachette >> tirer >> appliquer la cachette est copié ci-dessous

git -c diff.mnemonicprefix=false -c core.quotepath=false stash save temp
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch Origin
git -c diff.mnemonicprefix=false -c core.quotepath=false pull Origin <<local path goes here>>
git -c diff.mnemonicprefix=false -c core.quotepath=false submodule update --init --recursive
git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply stash@{0}
1
Arvin

La réponse suivante à cette question a fonctionné pour moi.

"Vous pouvez supprimer manuellement . Git/MERGE_HEAD et Git ne pourra pas dire que vous venez de faire une fusion. Il vous permettra de modifier le validation précédente avec les modifications de votre index comme d'habitude. "

1
javaPlease42