web-dev-qa-db-fra.com

Clean git repo sur Heroku

La situation est la suivante:

Nous avons un projet qui persiste sur Github, et le déployons sur Heroku, qui a son propre mini-Git. Certaines modifications ont été appliquées directement à Heroku (référentiel cloné de Heroku, apporté des modifications et poussé). Pendant ce temps, la branche principale sur Github a également gagné quelques changements.

Maintenant, lorsque je veux pousser le référentiel principal vers Heroku, la poussée échoue car les validations sur Heroku ne sont pas synchronisées avec les validations locales.

Je ne veux pas fusionner avec les changements sur Heroku - je veux juste qu'ils disparaissent.

Existe-t-il un moyen de nettoyer le référentiel git sur Heroku to Push puis mon dépôt local depuis le début?

Je ne veux pas détruire l'application et la recréer à nouveau car elle a des services payants et je ne suis qu'un collaborateur.

28
Paul

Vous pouvez simplement utiliser le -f flag in git (c'est un flag git standard) pour forcer le Push. Voir la note latérale dans le Dev Center Git doc. Cela écrasera évidemment les modifications que vous avez apportées sur Heroku.

48
Jon Mountjoy

Installez le plugin Heroku Repo et utilisez-le pour réinitialiser le dépôt git distant.

Supprimez d'abord le git repo sur le serveur:

> cd /my-project/
> heroku plugins:install heroku-repo
> heroku repo:reset

Réinitialisez ensuite votre dépôt git local en le supprimant et en le recréant:

> cd /my-project/
> rm -rf .git
> git init
> heroku git:remote -a <appname>

<appname> est le nom de votre application dans Heroku.

Les 2 dépôts (local et distant) devraient maintenant être vides et synchronisés.

34
Steve Eynon

Essayez d'aller à https://github.com/heroku/heroku-repo et d'utiliser ce plugin pour nettoyer à distance les choses.

5
courtsimas

Si votre Heroku Push échoue parce que ce n'est pas un commit à avance rapide et que vous n'essayez pas de faire quoi que ce soit de funky avec votre historique, c'est très simple:

  1. Assurez-vous que votre référentiel non Heroku est défini comme distant.
  2. Récupérez toutes les télécommandes.
  3. Fusionnez votre autre référentiel dans votre clone Heroku local en utilisant la stratégie récursive avec l'option de stratégie "leur".

    git merge -X theirs remotes/Origin/master
    
  4. Poussez avec le --force option pour effectuer une validation sans avance rapide dans votre référentiel Heroku en amont.

D'un autre côté, si vous essayez vraiment de purger l'historique, vous avez d'autres options.

  • Supprimez tout sauf le premier commit de votre historique (le plus simple).

    git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1)
    git Push --force
    
  • Créez une branche principale vide .
  • Utilisez git-filter-branch .

Personnellement, je vous recommande de conserver votre historique et de résoudre le problème d'avance rapide en tant que meilleure pratique, mais vous avez certainement des options si vous souhaitez modifier votre historique de manière agressive. Git est très flexible à cet égard.

3
Todd A. Jacobs

Vous pouvez également simplement utiliser le système de gestion des versions de l'application de Heroku. En allant dans "Activité", vous avez l'historique complet du projet: revenir à la première activité et le dépôt doit être complètement nettoyé, revenant à son état lorsque l'application a été initialement créée sur Heroku.

2
Aerendir