2012-05-04 33 views
17

La situación es la siguiente:Limpio repositorio git en Heroku

Tenemos algún proyecto que persiste en Github, y desplegarlo a Heroku, que tiene su propio mini-Git. Algunos cambios se aplicaron directamente a Heroku (repositorio clonado de Heroku, hizo cambios y los presionó). Mientras tanto, la rama principal en Github también ha obtenido algunos cambios.

Ahora cuando quiero enviar el repositorio principal a Heroku, el envío falla porque las confirmaciones en Heroku no están sincronizadas con las confirmaciones locales.

No quiero fusionarme con los cambios en Heroku, solo quiero que desaparezcan.

¿Hay alguna forma de limpiar el repositorio de git en Heroku para impulsar mi repositorio local desde el principio?

No quiero destruir la aplicación y volver a crearla porque tiene algunos servicios pagados y solo soy un colaborador.

+4

'heroku run bash' te registra en la carpeta de aplicaciones y luego simplemente borras todo –

Respuesta

36

Puede usar la bandera -f en git (es una bandera estándar de git) para forzar el empuje. Consulte la nota al margen en el Dev Center Git doc. Esto sobrescribirá esos cambios que has hecho en Heroku obviamente.

3

Si su empuje Heroku está fallando porque no es un avance rápido cometió, y usted no está tratando de hacer algo funky con su historial, es muy simple:

  1. Asegúrese de que su repositorio no Heroku se define como un control remoto.
  2. Obtenga todos los controles remotos.
  3. Combina tu otro repositorio en tu clon local de Heroku usando la estrategia recursiva con la opción de estrategia "suya".

    git merge -X theirs remotes/origin/master 
    
  4. empuje con la opción --force para hacer un commit no avance rápido a su repositorio Heroku aguas arriba.

Por otro lado, si realmente está tratando de borrar el historial, tiene otras opciones.

  • Quite todo, excepto el primer compromiso de su historial (más fácil).

    git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1) 
    git push --force 
    
  • Crear un empty master branch.
  • Use git-filter-branch.

Personalmente, recomendaría mantener su historial y solucionar el problema del avance rápido como una mejor práctica, pero ciertamente tiene opciones si quiere modificar su historial agresivamente. Git es muy flexible en ese sentido.

2

También puede simplemente usar el sistema de control de versiones de la aplicación heroku. Ir a "Actividad" tiene el historial completo del proyecto: revertir a la primera actividad y el repositorio debe estar completamente limpio, volviendo a su estado cuando la aplicación se creó originalmente en Heroku.

+0

Eso no funciona:'! [rechazado] master -> master (no avance rápido) ' – mgPePe

+0

No lo sé, este es un problema de Heroku que son ellos los que tienen que resolver. Pero ... ¿estás usando la interfaz web o la línea de comando? Intenta usar la interfaz web ... – Aerendir

18

Instale el Heroku Repo plugin y úselo para reiniciar el repositorio remoto de git.

elimine primero el repositorio git en el servidor:

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

continuación, vuelva a inicializar el repositorio git local mediante la eliminación y volver a crearlo:

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

Dónde <appname> es nombre de su aplicación en heroku .

Los 2 repos (locales y remotos) ahora deberían estar vacíos y sincronizados.