J'ai rencontré un petit problème ici: j'avais une branche spécifique au problème 28s
dans Git, que j'ai fusionnée dans la develop
branche générale . Il s'avère que je l'avais fait trop vite, j'ai donc utilisé git-revert pour annuler la fusion. Maintenant, cependant, le temps est venu de fusionner 28s
en develop
, mais la commande git-fusion voit la fusion d' origine, et annonce joyeusement que tout va bien et les branches ont déjà été fusionnées. Qu'est-ce que je fais maintenant? Créer un 'Revert "Revert" 28s -> develop ""' commit? Cela ne semble pas être un bon moyen de le faire, mais je ne peux en imaginer aucun autre pour le moment.
À quoi ressemble la structure arborescente:
git
git-merge
git-revert
Toms Mikoss
la source
la source
Réponses:
Vous devez "revenir en arrière". Selon vous, comment l'original est-il revenu, cela peut ne pas être aussi simple qu'il y paraît. Regardez le document officiel sur ce sujet .
autoriser:
la source
Supposons que vous ayez une telle histoire
Où A, B ont échoué et W - revient à M
Donc, avant de commencer à corriger les problèmes détectés, je sélectionne W pour m'engager dans ma branche
Puis je reviens W commit sur ma branche
Après je peux continuer à réparer.
L'histoire finale pourrait ressembler à:
Lorsque j'envoie un PR, cela montre clairement que le PR est annulé et ajoute de nouveaux commits.
la source
Pour annuler le retour sans trop gâcher votre flux de travail:
Votre branche de fonctionnalité devrait maintenant pouvoir être fusionnée normalement lorsque vous y êtes prêt. Le seul inconvénient ici est que vous aurez quelques commits de fusion / restauration supplémentaires dans votre historique.
la source
Pour annuler une restauration dans GIT:
la source
Au lieu d'utiliser,
git-revert
vous auriez pu utiliser cette commande dans ladevel
branche pour supprimer (annuler) le mauvais commit de fusion (au lieu de simplement le rétablir).Cela ajustera également le contenu du répertoire de travail en conséquence. Attention :
git-reset
. Tous les commits après celui que vous spécifiez car l'git reset
argument aura disparu!Je recommande d'étudier
git-reset
attentivement la page de manuel avant d'essayer.Maintenant, après la réinitialisation, vous pouvez réappliquer vos modifications
devel
, puis faireCe sera une véritable fusion d'
28s
endevel
comme la première (qui est maintenant effacée de l'histoire de git).la source
reset --hard
etpush origin
. Sachez également qu'une poussée forcée vers l'origine peut vraiment gâcher les relations publiques ouvertes sur GitHub.Je viens de trouver ce message face au même problème. Je trouve ci-dessus un moyen effrayant de réinitialiser les disques durs, etc. Je finirai par supprimer 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 exemple
git checkout 123466t7632723
. Puis converti en branchegit checkout my-new-branch
. J'ai ensuite supprimé la branche dont je ne voulais plus. Bien sûr, cela ne fonctionnera que si vous êtes capable de jeter la branche que vous avez gâchée.la source
git reflog
vous protégera contre une réinitialisation matérielle pendant quelques mois au cas où vous découvririez plus tard que vous avez besoin des commits perdus. Le reflog est limité à votre dépôt local.Je vous suggère de suivre les étapes ci-dessous pour annuler un retour, par exemple SHA1.
Créez maintenant PR pour la branche
users/yourname/revertOfSHA1
la source
À ce stade, vous aurez une branche de développement propre à laquelle vous pourrez fusionner votre fonctionnalité comme vous le faites régulièrement.
la source