286 votes

Refaire une fusion annulée dans Git

J'ai rencontré un petit problème ici : J'avais une branche spécifique au problème 28s dans Git, que j'ai fusionné dans le général develop branch. Il s'est avéré que je l'avais fait trop vite, alors j'ai utilisé git-revert pour annuler la fusion. Maintenant, cependant, le temps est venu de fusionner 28s en develop mais la commande git-merge voit la fusion originale, et annonce joyeusement que tout va bien et que les branches ont déjà été fusionnées. Que dois-je faire maintenant ? Créer un commit 'Revert "Revert "28s -> develop"" ? Cela ne semble pas être une bonne façon de faire, mais je ne peux pas en imaginer une autre pour le moment.

Ce à quoi ressemble l'arborescence :

Git log output

4 votes

C'est GitX ( gitx.frim.nl ).

2voto

Venkataraman R Points 1165

Je vous suggère de suivre les étapes ci-dessous pour inverser un revert, disons SHA1.

git checkout develop #go to develop branch
git pull             #get the latest from remote/develop branch
git branch users/yourname/revertOfSHA1 #having HEAD referring to develop
git checkout users/yourname/revertOfSHA1 #checkout the newly created branch
git log --oneline --graph --decorate #find the SHA of the revert in the history, say SHA1
git revert SHA1
git push --set-upstream origin users/yourname/revertOfSHA1 #push the changes to remote

Maintenant, créez un PR pour la branche users/yourname/revertOfSHA1

1voto

Nicola Points 758

Je viens de trouver ce post alors que je suis confronté au même problème. Je trouve que c'est trop effrayant de faire des réinitialisations difficiles, etc. Je vais finir par effacer quelque chose que je ne veux pas, et je ne pourrai pas le récupérer.

Au lieu de cela, j'ai vérifié le commit auquel je voulais que la branche revienne, par ex. git checkout 123466t7632723 . Puis converti en une branche git checkout my-new-branch . J'ai ensuite supprimé la branche dont je ne voulais plus. Bien sûr, cela ne fonctionne que si vous êtes en mesure de jeter la branche que vous avez gâchée.

1voto

Misha Mostov Points 11
  1. création d'une nouvelle branche au moment de la validation de la fusion initiale - appelée "base de développement".
  2. effectuer un rebasement interactif de 'develop' sur 'develop-base' (même si c'est déjà le cas). Pendant la refonte interactive, vous aurez l'opportunité de supprimer à la fois le commit de fusion, et le commit qui a inversé la fusion, c'est-à-dire supprimer les deux événements de l'historique git.

À ce stade, vous disposerez d'une branche "development" propre sur laquelle vous pourrez fusionner votre branche de fonctionnalités comme vous le faites habituellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X