2011-10-15 18 views
15

Tengo una configuración extraña con Git. Tengo básicamente:GIT: ¿cómo aplastar varias confirmaciones que se han enviado a un repositorio remoto?

[client 1] <---> [remote repo] ----> [client 2] 

[cliente 1] es esencialmente el repositorio local, estoy trabajando con, porque no puedo compilar/construir el proyecto en mi máquina local.

[Cliente 2] es un servidor remoto para la construcción.

En el medio, tengo otro repositorio, [repo remoto], básicamente para sincronizar con un repositorio central de cvs en mi compañía, y también sincronizando entre mi [cliente 1] y [cliente 2].

Dado que toda la compilación/construcción se realiza en [cliente 2], tengo muchas confirmaciones triviales en [cliente 1] solo para corregir los errores de compilación o compilación.

Así que cuando descubro que hay errores en la última confirmación, ya es demasiado tarde porque la confirmación ya se ha enviado y retirado del repositorio remoto.

¿Cómo puedo aplastar estos (muchos) triviales commits en uno solo? Gracias.

Respuesta

24

En primer lugar, evite aplastar y, en general, volver a escribir el historial a menos que sea absolutamente necesario. Tener confirmaciones "triviales" no es motivo para aplastar commits. Si pueden quedarse, déjalos quedarse. Y la reescritura de la historia no es sencilla en cvs en absoluto, por lo que dado que estos commits se habrían abierto paso en el repo de cvs, probablemente deberías vivir con ello.

Para el repositorio remoto de git, si desea continuar, supongo que sabe aplastar las confirmaciones en su repositorio local (git rebase -i es sencillo). Después de la calabaza, presione con -f - un empuje de fuerza.

12

Usted puede aplastar las confirmaciones con git rebase -i o git merge --squash, ver Squash my last X commits together using Git

Pero puesto que ya las ha publicado en otro repositorio hay que fijarla en otros. Muy engorroso, pero git push --force es el comando que necesita.

No se recomienda, sin embargo: si el repositorio remoto ya se ha sincronizado con CVS, tendrá que arreglarlo también ... Lo mismo si otros desarrolladores ya han sacado de él.

+0

gracias por la respuesta. siento haber aceptado la respuesta de manojlds solo porque la suya es un poco anterior, ya que ambas respuestas son muy similares – wei

Cuestiones relacionadas