2017-07-07 2 views
0

Au lieu de fusionner B (Branche) à A (Fonction), j'ai fusionné A (Fonction) à B (Branche) dans GIT LAB. Voici une représentation graphique de ce que j'ai fait. J'ai ceci comme ci-dessous. Avec cela le "Branch A2" fusionne en "feature B2" ce qui n'est pas ce que je voulais. QUESTION: Maintenant, si je continue le développement, la Direction générale qui devra continuer est "feature B2" au lieu de "Branch A2"Incorrrect Merge, Au lieu de fusionner A à B j'ai fusionné B à A dans GIT LAB

Branch   A ----A1------ A2 <-- last commit 
       \    \ (merge into feature) 
Branch(feature) B -- -B1- - -- B2 <-- feature now contains Branch "A2" edits. 

Voilà ce que je voulais. Pour fusionner "feature B2" en "Branch A2"; De cette façon, quand je poursuis mon développement, il serait sur le "Branch A2" et non "feature B2"

Branch(feature) B ----B1------ B2 <-- last feature commit 
       \    \ (merge into Branch) 
Branch   A -- -A1- - -- A2 <-- Branch now contains "B2" feature edits. 

Quelle est la manière la plus propre de fixer ce que je peux obtenir le scénario 2 et continuer à travailler sur "A2" branche de branche au lieu de "B2" fonction branche? Fonction sage, ils réalisent tous les deux la même chose si vous avez fusionné A2-> B2 ou B2-> A2!
Une façon vient à l'esprit est que je peux renommer la branche Fusionné et l'appeler Direction A2

Répondre

1

En supposant que votre modifications ne sont pas poussés en amont, je pense

git checkout feature 
git reset B1 --hard 
git checkout branch 
git merge feature 

doit faire, où B1 est le commettras avant la fusion.

Une façon vient à l'esprit est que je peux renommer la branche et Fusionné appelle A2 Direction

Lorsque vous êtes « fait » avec fonction de toute façon, cela pourrait même être la solution plus propre dans votre Cas.

git branch -d branch branch-tmp # Delete branch 
git branch -m feature branch # Rename feature into branch 
+0

@ SVSchmidt, malheureusement, les modifications ont déjà été apportées à GITLAB. – newb7777

+0

à quelle branche distante vous l'avez poussé? – max630

+0

@SVSchmidt. votre solution est en roches! La solution a été poussée en amont dans mon cas et la suppression/manipulation de la branche était la meilleure façon de garder mon histoire git propre. – newb7777

0

Juste pour le bénéfice des autres qui peuvent marcher sur ce fil, voici mon spiel. Remarque: Toutes les manipulations ont été effectuées dans ** Local Repo, bien que vous puissiez le faire dans ** remote Repo dans Git Lab. Une fois la fusion terminée, comme indiqué sur le schéma 1 en fil d'origine:

  1. Créer une nouvelle branche de la branche fusionnée, sauf le nom comme Embranchement A ou tout autre nom que vous avez initialement voulu qu'elle soit. git branch <branch name e.g Branch A>
  2. Contrôlez la succursale git checkout <branch name eg Branch A>. Maintenant, votre nouvelle branche empruntée et votre branche B seront essentiellement les mêmes car il n'y a pas de changement de code depuis la dernière fusion de branches.
  3. Supprimez la branche où les fusions étaient à la fois locales et distantes. git push origin --delete <your remote branch name e.g feature A> et le suivi avec git branch -d <your local branch name e.g feature A>
  4. Confirmer si c'est ce que vous voulez avant de le pousser à repo à distance par git branch --list puis git branch -a. Pas d'inquiétudes sur l'historique même si vous supprimez ces branches car lorsque vous poussez vos validations la prochaine fois il montrera qu'il y a eu une fusion de code et votre branche la plus récente aura toutes vos modifications juste après la fusion de la branche. Cela fonctionne presque comme des pointeurs en langage C.Le nom de la variable a disparu mais puisque vous avez copié le pointeur sur un autre nom, l'adresse de votre changement est toujours intacte.