1

Je ne sais pas s'il s'agit d'un problème Git ou IntelliJ auquel nous sommes confrontés. En supposant que les éléments suivants en utilisant l'intégration Git dans IntelliJ:Comment forcer la fusion manuelle dans Git/IntelliJ si le même fichier mais des lignes différentes ont été éditées?

  1. utilisateur A modifie un fichier texte et engage et pousse ce changement à la branche Branch1

  2. utilisateur B modifie le même fichier texte mais dans un autre ligne et engage à Branch1

  3. utilisateur B récupère le référentiel distant et fusionne le à distance Branch1 dans la locale Branch1

Comportement actuel: Il fusionne wihout tout conflit (depuis différentes lignes?)

comportement voulu: Résolution des conflits fenêtre popups vers le haut et l'utilisateur doit décider de appliquer tous les changements non conflictuels.

Mais pourquoi vous pourriez vouloir ce behvaior?: Parfois, nous avions des problèmes avec les fichiers de balisage ou de js, où un développeur changeait quelque chose en haut (par exemple, supprimait une fonction inutilisée) et un autre développeur s'en remettait à cela. Il faut avoir des tests d'ui très coûteux si vous voulez être informé de ces pauses. Surtout s'il s'agit simplement d'un balisage (par exemple balises jsf, params)

+0

mais l'utilisateur et l'utilisateur B changent les mêmes lignes? Parce que, n'existe pas conflit, si a été modifié différentes lignes. – kikicarbonell

+0

Je sais, dans le cas de lignes différentes, ce n'est pas un conflit. Mais n'y a-t-il pas une possibilité de le gérer comme un conflit et de forcer la fusion manuelle? Parfois nous avons eu des problèmes avec les fichiers markup ou js, où un développeur a changé quelque chose en haut (par exemple, enlevé une fonction inutilisée) et un autre développeur s'en est remis. il faut avoir des tests de l'ui très coûteux si vous voulez être informé de ces pauses. surtout s'il s'agit simplement d'un balisage (par exemple, balises jsf, params). – fischermatte

+0

pour éviter votre problème, je suggère: tester pour chaque code source et maintenir un cycle de vie d'examen pour s'assurer que tout allait bien – kikicarbonell

Répondre

1

Cela semble un comportement étrange que vous voulez. Avec votre dernière édition, je comprends ce que vous voulez, mais je pense que vous voulez utiliser un outil pour résoudre des problèmes qui ne concernent pas l'outil lui-même.

Je n'ai pas de réponse directe, et je ne pense même pas qu'il y ait une option pour forcer la révision de fusion. Cependant, vous pouvez développer un processus de fusion dans lequel vous avez demandé à votre collègue de faire un diff avant la fusion. Donc, en gros:

  1. faire les changements sur votre machine locale
  2. git diff REMOTE/BRANCH -- files
  3. demander au promoteur d'examiner les changements
  4. si tout se passe comme espéré, engager et pousser les changements. Sinon, annulez les modifications non désirées et répétez à partir de 2.

Comme vous pouvez le voir, le processus devient vraiment maladroit et lent et il reste sujet aux erreurs (si je supprime une ligne, je sais généralement ce que je supprime et si aucun test ne se casse, on peut me demander de revoir la suppression des centaines de fois et de la conserver). Jusqu'à présent, c'est la seule aide que je peux vous proposer, si vous trouvez un moyen d'atteindre votre objectif d'une manière plus directe, s'il vous plaît commenter cette réponse, ou fournir votre propre solution, je suis toujours heureux de apprendre quelque chose de nouveau!

2

Je ne sais pas si c'est ce que vous voulez, mais vous pouvez utiliser l'option --no-commit de la commande git merge pour prétendre que la fusion a échoué même s'il n'y a pas de conflits.A partir du manuel:

With --no-commit perform the merge but pretend the merge failed 
and do not autocommit, to give the user a chance to inspect and 
further tweak the merge result before committing. 

Ensuite, vous pouvez vérifier les modifications avec git diff avec option --cached pour inspecter les résultats de la fusion; et utilisez git checkout avec les options --ours et --theirs pour accepter ou refuser les modifications apportées par la fusion.

+0

thx pour cela. Je ne suis pas très famélique avec git, plus ou moins j'utilise juste l'outillage fourni par intellij. il est possible de définir l'indicateur '--no-commit' lors de l'extraction/la fusion. Par conséquent, je vois les changements et je peux les inspecter comme vous l'avez dit. mais c'est la même chose que de faire un diff avec la branche distante avant de fusionner (?). Donc dans les deux sens - il faut parcourir tous les fichiers manuellement et essayer de trouver des conflits potentiels. – fischermatte

Questions connexes