Rehaciendo cambios locales
git permite realizar cambios commits que no se hayan publicado por medio de push. Es decir, esta técnica que se describe sólo puede ser empleada cuando nuestros cambios aún permanecen en local.
Suponiendo el siguiente escenario:
<syntax lang="bash"> % git log --oneline 32753ca Anadir fichero .gitignore 2ba6780 Introducir "Adios mundo" en el ejemplo 4dbfb62 Anadir el fichero holamundo.py 790cbd0 Initial commit </syntax>
Si se desea realizar cambios sobre el commit 2ba6780, se puede invocar la orden:
<syntax lang="bash"> % git rebase -i 2ba6780^ </syntax>
Que muestra lo siguiente:
<syntax lang="bash"> pick 2ba6780 Introducir "Adios mundo" en el ejemplo pick 32753ca Añadir fichero .gitignore
- Rebase 4dbfb62..32753ca onto 4dbfb62
- Commands:
- p, pick = use commit
- r, reword = use commit, but edit the commit message
- e, edit = use commit, but stop for amending
- s, squash = use commit, but meld into previous commit
- f, fixup = like "squash", but discard this commit's log message
- x, exec = run command (the rest of the line) using shell
- These lines can be re-ordered; they are executed from top to bottom.
- If you remove a line here THAT COMMIT WILL BE LOST.
- However, if you remove everything, the rebase will be aborted.
- Note that empty commits are commented out
</syntax>
Editando la línea correspondiente con una e se puede editar un commit, es decir:
<syntax lang="bash">
e 2ba6780 Introducir "Adios mundo" en el ejemplo
pick 32753ca Añadir fichero .gitignore
- Rebase 4dbfb62..32753ca onto 4dbfb62
- Commands:
- p, pick = use commit
- r, reword = use commit, but edit the commit message
- e, edit = use commit, but stop for amending
- s, squash = use commit, but meld into previous commit
- f, fixup = like "squash", but discard this commit's log message
- x, exec = run command (the rest of the line) using shell
- These lines can be re-ordered; they are executed from top to bottom.
- If you remove a line here THAT COMMIT WILL BE LOST.
- However, if you remove everything, the rebase will be aborted.
- Note that empty commits are commented out
</syntax>
Una vez aplicado cambios sobre el commit, hay que añadir de nuevo el fichero que ha sido modificado:
<syntax lang="bash"> % git add fichero.py </syntax>
Y se aplica la modificación sobre el commit con:
<syntax lang="bash"> % git commit --amend </syntax>