2012-04-07 24 views
29

Básicamente, tengo una solicitud de extracción abierta que deseo corregir y, al mismo tiempo, quiero hacer 1 confirmación que contenga 2 funciones en 2 confirmaciones separadas.Cómo insertar un nuevo historial (reescrito) en un repositorio remoto

repositorio de Github ahora se ve así en el arreglo es una nueva rama:

master c-c-c 
      \ 
    fix c-c-c-c 

he creado una solicitud de extracción de la solución.

quería cambiar la última confirmación en solución en 2 commit en mi repositorio local de la siguiente manera:

master c-c-c 
      \ 
    fix c-c-c-n-n 

donde n-n son mis 2 nuevas confirmaciones.

Para llegar a este punto, a nivel local, lo hice:

1. git rebase -i HEAD~2 
2. Changed my last commit line to "edit", saved and closed the file 
3. git reset HEAD^ 
4. git stash save 
5. Removed the changes I don't want in the first commit 
6. git commit -m "commit a" -a 
7. git stash apply 
8. git commit -m "commit b" 

Así que ahora tengo 2 comete la manera que quiero. El problema es que encontré un error que terminó en la solicitud de extracción. Como ya he enviado al repositorio remoto, no aceptará mis nuevos commits (ya que ahora falta el original).

que ejecutar:

git push origin fix --dry-run 

y me sale el mensaje:

To [email protected]:<UserName>/<Repository>.git 
! [rejected]  fix -> fix (non-fast-forward) 
error: failed to push some refs to '[email protected]:<UserName>/<Repository>.git' 

he visto otros mensajes sugieren que tirar mis cambios de origen antes de empujar de nuevo, pero no a que, básicamente, reiniciar mis 2 commits en el uno?

Idealmente, lo que me gustaría hacer es asignar la misma identificación de confirmación a la última confirmación para que pueda reemplazar la actual como está. ¿Hay una manera de hacer eso? (Tenga en cuenta que no he corrido con git reset--hard)

Respuesta

60

Cuando se enfrentan a ese problema, un empuje de fuerza ha trabajado para mí:

git push --force origin fix 
+1

Eso funcionó a las mil maravillas. En caso de que alguien lea esto y se pregunte qué pasó con mi solicitud de extracción, simplemente reemplazó el 1 commit con 2. Agregué un comentario en Github al propietario del proyecto para avisarle que lo busque en caso de que ya lo haya hecho. – NightOwl888

+0

Por lo tanto, para aclarar: ¿es correcto que si el propietario del proyecto ya se ha unido en la solicitud de extracción, después de lo cual hago un 'git push --force origen fix', entonces una' git fetch' del propietario del proyecto ¿la solución? – PonyEars

+4

El propietario del proyecto deberá hacer un reinicio si ya se han retirado los cambios, porque la confirmación aún existirá en su rama. 'git fetch origin' luego' git reset --hard origin/master'. Ver: http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head – NightOwl888

Cuestiones relacionadas