REMOVER Y MOVER ARCHIVOS
Si queremos eliminar archivos de nuestro repositorio, git ofrece otro comando útil llamado git rm muy similar al comando rm unix.
Hablemos un poco sobre lo que hace este comando git rm, este elimina el o los archivos de nuestro repositorio y pide una confirmación para mantener el registro, el problema con este comando es que elimina el archivo del repositorio y del directorio en el que estamos trabajando, es como hacer rm «archivo» en una terminal GNU/Linux (pero si formo parte del histórico de git, es posible recuperarlo), git es bondadoso y ofrece la opción de eliminar el archivo del repositorio pero dejando el archivo intacto en nuestro directorio. Si hemos hecho commit a un archivo por accidente, podemos usar git rm --cahed «archivo» git lo dejara tal y como estaba antes de hacer el commit, veamos esto con un ejemplo sencillo:
Vamos a crear un archivo y lo incluiremos “accidentalmente” a nuestro repositorio.
$ echo “Oops!” > oops
$ git rm oops
fatal: pathspec 'oops' did not match any files
La operación no funciona porque el archivo aun no es parte de nuestro repositorio.
$ git add oops
$ git commit -am “commit accidental”
[master 8127794] commit accidental
1 file changed, 1 insertion(+)
create mode 100644 oops
$ git log -1 --pretty=short
commit 812779449b6fb39450d1426899a39945b340fb19
Author: Mr. Floyd <[email protected]>
commit accidental
Hemos agregado el archivo “accidentalmente” a nuestro repositorio. Como no lo queríamos agregar, pero si queremos mantenerlo en nuestro directorio procedamos a quitarlo del repositorio:
$ git rm --cached oops
rm 'oops'
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: oops
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# oops
$ ls
oops README script2.py script.py
$ git commit -am “oops elimiado del repositorio”
[master 22592c0] oops elimiado del repositorio
1 file changed, 1 deletion(-)
delete mode 100644 oops
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# oops
Git ha hecho bien su trabajo, ha borrado del repositorio el archivo pero lo mantiene intacto en nuestro directorio. Agregaremos de nuevo el archivo y esta vez lo borraremos con git rm.
$ git add oops
$ git commit -am "commit accidental"
[master 43af71f] commit accidental
1 file changed, 1 insertion(+)
create mode 100644 oops
$ git rm oops
rm 'oops
$ ls
README script2.py script.py
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: oops
#
$ git commit -am “oops borrado correctamente”
[master 0f6d43a] oops borrado correctamente
1 file changed, 1 deletion(-)
delete mode 100644 oops
Detengámonos un poco y veamos los últimos 5 commits que hemos hecho:
$ git log -5 --pretty=short
commit 0f6d43a9c0687fa70ca95700aae45d75b782bb43
Author: Mr. Floyd <[email protected]>
oops borrado correctamente
commit 43af71fcd7a71e468ebfa57d059f51bd5a9cacee
Author: Mr. Floyd <[email protected]>
commit accidental
commit 22592c0f14990764a21437d792c07fadca50d24a
Author: Mr. Floyd <[email protected]>
oops elimiado del repositorio
commit 812779449b6fb39450d1426899a39945b340fb19
Author: Mr. Floyd <[email protected]>
commit accidental
commit e12b294a508bee8602943644c3e12a4c2f81583b
Author: Mr. Floyd <[email protected]>
README actualizado
Conozcamos ahora otro útil comando git mv, es el análogo a mv en unix para mover y renombrar archivos y directorios. Según la documentación oficial: “Git no hace un seguimiento explicito del movimiento de archivos. Si renombras un archivo, en Git no se almacena ningún metadato que indique que lo has renombrado...”.
«quedan dudas sobre eso, si sabes algo más no dudes en compartirlo acá...»
Renombremos uno de nuestros archivos:
$ git mv script.py holaMundo.py
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: script.py -> holaMundo.py
$ git commit -am "script.py renombrado a holaMundo.py"
[master f3e2083] script.py renombrado a holaMundo.py
1 file changed, 0 insertions(+), 0 deletions(-)
rename script.py => holaMundo.py (100%)