IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ALM Discussion :

Conflits sur un merge - Git/GitLab


Sujet :

ALM

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut Conflits sur un merge - Git/GitLab
    Bonjour,

    je ne maitrise pas bien Git et suis bloqué depuis 2 jours sur un merge en raison de conflits.

    Je ne comprends pas trop d'où vient le problème et donc quels conflits résoudre :
    - est-ce parce que ma branche feature/6 locale est actuellement différente de la branche feature/6 distante ?

    Je ne sais pas trop comment résoudre mon problème donc je vais essayer de le présenter le plus précisément possible en espérant qu'un expert Git saura m'aider.
    En parallèle, je vais reprendre les bases pour mieux comprendre Git mais dans l'immédiat, il faut impérativement que je puisse résoudre ces conflits et remettre mon projet sur de bons rails.

    J'ai un dépôt distant sur GitLab avec 3 branches :
    - master (commit aea55d29)
    - feature/4 (avec une demande merge abandonnée)
    - feature/6 (commit 0542d3f8) avec une demande de merge mais impossible à merger en raison de conflits (message GitLab : "There are merge conflicts" sans avoir la main pour les résoudre via GitLab.)

    En local, j'ai les 3 mêmes branches.

    Ce que je voulais donc faire, c'est merger la branche feature/6 sur la branche master du dépôt distant. Je ne peut donc pas (cf message ci-dessus) et j'ai 2 options sur Gitlab :
    - Merge locally
    - You can merge this merge request manually using the command line :

    Check out, review, and merge locally

    Step 1. Fetch and check out the branch for this merge request
    git fetch origin
    git checkout -b "feature/6" "origin/feature/6"

    Step 2. Review the changes locally

    Step 3. Merge the branch and fix any conflicts that come up
    git fetch origin
    git checkout "origin/master"
    git merge --no-ff "feature/6"

    Step 4. Push the result of the merge to GitLab
    git push origin "master"
    Afin de voir où j'en étais dans mes commit j'ai fait un git log --oneline --decorate --graph --all et je m’aperçois que j'ai fait n'importe quoi depuis le commit indiqué par la flèche jaune (=mon dernier commit "propre"):

    Nom : git_tree.png
Affichages : 2273
Taille : 54,7 Ko

    En résumé :
    Je veux que mes branches master (locales et distantes) correspondent à la branche feature/6 (commit 0542d3f8) qui est la version à jour de mon application.
    Mais je ne sais pas comment je dois procéder.

    d'avance merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Je te suggère une lecture de la FAQ, notamment la section sur les merge.

    Pour manipuler les commits ça se passe ici.

    Mais le merge n'est pas l'action à effectuer immédiatement ici. Avant de tenter de merge sa branche de travail dans master il faut la rebaser sur master.

    Bon courage !

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut
    merci pour ta réponse
    j'ai lu les FAQ ce matin

    concernant le rebase, j'ai un peu peur de faire plus de bêtise qu'actuellement...
    et bien qu'elle n'est pas été mergé dans le dépôt distant la branche feature/6 est publiée sur Gitlab avec demande de merge request
    or il est mentionné :
    De ce fait, il ne faut jamais faire un rebase d’une branche qui a été publiée quelque part et donc le rebase ne doit s’appliquer qu’à des branches privées, c’est à dire qui n’existent que sur votre machine.
    si je comprends bien, çà placerait ma branche feature/6 (HEAD -> feature/6) / commit 8d2ca29 au niveau de ma branche master (commit 7a2c3dd qui deviendra le commit parent de ma branche feature/6) ?


    ne serait-il pas également possible de ré-écrire l'historique sans utiliser le rebase mais en supprimant les commits postérieurs au dernier commit que je considère propre ?

    Nom : git_tree_modif_historique.png
Affichages : 2100
Taille : 70,5 Ko

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut repartir sur de bonnes bases...
    ou alors, si je fait un git checkout 0542d3f pour me replacer sur mon commit "propre" et à partir de ce commit, je fait un git rebase master

  5. #5
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Non il te faut être une sur une branche pour ça.

    Tu peux nettoyer ton historique local avec les commandes de la section commit de la FAQ. Supprime les commits un par un et fait des git log à chaque étape pour voir ce qu'il se passe.

    Une fois que tu as nettoyé là tu peux rebase avec master.

    Et enfin il te faudra git push --force ta feature branch pour pouvoir la merger.

  6. #6
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Par défaut je vais devenir fou...
    je me suis replacé sur ma master pour faire un rebase comme tu le suggérais dans ta première réponse
    et visiblement ma branche master locale diverge de la branche master distante
    On branch master
    Your branch and 'origin/master' have diverged,
    and have 6 and 5 different commits each, respectively.
    (use "git pull" to merge the remote branch into yours)

    nothing to commit, working tree clean
    donc j'essaie de faire un
    git pull origin master
    j'ai de nombreux conflits que je dois donc résoudre
    je tente un
    git mergetool --tool=vimdiff3
    et là il m'ouvre vimdiff sur mon fichier db.sqlite3 et c'est incompréhensible !

    j'ai l'impression que ce fichier db.sqllite3 (ma base de donnée sur Django) me pose systématiquement des problèmes)
    pourtant je l'ai mis dans le .gitignore (*.slqit3 et db.sqlite3) mais il intervient toujours dans mes manip git...

    Il faut vraiment que je trouve une solution même radical pour avancer dans mon projet.
    Je développe seul sur ce projet pour le moment et il n'y a eu aucun merge d'effectué dans le dépôt distant

    n'y-a-t-il pas moyen de faire en sorte de tout recommencer pour que le code de ma feature/6 soit le code de ma master sur le dépôt distant et en local ?

    en local :
    - supprimer mes branches master et feature/4
    - renommer ma branche feature/6 en master

    à distance :
    - supprimer ou écraser ma branche origin/master avec ma branche feature/6

    je suis un peu désespéré je sais mais je ne m'y retrouve plus même en lisant la doc et suivant les tuto.

    PS : @Marco46
    je me suis aperçu qu'il y avait peut-être un forum plus adapté : https://www.developpez.net/forums/f1...ielle/scm/git/
    en tant que modérateur, peux-tu le déplacer ?

Discussions similaires

  1. Oracle 10g : Question sur un MERGE
    Par eryk71 dans le forum SQL
    Réponses: 5
    Dernier message: 06/04/2012, 10h41
  2. Application de règles sur le merging
    Par bleuerouge dans le forum Visual Studio Team System
    Réponses: 0
    Dernier message: 21/08/2009, 09h45
  3. Sql*Plus ORA-00905 sur un MERGE
    Par HRS dans le forum SQL
    Réponses: 9
    Dernier message: 19/09/2008, 18h51
  4. Conflit sur une durée de préavis
    Par Saturnin dans le forum Démission
    Réponses: 5
    Dernier message: 27/04/2007, 13h23
  5. Conflit sur un calque entre position et width
    Par renaud26 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 41
    Dernier message: 31/08/2006, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo