web-dev-qa-db-fra.com

Annuler une fusion après avoir été poussé

Étapes que j'ai effectuées:

J'ai deux branches branch1 et branch2,

$git branch --Initial state
$branch1

$git checkout branch2
$git pull Origin branch1 --Step1

Je résous les conflits et ai fait un

$git commit -m "Merge resolved"

puis

$git checkout branch1
$git merge branch2
$git Push Origin branch1

Maintenant, je me suis rendu compte que lors de l'étape 1, la fusion automatique a supprimé du code et que le code de modification a été poussé, maintenant je veux revenir à mon état initial afin de rétablir les modifications. Vous recherchez une aide immédiate?

55
Bijendra

Vous pouvez annuler la fusion en suivant guide officiel , mais cela laisse à Git la croyance erronée que les validations fusionnées sont toujours sur la branche cible.

Fondamentalement, vous devez:

git revert -m 1 (Commit id of the merge commit)
69
aleroot

Essayez d'utiliser git reflog <branch> pour savoir où se trouvait votre succursale avant la fusion et git reset --hard <commit number> pour restaurer l'ancienne révision.

Reflog vous montrera les états les plus anciens de la branche, vous pouvez donc la retourner à n'importe quel jeu de modifications que vous souhaitez.

Assurez-vous que vous êtes dans la bonne branche lorsque vous utilisez git reset

Pour modifier l'historique du référentiel distant, vous pouvez faire git Push -f, mais ce n'est pas recommandé car quelqu'un peut déjà avoir téléchargé des modifications, poussé par vous.

20
Ilya Ivanov

La première option est l'utilisation de git revert.

git revert -m 1 [sha-commit-before-merge]

Le git revert annulera les modifications mais conservera l'historique. Par conséquent, vous ne pourrez plus continuer à travailler dans la même branche car vous ne pouvez plus voir la différence réelle entre la branche fusionnée et votre branche de fonctionnalité. Utilisez également la méthode suivante pour supprimer l'historique. Faites-le très soigneusement si et seulement si vous êtes le seul à proposer des modifications à la branche en ce moment.

git reset --hard [sha-commit-before-merge]
git Push [Origin] [branch] --force
3
Asanka sanjaya