Git init

Inicializa el repositorio en git

Colocar etiquetas en los comandos

Git config —global alias.<mi alias> <comando>

esto etiqueta el comando a un alias predefinida


Log
git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all"

Status
git config --global alias.s status --short
git config --global alias.s "status --short"

Alternativa útil de status
git config --global alias.s status -sb

Git add

Añade al repositorio un archivo o varios archivos

Git add .

Añade al repositorio todo lo que hay en la carpeta

Git add <Nombre archivo>

Añade al repositorio solo el archivo en cuestion

Git commit

Envia los ultimos cambios agregados por lo general va con un mensaje

git commit -m "Nombre del commit o mensaje "

git commit -am "mensaje" // solo funciona con archivos que previamente se le haya realizado un git add . 

Para corregir un commit se puede utilizar el siguiente código

git commit --amend -m "Mensaje"

Git status

Me permite saber que archivos fueron o no agregados al repositorio

Git show

mostrar todos los cambios que se ha hecho incluyendo las lineas que se han cambiado

Git show<nombre del archivo>

sirve para ver los cambios que se ha hecho a ese archivo

Git log

para ver toda la historia de todos los commits sirve si queremos regresar a un punto en particular

Git log <nombre del archivo>

sirve para ver los commits que se ha hecho a ese archivo

Comandos git log

  1. git log --oneline - Te muestra el id commit y el título del commit.
  2. git log --decorate- Te muestra donde se encuentra el head point en el log.
  3. git log --stat - Explica el número de líneas que se cambiaron brevemente.
  4. git log -p- Explica el número de líneas que se cambiaron y te muestra que se cambió en el contenido.
  5. git shortlog - Indica que commits ha realizado un usuario, mostrando el usuario y el titulo de sus commits.
  6. git log --graph --oneline --decorate y
  7. git log --pretty=format:"%cn hizo un commit %h el dia %cd" - Muestra mensajes personalizados de los commits.
  8. git log -3 - Limitamos el número de commits.
  9. git log --after=“2018-1-2” ,
  10. git log --after=“today” y
  11. git log --after=“2018-1-2” --before=“today” - Commits para localizar por fechas.
  12. git log --author=“Name Author” - Commits realizados por autor que cumplan exactamente con el nombre.
  13. git log --grep=“INVIE” - Busca los commits que cumplan tal cual está escrito entre las comillas.
  14. git log --grep=“INVIE” –i- Busca los commits que cumplan sin importar mayúsculas o minúsculas.
  15. git log – index.html- Busca los commits en un archivo en específico.
  16. git log -S “Por contenido”- Buscar los commits con el contenido dentro del archivo.
  17. git log > log.txt - guardar los logs en un archivo txt

Git config

Muestra configuraciones de git también podemos usar –list para mostrar la configuración por defecto de nuestro git y si añadimos --show-origin inhales nos muestra las configuraciones guardadas y su ubicación.

Git config --global user.name:

Cambia de manera global el nombre del usuario, seguidamente ponemos entre comillas nuestro nombre.

Git config --global user.email:

Cambia de manera global el email del usuario, seguidamente ponemos entre comillas nuestro nombre.

Git rm

Este comando nos ayuda a eliminar archivos de Git sin eliminar su historial del sistema de versiones. Esto quiere decir que si necesitamos recuperar el archivo solo debemos “viajar en el tiempo” y recuperar el último commit antes de borrar el archivo en cuestión.

Recuerda que git rm no puede usarse así nomás. Debemos usar uno de los flags para indicarle a Git cómo eliminar los archivos que ya no necesitamos en la última versión del proyecto:

Git mv

Este comando sirve para renombrar un elemento del repositorio la forma correcta de utilizarlo es

git mv <nombre actual elemento> <Nuevo nombre>

Git diff <código del comitA> <codigo del comitB>

Lo usamos si queremos ver la diferencia entre una versión y otra, no necesariamente todos los cambios desde la creación del archivo, podemos usar el comando

Git checkout <Commit>

Nos permite viajar en el tiempo. Podemos volver a cualquier versión anterior de un archivo específico o incluso del proyecto entero. Esta también es la forma de crear ramas y movernos entre ellas.

Git reset <Commit>

En este caso, no solo “volvemos en el tiempo”, sino que borramos los cambios que hicimos después de este commit.

Hay dos formas de usar git reset: con el argumento --hard, borrando toda la información que tengamos en el área de staging (y perdiendo todo para siempre). O, un poco más seguro, con el argumento --soft, que mantiene allí los archivos del área de staging para que podamos aplicar nuestros últimos cambios pero desde un commit anterior.

Este comando nos ayuda a volver en el tiempo. Pero no como git checkout que nos deja ir, mirar, pasear y volver. Con git reset volvemos al pasado sin la posibilidad de volver al futuro. Borramos la historia y la debemos sobreescribir. No hay vuelta atrás.

Este comando es muy peligroso y debemos usarlo solo en caso de emergencia. Recuerda que debemos usar alguna de estas dos opciones:

Hay dos formas de usar git reset: con el argumento --hard, borrando toda la información que tengamos en el área de staging (y perdiendo todo para siempre). O, un poco más seguro, con el argumento --soft, que mantiene allí los archivos del área de staging para que podamos aplicar nuestros últimos cambios pero desde un commit anterior.

¡Pero todavía falta algo!

Git push

Luego de hacer git add y git commit debemos ejecutar este comando para mandar los cambios al servidor remoto.

Git fetch:

Lo usamos para traer actualizaciones del servidor remoto y guardarlas en nuestro repositorio local (en caso de que hayan, por supuesto).

Git merge:

