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. p>
p>
J'ai essayé: p> après un peu de Recherche Je pense que la meilleure option est de faire un Ainsi, à la fin de la question est la suivante: git reset --hard professionnel-1.1.2 code> et
git push -force code> 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. p>
git revenir quelque chose code> ou
git reset --hard
push git --force code>? Si
git revenir code>, quelle commande dois-je utiliser? P> p>
3 Réponses :
L'option Vous voulez donc -m code> Spécifie lequel des parents que vous souhaitez revenir (puisque une fusion a plusieurs parents). P>
git revert -m 1 tête code> ou
git revenir -m 1 sha_of_merge_commit code> (supposant que vous avez fait
Git Checkout Master; Git Fusion Devel; code>) p>
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 code>.
@ 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 i> 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 code> à une étape ultérieure de développement.
Si vous voulez simplement rendre l'état de comme alternative, vous pouvez suivre les étapes suggérées dans Cette réponse de Charles Bailey , qui accomplit la même chose, mais est légèrement plus confuse, je pense (même si les étapes que j'ai suggéré d'impliquer la commande "plomberie" maître code> exactement identique que
professionnel-1.1.2 code>, tout en évitant la réécriture de l'historique et de la force de la force, vous pouvez simplement créer Un nouveau commit sur le dessus du maître qui représente le même état du projet que
Professional-1.1.2 Code>. Vous pouvez le faire avec les étapes suivantes:
git lecture-arbores code>
). p> p>
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 CODE>, je pense que vous pouvez faire le futur travail de fusion en effectuant
git revert f414f31 code> avant
git fusion de dev code>. (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 code> 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 CODE> ET
GIT PUSH -FORCE CODE>.
@ 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 ...
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
La réponse donnée par Jefromi dans pourrait vous aider.
@vpatil tellement mieux utiliser
git reset --hard code> que
git revert code> dans mon cas?
Oui, je pense que, parce que Revert crée une nouvelle commission qui annule la dernière commission. Je suggérerais certainement d'utiliser la réinitialisation.
@ Carloscampderrós La seule règle est que vous ne devriez jamais écraser l'histoire dans un référentiel public. Si c'est votre référentiel privé, vous pouvez faire ce que vous voulez. Mais dans un référentiel public, si vous réécrivez l'histoire, vous cassez le référentiel pour tous ceux qui ont déjà téléchargé la pièce que vous réécrivez.
@Let_me_be oui je sais que. Je n'aime vraiment pas le faire, mais à la fin, je pense que pour mon cas en cours est la meilleure option que l'environnement est contrôlé et que personne ne devrait avoir rien fait avec le code dans la branche principale.