git: Empujar confirmaciones individuales, reordenar con rebase, confirmaciones duplicadas
Quiero enviar varias confirmaciones individuales a un repositorio remoto de git. Seguí la respuesta de Geoff encontrada aquí para hacerlo:
Los commits que quiero impulsar no están en la cabeza, así que primero tengo que reordenar los commits usando rebase y utilicé estas instrucciones para hacerlo:
http://gitready.com/advanced/2009/03/20/reorder-commits-with-rebase.html
Esencialmente he hecho:
git clone
git commit
git commit
...
git pull
git rebase -i HEAD~3
git push origin <SHA>:master
Tengo errores al hacer esto. Así que comencé a profundizar en el problema. Descubrí que hay confirmaciones duplicadas en mi registro si hago una segunda extracción de git después de la reorganización, por ejemplo:
git clone
git commit
git commit
...
git pull
git log --pretty=format:"%h - %an : %s" // log before rebasing
git rebase -i HEAD~3
git pull
git log --pretty=format:"%h - %an : %s" // log after rebasing
git pull
git log --pretty=format:"%h - %an : %s" // log after rebasing after pulling
Entonces publiqué esta pregunta:
git: confirmaciones duplicadas después de una rebase local seguida de extracción
La respuesta de Roger allí me llevó a esta pregunta: ¿Por qué veo confirmaciones duplicadas después de rebase y extracción?
Desde arriba, el registro antes de rebasar se ve así:
84e4015 - Me : Local Commit 3
0dbe86a - Me : Local Commit 2
d57ba2a - Me : Merge branch 'master' of remote repository
a86ea35 - Me : Local Commit 1 before reordering
2fc4fe7 - Remote User 2 : Remote Commit 2
b7a8656 - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository
Y el registro después de rebasar se ve así:
cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository
Observe que los 2 commits originales 2fc4fe7 y b7a8656 tienen nuevos SHA; 9777c56 y a2d7d8b. Creo que este es el comienzo del problema.
Ahora, después de hacer otro git pull, el registro se ve así:
e8e1a85 - Me : Merge branch 'master' of remote repository
cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
2fc4fe7 - Remote User 2 : Remote Commit 2 // duplicate 2
b7a8656 - Remote User 1 : Remote Commit 1 // duplicate 1
8ce80fc - Me : Merge branch 'master' of remote repository
Observe que las confirmaciones remotas ahora están duplicadas y que los SHA originales de las confirmaciones remotas, 2fc4fe7 y b7a8656, han regresado.
En la respuesta de Roger, dijo que parecía culpa de otras personas presionando para burlarse y que estaban rebajando sus compromisos ya presionados. Pero creo que es mi culpa por rebasar localmente un commit empujado.
¿Es esto porque volví a crear un commit que ya había sido enviado al control remoto? Si es así, ¿qué debería haber hecho para evitar esto? Necesito volver a redactar mis confirmaciones para poder impulsar una única confirmación. ¿Debería haber usado un sistema de ramificación para hacer esto? Si es así, ¿cómo usaría ramas para resolver este problema?