web-dev-qa-db-fra.com

Git annule le dernier commit de Heroku

Je me suis engagé et l'ai poussé vers Origin et Heroku

Puis j'ai réalisé que c'était mal, alors je l'ai fait

git reset --soft HEAD^ 

Mais quand je pousse vers Heroku je me fais

To [email protected]:app.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to Push some refs to '[email protected]:app.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git Push --help' for details.

Je comprends le problème. Comment dois-je procéder? Comment puis-je annuler la dernière validation de Heroku? (Je suppose que ce serait la meilleure solution)

48
Martin

Si vous avez annulé le commit localement, vous devrez peut-être git Push avec un -f option pour forcer la validation.

En outre, vous voudrez peut-être jeter un œil à versions Herok qui peuvent également aider.

65
John Beynon

De http://devcenter.heroku.com/articles/releases#rollback

Utilisez la commande de restauration pour revenir à la dernière version:

$ heroku rollback
Rolled back to v51

Vous pouvez choisir de spécifier une autre version à cibler:

$ heroku rollback v40
Rolled back to v40
43
Devi

Étant donné que vous avez déjà poussé vers d'autres référentiels (publics?), La meilleure façon de résoudre ce problème est probablement d'annuler le git reset localement, puis faites un git revert pour créer un nouveau commit qui inverse les effets du mauvais commit. Poussez ensuite tout à nouveau. Donc, étape par étape:

  1. Alors d'abord git reset --hard Origin/master ou git reset --hard heroku/master (ou quel que soit le nom de votre branche de suivi de Heroku), afin de récupérer votre master local mauvais commit. Cela supprimera tous les changements en suspens dans votre copie de travail, alors soyez prudent.

  2. Ensuite git revert HEAD pour créer un nouveau commit (il vous demandera un message de commit).

  3. Poussez ensuite comme vous le feriez habituellement.

9
Dave Goodell

Voici ce que j'ai fait. Tout d'abord, j'ai créé une nouvelle branche avec l'ancien commit:

git checkout -b old-rev <commit-id>

Puis j'ai couru Push -f l'ancienne branche du dépôt local au maître de heroku:

git Push -f heroku old-rev:master

Lorsque j'en ai terminé avec l'ancienne version et que je suis prêt à passer à la nouvelle version:

git checkout master
git Push heroku master
git branch -d old-rev  # deletes the old branch; warns if there will be data loss
0
Benjamin Atkin