6
votes

Revenir sur une branche poussée à un engagement concret

J'ai fusionné une succursale DEV (avec des changements constants parfois instables) à notre branche principale (où nous stockons le code stable et libéré). Je tiens à restaurer la branche principale à l'état c'était avant que la fusion avec la Direction de Dev n'était jamais produite (et que, à l'avenir, nous fusionnons la Direction de Dev, tous changements que nous jetons maintenant, sera fusionné "à nouveau").

Il s'agit de l'état actuel de la branche principale et je souhaite que la "étiquette" professionnelle-1.1.2 'à la tête.

 statut de la branche principale

J'ai essayé: xxx

après un peu de Recherche Je pense que la meilleure option est de faire un git reset --hard professionnel-1.1.2 et git push -force comme réponse à Git: Comment ignorer l'origine rapide et revenir à l'origine [branche ] Au début de: ou Repenser Push'D Git commit . D'autres développeurs sont dans le même bureau et ils ne devraient jamais rien commettre à maîtriser (comme non plus, mais ... ouais, nous n'avons pas les autorisations par branche), donc ce n'est pas un gros problème de leur dire et de faire action requise.

Ainsi, à la fin de la question est la suivante: git revenir quelque chose ou git reset --hard && push git --force ? Si git revenir , quelle commande dois-je utiliser?


3 Réponses :


6
votes

L'option -m Spécifie lequel des parents que vous souhaitez revenir (puisque une fusion a plusieurs parents).

Vous voulez donc git revert -m 1 tête ou git revenir -m 1 sha_of_merge_commit (supposant que vous avez fait Git Checkout Master; Git Fusion Devel; )


7 commentaires

Mais je ne veux pas revenir à la fusion commis, mais tous les engagements qui sont venus avec cette fusion. Btw i dit maître de paiement git; Git Tirez l'origine Développer .


@ Carloscampderrós Que pensez-vous qu'un commit fusion est? Oui, cela reviendra la fusion, ce qui signifie: il supprimera toutes les modifications que vous avez fusionnées dans votre branche.


Ok, je viens de revenir à la syntaxe de revert (de sorte que cela ne fonctionnait pas quand j'ai essayé d'abord (comme vous pouvez le voir dans la question)) et j'ai choisi le mauvais parent lorsque j'ai utilisé votre réponse. Maintenant ... Si dans 2 mois, je fusionner la Direction de Dev encore une fois, tous les engagements que je revenant sera fusionné? Ou seulement sera fusionné les changements depuis la fusion que je reviendrai maintenant?


@ Carloscampderrós La fusion ne se soucie pas de commettre. La fusion va fusionner deux (ou plus) têtes. Ce qui est dans l'histoire est complètement non pertinent. Seul l'état actuel sur la tête est pertinent.


@Let_me_be: En réalité, cela dépend de quelle stratégie de fusion est utilisée - la stratégie de base à trois voies de GIT considère que les deux parents et un ancêtre commun - qui s'engage dans l'histoire est utilisé comme l'ancêtre commun fait une grande différence pour le résultat de la fusion.


@Marklongair uniquement sur les algorithmes de fusion automatique. Si vous fusionniez manuellement, quelle différence peut-il y avoir?


@Let_me_be: Je ne vois aucune suggestion que l'OP a l'intention de faire quelque chose de plus subtil que git fusion développer à une étape ultérieure de développement.



6
votes

4 commentaires

En utilisant ceci (en faisant une nouvelle commission avec le statut de professionnel-1.1.2 et de la repousser), cela permettra à la future fustion de la succursale de Dev retirant à nouveau les changements que je "retourne"?


Si le COMMIT que j'ai suggéré d'introduire fin avec le nom d'objet F414F31 , je pense que vous pouvez faire le futur travail de fusion en effectuant git revert f414f31 avant git fusion de dev . (Je pense que le principe est la même chose avec Rouler-a - Fusionner-Fusionner .)


Après avoir lu . google.com/g/git-core/source/browse/documentation/howto / ... Je pense que vous avez raison @marklongir. Ceci est plus compliqué et plus sujet aux erreurs (car peut-être avant de faire le git fusion de dev nous oublions de revenir à la réverbation. Comme le représentant est privé et que l'environnement est contrôlé, je pense que je vais aller avec le GIT RESET --HARD ET GIT PUSH -FORCE .


@ Carloscampderrós: ​​Droite - il ne me disait pas que le public était public. Tant que vous parlez à tous ceux qui pourraient tirer de cette branche et leur expliquer comment traiter l'histoire réécrite, il va bien de prendre l'autre approche ...



2
votes

Si vous êtes un daredevil (récupérer d'une boîte de rebasse en amont pourrait être nécessaire pour tous les autres mandats)

git checkout yourbranch
git reset HEAD <commit-hash>
git push origin yourbranch -f


0 commentaires