Diferencia entre revisiones de «Rehaciendo cambios locales»

De Wiki de EGC
Saltar a: navegación, buscar
(Página creada con «''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 nuestr...»)
 
(Si el cambio está por debajo del HEAD del repositorio)
 
(No se muestran 4 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
''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.
 
''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:
+
= Si el cambio está en el HEAD del repositorio =
  
<syntax lang="bash">
+
Si queremos editar el último ''commit'' que hemos hecho en local, tenemos que hacer:
 +
 
 +
<source lang="bash">
 +
[... editar los ficheros que corresponda ... ]
 +
% git add fichero.py  # siendo este el fichero modificado
 +
% git commit --amend
 +
</source>
 +
 
 +
con esto podemos ''enmendar'' fácilmente el último commit local.
 +
 
 +
= Si el cambio está por debajo del HEAD del repositorio =
 +
 
 +
Este escenario es más complejo. Si suponemos que tenemos la siguiente situación:
 +
 
 +
<source lang="bash">
 
% git log --oneline
 
% git log --oneline
 
32753ca Anadir fichero .gitignore
 
32753ca Anadir fichero .gitignore
Línea 9: Línea 23:
 
4dbfb62 Anadir el fichero holamundo.py
 
4dbfb62 Anadir el fichero holamundo.py
 
790cbd0 Initial commit
 
790cbd0 Initial commit
</syntax>
+
</source>
  
Si se desea realizar cambios sobre el commit ''2ba6780'', se puede invocar la orden:
+
Si se desea realizar cambios sobre el commit ''2ba6780'' que está por debajo del HEAD (que en este caso correspondería con 32753ca), se puede invocar la orden:
  
<syntax lang="bash">
+
<source lang="bash">
 
% git rebase -i 2ba6780^
 
% git rebase -i 2ba6780^
</syntax>
+
</source>
  
 
Que muestra lo siguiente:
 
Que muestra lo siguiente:
  
<syntax lang="bash">
+
<source lang="bash">
 
pick 2ba6780 Introducir "Adios mundo" en el ejemplo
 
pick 2ba6780 Introducir "Adios mundo" en el ejemplo
 
pick 32753ca Añadir fichero .gitignore
 
pick 32753ca Añadir fichero .gitignore
Línea 40: Línea 54:
 
#
 
#
 
# Note that empty commits are commented out
 
# Note that empty commits are commented out
</syntax>
+
</source>
  
 
Editando la línea correspondiente con una ''e'' se puede editar un commit, es decir:
 
Editando la línea correspondiente con una ''e'' se puede editar un commit, es decir:
  
 
+
<source lang="bash">
<syntax lang="bash">
 
 
e 2ba6780 Introducir "Adios mundo" en el ejemplo
 
e 2ba6780 Introducir "Adios mundo" en el ejemplo
 
pick 32753ca Añadir fichero .gitignore
 
pick 32753ca Añadir fichero .gitignore
Línea 66: Línea 79:
 
#
 
#
 
# Note that empty commits are commented out
 
# Note that empty commits are commented out
</syntax>
+
</source>
  
 
Una vez aplicado cambios sobre el commit, hay que añadir de nuevo el fichero que ha sido modificado:
 
Una vez aplicado cambios sobre el commit, hay que añadir de nuevo el fichero que ha sido modificado:
  
<syntax lang="bash">
+
<source lang="bash">
 
% git add fichero.py
 
% git add fichero.py
</syntax>
+
</source>
  
 
Y se aplica la modificación sobre el commit con:
 
Y se aplica la modificación sobre el commit con:
  
<syntax lang="bash">
+
<source lang="bash">
 
% git commit --amend
 
% git commit --amend
</syntax>
+
</source>
 +
 
 +
Y para continuar con el rebase interactivo se hace:
 +
 
 +
<source lang="bash">
 +
% git rebase --continue
 +
</source>

Revisión actual del 14:18 12 nov 2015

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.

Si el cambio está en el HEAD del repositorio

Si queremos editar el último commit que hemos hecho en local, tenemos que hacer:

[... editar los ficheros que corresponda ... ]
% git add fichero.py   # siendo este el fichero modificado
% git commit --amend

con esto podemos enmendar fácilmente el último commit local.

Si el cambio está por debajo del HEAD del repositorio

Este escenario es más complejo. Si suponemos que tenemos la siguiente situación:

% git log --oneline
32753ca Anadir fichero .gitignore
2ba6780 Introducir "Adios mundo" en el ejemplo
4dbfb62 Anadir el fichero holamundo.py
790cbd0 Initial commit

Si se desea realizar cambios sobre el commit 2ba6780 que está por debajo del HEAD (que en este caso correspondería con 32753ca), se puede invocar la orden:

% git rebase -i 2ba6780^

Que muestra lo siguiente:

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

Editando la línea correspondiente con una e se puede editar un commit, es decir:

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

Una vez aplicado cambios sobre el commit, hay que añadir de nuevo el fichero que ha sido modificado:

% git add fichero.py

Y se aplica la modificación sobre el commit con:

% git commit --amend

Y para continuar con el rebase interactivo se hace:

% git rebase --continue