Lo que he aprendido: Git

[ACTUALIZADO He añadido mis apuntes del Pro Git de Scott Chacon en GitHub]

Hace unos días dije que estaba aprendiendo a usar Git y que iba a reproducir aquí un pequeño tutorial que había escrito y tenía en GitHub. Pues aquí está. Y con el reto añadido de que estoy usando Markdown. Es una cosa muy sencillita que espero ir mejorando con el tiempo, pero espero que os sea útil.

¿Qué es Git?

Git es un software de control de versiones, es decir, permite gestionar los cambios que se realicen sobre un producto.

Uso

Git se usa desde la consola.

Lo primero es decirle a Git quien eres:

  • Email : git config --global user.email “email”
  • Nombre : git config --global user.name “nombre”

Una vez hecho esto, inicializamos el repositorio en la carpeta que queramos con git init. Se crea un repositorio vacío en /.git/

Ahora queremos añadir archivos de los que se registrarán los cambios. Para ello hacemos:

git add nombreArchivo

Se pueden añadir varios archivos con *.extensión o todos los archivos de la carpeta con . (. = carpeta actual)

Si queremos ver el estado del repositorio hacemos git status. Dirá si se ha realizado algún cambio a los archivos que se siguen y si hay archivos en la carpeta que no estamos siguiendo.

Podemos quitar archivos de los que se registran los cambios con git reset nombre_archivo. Es lo contrario a git add. Esto no elimina los archivos, para eliminar archivos tanto del ordenador como del archivo de cambios hay que hacer git rm nombre_archivo. Después de eliminar archivos lo mejor es hacer un commit con una explicación.

Si queremos cambiar un archivo de carpeta podemos usar git mv archivo carpeta. Esto crea un archivo dentro de la carpeta y elimina el de fuera. Si se hace mv fuera de Git hay que eliminar el archivo a mano.

Commits

Para guardar los cambios realizados, lo que se conoce como commit, hacemos:

git commit -m “Mensaje con resumen sobre los cambios”

Antes de que se haga el commit pero después del add los cambios están staged, es decir, se sabe que han ocurrido cambios en los archivos pero se puede decidir entre cambiar los archivos en el repositorio mediante git commit o anular los cambios con git reset.

Si se ignora el -m en el commit se abrirá un editor de texto para escribir interactivamente el comentario.

Se pueden dejar las cosas como estaban en el último commit con:

git checkout nombre_archivo

Si por en vez de volver al estado del último commit queremos volver a cualquier otro estado hay que hacer:

git checkout número_hash

El número hash puede verse al hacer git log, solo son necesarias las 7 primeras cifras. En el momento de hacer checkout se abre una nueva rama para que puedas hurgar, pero no se modifica nada en principio. Para volver al último estado usaríamos git checkout master.

Los commits pueden deshacerse usando git revert HEAD o el hash del commit que haya que anular, HEAD es un puntero que refiere al último commit. Esto eliminará el commit pero no lo quitará del historial, para eso hay que resetear a antes del commit malo con git reset --hard etiqueta_de_versión. Aunque se haga esto los commits no desaparecen si están etiquetados, con git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short master --all pueden verse. La etiqueta puede quitarse con: git tag -d etiqueta_de_versión

Se pueden corregir commits con git commit --amend -m “Nuevo comentario”

Ver historial

Para ver todos los commits hechos hasta el momento usamos git log

Se puede cambiar el formato a versión de una línea con git log --pretty=oneline.
Otra manera elegante de ver el log es:

git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

Si solo queremos ver los cambios que ha habido desde el último commit podemos usar git diff HEAD

Repositorio online

Podemos guardar todo nuestro trabajo en un repositorio online como GitHub para tenerlo accesible desde diferentes sitios. Los repositorios se añaden con git remote add nombre_repositorio URL_repositorio

Para mandar los cambios al repositorio online usamos git push -u nombre_repositorio nombre_rama. La opción -u sirve para recordar los parámetros. nombre_rama debe ser master a no ser que haya ramas nuevas. Con git push sin más subimos todos los cambios.

Para recuperar los cambios tenemos git pull nombre_repositorio nombre_rama que es un git fetch seguido de un git merge.

Ramas

Las ramas nos sirven para trabajar en paralelo en alguna funcionalidad que no sabemos todavía si queremos incorporar al proyecto general. Los comandos básicos para usarlas son:

  • Creamos una nueva rama usando git branch nombre_rama

  • Para ver las ramas actuales: git branch

  • Para cambiar de rama: git checkout nombre_rama

  • Para fusionar la rama actual con otra: git merge rama_a_unir

  • Para eliminar una rama: git branch -d nombre_rama

Etiquetas

Se pueden etiquetar las versiones para no tener que localizarlas por el número hash. Con git tag etiqueta_de_versión se etiqueta la versión actual. Para etiquetar las anteriores hay que hacer git checkout primero, es posible ir con el hash y también con notación ^: git checkout etiqueta_de_versión^ irá al padre de la versión. Una vez etiquetadas las versiones se pueden rescatar con la etiqueta en lugar de con el hash.

Las etiquetas se ven con git tag. Para ver las etiquetas en el log habría que hacer
git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short master --all

Aliases

Hay dos maneras de definir aliases

  1. Se puede cambiar el archivo .gitconfig para generar aliases. Habría que añadir:

[alias]
hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

Y ahora con escribir git hist ejecuta toda la frase

  1. Se pueden crear directamente desde la consola con:

git config --global alias.hist 'log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short'

Clonar

Se pueden clonar repositorios con git clone repositorio_a_clonar nombre_repositorio_clonado. Se puede ver de donde proviene este repositorio con git remote y git remote show nombre_que_devuelve que será origin seguramente. Si se realizan cambios en el repositorio original, pueden recuperarse en el clon con git fetch y luego git merge origin/master o el equivalente que es git pull

Más:

Anuncios

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s