Dans Git, comment annuler un rebase si vous n'êtes pas satisfait?
Git n'a pas de cycle à sec pour le rebase. Si j'ai fait un rebase et que je ne l'ai pas encore poussé, comment revenir en arrière, comme si cela ne s'était jamais produit?
Dans Git, comment annuler un rebase si vous n'êtes pas satisfait?
Git n'a pas de cycle à sec pour le rebase. Si j'ai fait un rebase et que je ne l'ai pas encore poussé, comment revenir en arrière, comme si cela ne s'était jamais produit?
Réponses:
Vous pouvez utiliser le reflog pour trouver la première action avant le début du rebase, puis réinitialiser - hard back to it. par exemple
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Vous devriez maintenant être de retour avant le début du rebase.
Pour trouver le bon endroit pour réinitialiser, il vous suffit de choisir l'entrée la plus proche du haut qui ne commence pas par "rebase".
Si le rebase est la seule chose que vous avez faite sur la branche, c'est-à-dire que vous n'avez pas de commits / modifications non poussés - alors vous pouvez simplement supprimer la branche locale avec git branch -D
, puis la vérifier à nouveau:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
Ou pour le même effet, vous pouvez réinitialiser --hard à la branche d'origine:
$ git reset --hard origin/my-branch
Si vous avez fait cela alors que vous aviez d'autres commits non exécutés, vous les aurez perdus. Dans ce cas, utilisez simplement l'approche reflog ci-dessus pour revenir à l'entrée reflog où vous avez effectué le ou les commit (s).
ORIG_HEAD
la valeur de hachage d'origine de la branche rebasée. Donc, plutôt que de trouver le numéro 2 pour HEAD@{2}
, vous pouvez simplement utiliser ORIG_HEAD
... mais seulement s'il ORIG_HEAD
n'est toujours pas dérangé. Un tas de commandes Git le définissent (rebase, am, reset et fusion, dans diverses circonstances).
Rebase conserve une sauvegarde de l'ancien état sous la forme ORIG_HEAD
.
Vous pouvez donc annuler le dernier rebase en exécutant:
git reset --hard ORIG_HEAD