Uso avanzado de Git

GIT

Utilizaré este artículo para añadir los comandos más complicados de entender a la hora de utilizar el control de versiónes en GIT.

¿Qué se hacer?

  • Instalar Git
  • Configurar llaves ssh
  • Añadir archivos al repositorio
  • Realizar commit y cambios de ramas

¿Qué voy a aprender?

  • Comprobar diferencias entre versiones del código.
  • Volver a una versión anterior para reparar un problema en una versión actual.
  • Modificar el comentario de un commit creado.
  • Ver los archivos modificados desde el ultimo commit.
  • Mergear ramas
  • Entender el flujo de trabajo
  • Solucionar problemas del trabajo diario.

Comandos:

git config --list: Para ver la configuración actual
git config -- list --show-origin: Para ver donde están las configuraciones guardadas
git diff hashreciente hashviejo: comparar entre versiones
git reset hashanterior --hard: vuelve al estado anterior de la versión.
git reset hashanterior --soft: borra los registros de git pero mantiene los cambios del staging.
git log --stat: muestra el log con los cambios por cada commit.
git checkout hash : se posición en la versión del commit que indiquemos con el hash. Esto nos puede servir para comprobar alguna versión anterior. Es como moverte por las versiones del archivo. Para volver al área de trabajo tendremos que volver a la rama o version que estábamos, en este caso seria master.
git rm fichero.txt: elimina el fichero de nuestro repositorio y del disco.
git commit -am "comentario" : realiza un add y commit de los archivos que ya he hecho antes add.
git merge cabecera: fusiono la rama cabecera con la rama en la que estoy posicionado.

Imagina que has modificado varios archivos de un repositorio, pero solo quieres hacer commit de un archivo.¿Como puedo hacer commit de un sólo fichero de mi repositorio?

git commit -m "Aquí tu mensaje del commit" archivo.txt

En caso de que hayamos añadido al staging con git add un archivo que aun no esta listo para subir, podemos volver atrás con:

git rm --cached nombrefichero.txt o si queremos sacar del staging todos los archivos por que nos hemos equivocado haciendo un git add . podemos utilizar git reset HEAD.

Después usamos git add nombrefichero.txt y después realizamos el commit.

Índice de contenido

Modificar el comentario del último commit

git commit --amend

Ver los cambios dese el ultimo commit

*git diff hashreciente hashviejo

Subir un proyecto local a github

git remote add origin urldegithub

Traemos el contenido remoto

git pull origin master --allow-unrelated-histories

Enviamos el contenido local al servido remoto

git push origin master

Ver el log de git de forma visual

git log --all --graph --decorate --oneline

Tags y versiones

Los tag se suelen utilizar para asignar versiones a nuestros estados de código.

Crear un nuevo tag y asignarlo a un commit
git tag -a nombre-del-tag id-del-commit

Borrar un tag en el repositorio local
git tag -d nombre-del-tag

Listar los tags de nuestro repositorio local
git tag o git show-ref --tags

Publicar un tag en el repositorio remoto

git push origin --tags

Borrar un tag del repositorio remoto
git tag -d nombre-del-tag y git push origin :refs/tags/nombre-del-tag

Traer cambios de un fork de otro proyecto

Añadimos una fuente nueva a un proyecto que hemos clonado
git remote add upstream enlacegithubproyecto

Nos traemos los cambios de master a upstream
git pull upstream master

Subimos el repositorio a GitHub
git push origin master

Subir los cambios al servidor remoto después de clonarlo

git push origin master

Utilizar rebase para incrustar una rama(experimento) en master

Nos posicionamos en la rama que queremos añadir(experimento).
git rebase master

luego nos posicionamos en la rama master
git rebase experimiento

Git stash

Sirve para guardar cambios en memoria y poder recuperarlos mas tarde, por ejemplo movernos entre ramas.
git stash

Para recuperar el estado
git stash pop

Para ver la lista de stash
git stash list

También podemos crear una nueva rama con el contenido del stash( esta rama se crea solo en local)
git stash branch nuevarama

Eliminar archivos añadidos al repositorio por error

Para ver que archivos va a borrar sin ejecutarlo
git clean --dry-run

Para ejecutar el comando es necesario usar -f
git clean -f

Traerme cambios de una rama nueva pero mas antigua que el head

Buscamos el hash del commit de la rama, nos posicionamos en la rama master y ejecutamos el comando.
git cherry-pick hash

Añadir un cambio posterior a un commit

Si queria modificar algo y hice comit antes de hacerlo, puedo agregar los cambios al ultimo commit con.

git commit --amend

Si hemos hecho cambios y se ha estropeado algo podemos recuperar todo a un estado anterior y eliminar toda la historia

git reset --hard hash

Añadir alias a los comandos de GIT

Añade el comando git stats y ejecuta "git shortlog -sn --all -no-merges"
git config --global alias.stats "shortlog -sn --all -no-merges"

Ver quien a hecho que

git blame archivo -c

Buscar en la ayuda de GIT

git comando --help

Ver las ramas remotas

git branch -r

Ver todas las ramas, locales y remotas

git branch -a

Flujo de trabajo

  1. Traerme los cambios al repositorio local
    git pull origin master
  2. Realizar cambios, añadir y commit
    git commit -am "Comentario"
  3. Enviar al servidor remoto
    git push origin master

Enlaces interesantes

Taller de Git