También usamos el comando git merge con servidores remotos. Lo necesitamos para combinar los últimos cambios del servidor remoto y nuestro directorio de trabajo.

Nos permite crear un nuevo commit con la combinación de dos ramas (la rama donde nos encontramos cuando ejecutamos el comando y la rama que indiquemos después del comando).

# Crear un nuevo commit en la rama master combinando
# los cambios de la rama cabecera:
git checkout master
git merge cabecera

# Crear un nuevo commit en la rama cabecera combinando
# los cambios de cualquier otra rama:
git checkout cabecera
git merge cualquier-otra-rama

Recuerda que siempre debemos crear un nuevo commit para aplicar los cambios del merge. Si Git puede resolver el conflicto hará commit automáticamente. Pero, en caso de no pueda resolverlo, debemos solucionarlo y hacer el commit.

Los archivos con conflictos por el comando git merge entran en un nuevo estado que conocemos como Unmerged. Funcionan muy parecido a los archivos en estado Unstaged, algo así como un estado intermedio entre Untracked y Unstaged, solo debemos ejecutar git add para pasarlos al área de staging y git commit para aplicar los cambios en el repositorio.

Untitled

Git pull:

Básicamente, git fetch y git merge al mismo tiempo.

Ramas

Las ramas son la forma de hacer cambios en nuestro proyecto sin afectar el flujo de trabajo de la rama principal. Esto porque queremos trabajar una parte muy específica de la aplicación o simplemente experimentar.

La cabecera o HEAD representan la rama y el commit de esa rama donde estamos trabajando. Por defecto, esta cabecera aparecerá en el último commit de nuestra rama principal. Pero podemos cambiarlo al crear una rama (git branch ramagit checkout -b rama) o movernos en el tiempo a cualquier otro commit de cualquier otra rama con los comandos (git reset id-commitgit checkout rama-o-id-commit).

Untitled

Git branch -m master main —> cambia el nombre de la rama

Git remote

Es una forma de conectar el repositorio de GitHub con nuestro repositorio local

# con el nombre de origin
git remote add origin URL

# Segundo: Verificar que la URL se haya guardado
# correctamente:
git remote
git remote -v

# Tercero: Traer la versión del repositorio remoto y
# hacer merge para crear un commit con los archivos
# de ambas partes. Podemos usar git fetch y git merge
# o solo el git pull con el flag --allow-unrelated-histories:
git pull origin master --allow-unrelated-histories

# Por último, ahora sí podemos hacer git push para guardar
# los cambios de nuestro repositorio local en GitHub:
git push origin master

Llaves públicas y privadas

Primer paso: Generar tus llaves SSH. Recuerda que es muy buena idea proteger tu llave privada con una contraseña.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Segundo paso: Terminar de configurar nuestro sistema.

En Windows y Linux:

# Encender el "servidor" de llaves SSH de tu computadora:
eval $(ssh-agent -s)

# Añadir tu llave SSH a este "servidor":
ssh-add ruta-donde-guardaste-tu-llave-privada

En Mac:

# Encender el "servidor" de llaves SSH de tu computadora:
eval "$(ssh-agent -s)"

# Si usas una versión de OSX superior a Mac Sierra (v10.12)
# debes crear o modificar un archivo "config" en la carpeta
# de tu usuario con el siguiente contenido (ten cuidado con
# las mayúsculas):
Host *
        AddKeysToAgent yes
        UseKeychain yes
        IdentityFile ruta-donde-guardaste-tu-llave-privada

# Añadir tu llave SSH al "servidor" de llaves SSH de tu
# computadora (en caso de error puedes ejecutar este
# mismo comando pero sin el argumento -K):
ssh-add -K ruta-donde-guardaste-tu-llave-privada

Luego de crear nuestras llaves SSH podemos entregarle la llave pública a GitHub para comunicarnos de forma segura y sin necesidad de escribir nuestro usuario y contraseña todo el tiempo.

Para esto debes entrar a la Configuración de Llaves SSH en GitHub, crear una nueva llave con el nombre que le quieras dar y el contenido de la llave pública de tu computadora.

Ahora podemos actualizar la URL que guardamos en nuestro repositorio remoto, solo que, en vez de guardar la URL con HTTPS, vamos a usar la URL con SSH:

git remoteset-url originurl-ssh-del-repositorio-en-github

Tags y alias

Los tags o etiquetas nos permiten asignar versiones a los commits con cambios más importantes o significativos de nuestro proyecto.

Comandos para trabajar con etiquetas:

git tag -a <Nombre> -m "mensaje"
git push --tags

Pull requests

En un entorno profesional normalmente se bloquea la rama master, y para enviar código a dicha rama pasa por un code review y luego de su aprobación se unen códigos con los llamados merge request.

Para realizar pruebas enviamos el código a servidores que normalmente los llamamos staging develop (servidores de pruebas) luego de que se realizan las pruebas pertinentes tanto de código como de la aplicación estos pasan a el servidor de producción con el ya antes mencionado merge request.

Es una funcionalidad de github (en gitlab llamada merge request y en bitbucket push request), en la que un colaborador pide que revisen sus cambios antes de hacer merge a una rama, normalmente master.

Al hacer un pull request se genera una conversación que pueden seguir los demás usuarios del repositorio, así como autorizar y rechazar los cambios.

El flujo del pull request es el siguiente

  1. Se trabaja en una rama paralela los cambios que se desean (git checkout -b <rama>)
  2. Se hace un commit a la rama (git commit -am '<Comentario>')
  3. Se suben al remoto los cambios (git push origin <rama>)
  4. En GitHub se hace el pull request comparando la rama master con la rama del fix.