Jason McCreary creador de Laravel Shift nos habla sobre la impresión que se tiene de Git y las preguntas que constantemente se hacen los que recién están empezando a utilizar esta tecnología y cómo es que muchas personas que aunque ya conozcan y trabajen con Git, no conocen del todo lo que es Git. Pero como siempre al final nos encontramos con alguien que es un experto y del cual podemos aprender bastante.
Comandos poco comunes de Git
¿Git add?
Aún y cuando hacemos uso del comando git add
a menudo ya sea por medio de git add .
, git add -A
o incluso omitiendo este comando y en su lugar creando un commit directo con git commit -am 'mensaje'
estamos diciéndole a Git que queremos que agregue todos los cambios de todos los archivos, en su lugar tenemos un par de opciones que nos van a resultar bastante útiles:
git add -p nos permite hacer un patch, es decir, nos permite agregar ciertas secciones de nuestros archivos que contienen cambios, en lugar de agregar todos los cambios que hay en dicho archivo, si en un archivo cambiamos la linea 5 y la línea 10 este comando nos permitirá elegir si queremos agregar el cambio de la línea 5, de la línea 10 o ambos.
git add -i nos permite añadir archivos al stage de manera interactiva, en ocasiones cuando modificamos muchos archivos es probable que no queramos añadirlos todos al stage, una opción es poner los nombres de los archivos justo después del teclear git add pero cuando son muchos resulta un verdadero dolor de cabeza, en su lugar podemos agregarlos de manera interactiva y de esta forma Git va a iterar sobre los archivos y nos preguntará por cada uno si los queremos agregar o no.
Git commit
En ocasiones, sobre todo cuando tenemos un cambio menor, queremos añadir un commit dentro de otro o incluso modificar el título de un commit, esto lo podemos hacer sin ningún problema siempre y cuando no se haya compartido con alguien más si hacemos el commit de la siguiente manera git commit --amend
, esto nos permite modificar nuestro último commit, ya sea para agregar cambios faltantes o para cambiar su encabezado. Si lo único que queremos es agregar cambios faltantes sin cambiar su encabezado podemos teclear git commit --amend --no-edit
para mantener el mensaje del commit tal como estaba antes.
Usar amend es seguro si aún no hemos compartido nuestro trabajo con otros (es decir, no hemos hecho “git push”).
Git stash
Hay ocasiones en las que necesitamos quitar todas nuestras cosas de nuestra vista para así enfocarnos en lo realmente importante, git stash
nos permite hacer algo similar, supongamos que tenemos cambios en nuestro código, algunos ya están en stage, otros no y repentinamente queremos quitar todo para dejar el código justo como en nuestro último commit pero no queremos perder lo que llevamos, para esto nos sirve git stash
, sin embargo esto toma por defecto solamente lo que ya está teniendo seguimiento, es decir, si tenemos archivos nuevos que aún no han estado en algún commit anteriormente no se van a tomar en cuenta a menos de que hagamos git stash --include-untracked
Git push
Al trabajar con este comando normalmente debemos indicar hacia cuál remoto queremos enviarlo (normalmente llamado origin) y qué branch es el que queremos enviar, esto normalmente podemos omitirlo si hacemos uso de git push origin HEAD
ya que de esta forma, si nosotros estamos sobre el branch prueba nuestro HEAD también estará sobre prueba y de esta manera se hará el push hacia ese branch, además, si el branch no existe en el repositorio remoto, Git lo creará por nosotros.
Git rebase
Esto nos permite poder hacer varias funciones con los commits que tenemos registrados siempre y cuando no se esté en nuestro repositorio remoto. Entre las funciones que nos brinda podemos hacer un squash es decir, unir 2 o más commits dentro de uno solo, rename o renombrar los commits o incluso podemos eliminar algunos commits (aunque pudiera resultar un poco peligroso hacer esto).
Git cherry-pick
Este comando es muy útil cuando queremos unir ciertos cambios de un branch a otro pero específicamente de un commit en particular, si quisiéramos hacerlo por medio de un merge o un rebase, esto nos traería todos los cambios del branch original, pero en su lugar podemos hacer git cherry-pick <commit>
para poder unir a nuestro branch actual un único commit específico.
Git bisect
En ocasiones puede resultar que tengamos un bug en nuestro branch sin tener idea de cuando se originó, este comando nos permite pasarle dos commits, el primero es el del commit que está fallando, el segundo es el del commit que está funcionando y esta función nos irá moviendo dentro de ese rango para revisar cuando se originó ese bug, y nos permitirá comprobar que cada uno de los commits que tenemos esté funcionando correctamente hasta localizar el error.
Git reflog
Git nos permite manejar una especie de historial interno independiente del que se encuentra en nuestro repositorio externo, nos mantiene un registro de cada vez que movamos el puntero de nuestro HEAD y de esta manera poder volver a cierto momento de nuestro proyecto sin importar lo que hayamos hecho, no es recomendable hacerlo parte de nuestro workflow diario ya que no es muy estable pero ocasionalmente pudiera ser útil para nosotros.
Aprende más sobre git reflog y otras técnicas de git que quizás no conoces en nuestro Curso de Git y GitHub con Dimitri Acosta.
Flujos de trabajo
Git flow
Git flow nos permite tener un flujo más ágil de trabajo en el que nuestros branches están específicamente definidos para la función que van a utilizar, normalmente nuestros branches principales son develop y master sin embargo podemos tener más ramas para nuestros teatures, hotfix y releases.
Github flow
Es parecido a lo que hace git flow pero con la diferencia de que solamente tenemos nuestro branch master y los features que vayamos utilizando se hacen desde su propio branch de features.
Atajos
Al estar revisando el log de nuestro proyecto podemos hacer uso de unos pequeños atajos, por ejemplo, en lugar de visualizar todo el historial podemos pasarle unas opciones para poder ver solamente una fracción del historial, suponiendo que queremos ver los últimos 5 commits podemos hacer git log HEAD~5 y para postrarlos en una sola línea podemos pasar el flag –oneline
Otro comando que puede resultar muy útil es git checkout -
, al pasarle un – al final nos va a devolver hacia el branch en el que estábamos anteriormente, muy útil por si olvidamos cuál branch era o si no nos fijamos en qué branch estábamos.
Git nos permite trabajar con alias, ya que hacemos uso de estos comandos muy frecuentemente podemos ponerles un nombre corto para no tener que escribir el comando completo, sin embargo hay que tener cuidado con los alias que definimos, porque pueden ser confusos, por ejemplo “git co” ¿Equivale a git commit? ¿Equivale a git checkout? Una alternativa a esto es tener autocompletado en vez de aliases.
Herramientas
Prompt
Una de las herramientas que nos puede servir mucho es utilizar un theme para nuestra terminal que nos muestre el branch en el que estamos trabajando para poder tener una representación visual de éste.
Git open
Es una herramienta que no forma parte del núcleo de git, en su lugar es un paquete de npm el cual se puede descargar e instalar en nuestras computadoras, nos permite abrir en el navegador el repositorio de nuestro proyecto, en el branch en el que nos encontremos actualmente dentro de la terminal.
En Styde.net tenemos un Curso completo de Git donde podrás ver más a fondo muchas de las características mencionadas en esta plática para que al final puedas estar en desacuerdo con el título y en su lugar puedan decir «Ya se usar Git«.
Más sobre Laracon Online
Aquí puedes encontrar un resumen de cada charla del evento
- Jeffrey Way “Laravel Mix.”
- Evan You “Something Vue.js 2.2+ related”
- Rachel Andrew “CSS Grid and Flexbox.”
- Adam Wathan “You Might Not Need a Mocking Framework.”
- Taylor Otwell “Laravel 5.4 internals walkthrough.”
- Nick Canzoneri “What developers should know about email.”
- Matt Stauffer “Mastering the Illuminate Container.”
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.