878 votes

Comment "dé-réinitialiser" un commit Git annulé ?

Étant donné un changement qui a été validé en utilisant commit et a ensuite fait marche arrière en utilisant revert Quelle est la meilleure façon d'annuler ce retour en arrière ?

Idéalement, cela devrait être fait avec un nouveau commit, afin de ne pas réécrire l'historique.

1024voto

Stephan Points 2942

git cherry-pick <original commit sha>
Fera une copie du commit original, en appliquant de nouveau le commit.

Renverser le revert fera la même chose, avec un message de commit plus désordonné :
git revert <commit sha of the revert>

L'une ou l'autre de ces méthodes vous permettra git push sans écraser l'historique, car il crée un nouveau commit après le revert.
Lorsque vous tapez le sha commit, vous n'avez généralement besoin que des 5 ou 6 premiers caractères :
git cherry-pick 6bfabc

540voto

Adam Dymitruk Points 34999

Si vous n'avez pas encore poussé ce changement, git reset --hard HEAD^

Sinon, le retour en arrière est parfaitement acceptable.

Un autre moyen est de git checkout HEAD^^ -- . et ensuite git add -A && git commit .

79voto

Nestor Milyaev Points 899

Un commit revert est juste comme n'importe quel autre commit dans git. Ce qui signifie que vous pouvez revenir en arrière, comme dans :

git revert 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746

Cela n'a évidemment de sens qu'une fois que les modifications ont été poussées, et surtout lorsque vous ne pouvez pas forcer la poussée sur la branche de destination (ce qui est une bonne idée pour vos maître ). Si le changement n'a pas été poussé, il suffit de faire un cherry-pick, un revert ou simplement de supprimer le commit revert comme dans les autres posts.

Dans notre équipe, nous avons une règle pour utiliser une revenir à on Renverse les commits qui ont été commis dans la branche principale, principalement pour garder l'historique propre, afin que vous puissiez voir quel commit renverse quoi :

      7963f4b2a9d   Revert "Revert "OD-9033 parallel reporting configuration"
      "This reverts commit a0e5e86d3b66cf206ae98a9c989f649eeba7965f.
                    ...
     a0e5e86d3b6    Revert "OD-9055 paralel reporting configuration"
     This reverts commit 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746.
                ...
     Merge pull request parallel_reporting_dbs to master* commit 
    '648d7d808bc1bca6dbf72d93bf3da7c65a9bd746'

De cette façon, vous pouvez retracer l'histoire et comprendre toute l'histoire, et même ceux qui ne connaissent pas l'héritage pourraient le découvrir par eux-mêmes. Alors que, si vous cueillir des cerises ou rebasement Ces informations précieuses sont perdues (à moins que vous ne les incluiez dans le commentaire).

Évidemment, si un commit est inversé et ré-inversé plus d'une fois, cela devient assez désordonné.

48voto

rafee_que_ Points 423

Le retour en arrière fera l'affaire.

Par exemple,

Si abcdef est votre engagement et ghijkl est le commit que vous avez lorsque vous avez inversé le commit abcdef puis exécuter :

git revert ghijkl

Cela va inverser le retour en arrière

8voto

Drew LeSueur Points 2507

Voilà comment j'ai fait :
Si la branche my_branchname a été inclus dans une fusion qui a été inversé. Et je voulais revenir en arrière my_branchname :

Je fais d'abord un git checkout -b my_new_branchname de my_branchname .
Ensuite, je fais un git reset --soft $COMMIT_HASH$COMMIT_HASH est le hachage du droit de commettre avant la première livraison de my_branchname (voir git log )
Puis je fais un nouveau commit git commit -m "Add back reverted changes"
Puis je pousse la nouvelle branche git push origin new_branchname
Puis j'ai fait une demande de pull pour la nouvelle branche.

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