User Tools

Site Tools


cheat_sheet_chuleta_de_git_para_sysadmins

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cheat_sheet_chuleta_de_git_para_sysadmins [2021/04/27 12:04] – [Incorporar cambios de la rama master a nuestra rama de trabajo] busindrecheat_sheet_chuleta_de_git_para_sysadmins [2024/05/28 21:09] (current) – [Ramas y etiquetas] busindre
Line 48: Line 48:
  
 NOTA: Los ficheros nuevos agregados que todavía no hayan sido traceados mediante "git add", no saldrán en "git diff". Es decir, si se agregan nuevos ficheros, se editan otros y luego se usa "git diff" para saber qué cambios se realizaron en el repositorio, no se tendrá constancia de los nuevos ficheros agregados. Solo se mostrarán los que han sufrido algunos cambios y ya estaban siendo seguidos. NOTA: Los ficheros nuevos agregados que todavía no hayan sido traceados mediante "git add", no saldrán en "git diff". Es decir, si se agregan nuevos ficheros, se editan otros y luego se usa "git diff" para saber qué cambios se realizaron en el repositorio, no se tendrá constancia de los nuevos ficheros agregados. Solo se mostrarán los que han sufrido algunos cambios y ya estaban siendo seguidos.
 +
 +git diff master...XXXX    # Muestra las diferencias entre la rama master y XXXX.
 +git diff origin/master... # Estando dentro de una rama cualquiera, se quiere ver qué la diferencia de la rama master.
  
 git add .    # Agrega los cambios al commit y empieza a seguir cualquier nuevo archivo creado. git add .    # Agrega los cambios al commit y empieza a seguir cualquier nuevo archivo creado.
Line 59: Line 62:
 git log                 # Muestra información de todos los commits. git log                 # Muestra información de todos los commits.
 git shortlog            # Muestra información de todos los commits resumida por usuario. git shortlog            # Muestra información de todos los commits resumida por usuario.
 +
 +# Muestra información de todos los commits en formato agradable a la vista.
 +git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
 +
 git log -p <fichero>    # Muestra información de los commits de un fichero en particular. git log -p <fichero>    # Muestra información de los commits de un fichero en particular.
 git log --since='FEB 11 2016' --until='FEB 11 2016'   # Muestra información de los commits entre dos fechas. git log --since='FEB 11 2016' --until='FEB 11 2016'   # Muestra información de los commits entre dos fechas.
 git blame <fichero>     # Muestra quién cambió qué en un fichero. git blame <fichero>     # Muestra quién cambió qué en un fichero.
 +
 +
 +git log --name-status -2  # Muestra los ficheros modificados en los dos últimos commits. Útil para saber qué ficheros se ha modificado después de hacer un git pull (dos commits porque el merge es un commit también).
 +git log -p -2             # Muestra los cambios de los dos últimos commits. Útil para saber qué se ha modificado después de hacer un git pull (dos commits porque el merge es un commit también).
 +
  
 git log --all --grep='<texto>'      # Buscar en todas las ramas una palabra o texto (NO de ficheros, si no commits).  git log --all --grep='<texto>'      # Buscar en todas las ramas una palabra o texto (NO de ficheros, si no commits). 
Line 69: Line 81:
 git log --follow -p -- <fichero>    # Lista commits y cambios sobre un fichero concreto. git log --follow -p -- <fichero>    # Lista commits y cambios sobre un fichero concreto.
  
-git show <commit                                     # Muestra los ficheros editados y sus cambios en un determinado commit.+git show <commit1<commit2>                           # Muestra los ficheros editados y sus cambios en uno o varios commits.
 git diff-tree --no-commit-id --name-only -r <commit>   # Muestra únicamente qué ficheros fueron modificados en un commit (Opción 1). git diff-tree --no-commit-id --name-only -r <commit>   # Muestra únicamente qué ficheros fueron modificados en un commit (Opción 1).
 git show --pretty="" --name-only                       # Muestra únicamente qué ficheros fueron modificados en un commit (Opción 2). git show --pretty="" --name-only                       # Muestra únicamente qué ficheros fueron modificados en un commit (Opción 2).
  
-# NOTA En la sección "Deshacer acciones" se puede ver como resurar ficheros al estado de un determinado commit.+# NOTA En la sección "Deshacer acciones" se puede ver como restaurar ficheros al estado de un determinado commit.
 </code> </code>
  
 ===== Ramas y etiquetas ===== ===== Ramas y etiquetas =====
 +
 +Cuando se trabaja en Git con varias ramas en local, hay que tener en cuenta algo. Al crear una rama e introducirse en ella, los cambios en local que se hayan hecho en cualquier otra rama de manera previa y que no hayan sido agregados mediante un commit, se verán en el resto de ramas. Esos ficheros que no están bajo seguimiento de ninguna rama pueden ser mediante un commit pasados a seguimiento en una determinada rama. Eso hará que dichos cambios o ficheros desaparezcan del resto de ramas. Por eso es importante prestar atención cuando se está trabajando con varias ramras a la vez saltando de una a otra realizando cambios.
  
 Visualizar ramas / commits gráficamente / modo texto. Visualizar ramas / commits gráficamente / modo texto.
Line 88: Line 102:
 <code bash> <code bash>
 git branch -avv                   # Lista todas las ramas y algunos commits. git branch -avv                   # Lista todas las ramas y algunos commits.
 +git branch -r                     # Lista las ramas remotas (se puede usar con --merged y --no-merged)
 +git branch --merged               # Lista las ramas que ya han sido fusionadas (normalmente candidatas para ser eliminadas).
 +git branch --no-merged            # Lista ramas todavía pendientes de ser fusionadas.
 +
 git branch <rama>                 # Crea una rama. Esto es siempre a partir de la rama donde se esté trabajando, es decir, master u otra rama. git branch <rama>                 # Crea una rama. Esto es siempre a partir de la rama donde se esté trabajando, es decir, master u otra rama.
 git checkout <rama>               # Cambiar de rama = Cambiar el puntero HEAD. / Si se usa "-" se va a la rama anterior. git checkout <rama>               # Cambiar de rama = Cambiar el puntero HEAD. / Si se usa "-" se va a la rama anterior.
Line 93: Line 111:
 git checkout -b <rama>            # Crea una rama y cambia a la rama creada, equivale a los dos comandos anteriores. git checkout -b <rama>            # Crea una rama y cambia a la rama creada, equivale a los dos comandos anteriores.
  
-git branch -d <rama>              # Borrar una rama local que haya sido fusionada. +git branch -d <rama>              # Borrar una o varias ramas locales que haya sido fusionada. De haber sido fusionada la rama mostrará un error
-git branch -<rama>              # Borrar una rama local aunque no haya sido fusionada. +git branch -<rama>              # Borrar una o varias ramas local aunque no haya sido fusionada. 
-git branch -d `git branch --merged | grep -v \* | xargs`   # Borrar todas las ramas en local (-d o -D segun se necesite).+git branch -d `git branch --merged | grep -v \* | xargs`   # Borrar todas las ramas en local (-d o -D según se necesite).
  
 git push origin --delete <rama>   # Borrar una rama en nuestro repositorio remoto. git push origin --delete <rama>   # Borrar una rama en nuestro repositorio remoto.
Line 104: Line 122:
  
 git show <rama>:<fichero>   # Muestra el contenido de un fichero de otra rama. git show <rama>:<fichero>   # Muestra el contenido de un fichero de otra rama.
 +</code>
 +
 +Eliminar varias ramas de forma simultanea
 +<code bash>
 +# Borra todas las tamas locales ya fusionadas excluyendo master y XXX.
 +git branch --merged | grep -Ev "(^\*|master|XXX)" | xargs git branch -d
 +
 +# Elimina  todas las ramas remotas que hayan sido fusionadas (Usar -D para todas las ramas remotas, estén o no fusionadas) a excepcion de master y XXXX.
 +git branch -r --merged | grep -Ev "(^\*|master|XXX)" | sed 's/origin\///' | xargs -n 1 git push origin --delete
 +
 +# Listar y borrar ramas locales que hayan sido eliminadas en el remoto. "<remote>" suele referenciar a "origin" si no se ha cambiado el nombre del repositorio remoto.
 +git remote prune <remote> --dry-run # Lista
 +git remote prune <remote> # Borra
 </code> </code>
  
Line 193: Line 224:
 Abortando</code> Abortando</code>
  
 +===== Incorporar cambios en local de una pull request que todavía no ha sido aceptada =====
  
-===== Deshacer acciones =====+Es posible usando frameworks como Bitbucket encontrarse en la situación, donde alguien ha realizado una pull request sobre una rama y esta todavía no ha sido aceptada por nadie para que pase a la rama manager. Al clonar el repositorio e ingresar en dicha rama, los cambios de esas pull request que todavía no ha sido aceptada no están en el código. Es decir, solo la persona que hizo la pull request tiene esos cambios en su repositorio local accesibles de manera directa. 
 + 
 +La solución para las personas que quieran tener esos cambios de la pull request, es identificar el commit perteneciente a dicha pull request y usar el comando cherry-pick. Este comando de git se usa para coger commits de otras ramas e insertarlos en otra, pero en este caso, pese a ser la misma rama es también muy útil. 
 + 
 +<code bash> # Se clona el repositorio y se empieza a usar la rama BRANCH_XX, que es donde hay una PR pendiente de ser revisada. 
 +git clone XXXX 
 +git checkout BRANCH_XX 
 +#  Se busca el commit perteneciente a la Pull request, por ejemplo 0ef16eb1370 y se le indica a git que debe coger ese commit. 
 +git cherry-pick 0ef16eb1370</code> 
 +===== Deshacer / Rehacer acciones =====
  
 <code bash>git reset --hard HEAD      # Deshace todos los cambios locales. <code bash>git reset --hard HEAD      # Deshace todos los cambios locales.
Line 204: Line 245:
 git checkout <commit> -- file1 file2  # Restaura los ficheros al estado que tenían en un determinado commit. git checkout <commit> -- file1 file2  # Restaura los ficheros al estado que tenían en un determinado commit.
 git reset <commit> <file>             # Restaura un fichero al estado que tenía en un determinado commit (Lo mismo que el anterior). git reset <commit> <file>             # Restaura un fichero al estado que tenía en un determinado commit (Lo mismo que el anterior).
 +git restore --staged  file1 file2     # Para poder usar git diff y ver los cambios realizados al restaurar los ficheros.
 +                                   
  
 # NOTA: En la sección "Historial de commits y búsquedas" se muestra como ver las diferencias de ficheros entre commits. # NOTA: En la sección "Historial de commits y búsquedas" se muestra como ver las diferencias de ficheros entre commits.
Line 291: Line 334:
  
 Una vez realizado el push, se puede visitar de nuevo el estado de la PR y el test DCO debería ser exitoso. Una vez realizado el push, se puede visitar de nuevo el estado de la PR y el test DCO debería ser exitoso.
 +
 +===== Consejos para auditar / eliminar información sensible de repositorio Git =====
 +
 +Como ya es sabido, git no implementa ninguna posibilidad de cifrar variables o ficheros de manera nativa, por lo que es mejor intentar mantener ese tipo de información sensible fuera de los repositorios.
 +
 +Lo mejor para auditar repositorios es clonarlos con la opción %%--%%mirror, ya que de esta manera la información del repositorio es más completa y se puede obtener más información dependiendo del caso. Los frameworks vomo github, gitlab, etc no suelen usar %%--%%mirror de manera predeterminada.
 +
 +Una vez se tiene el repositorio clonado se pueden usar un sin fin de herramientas para buscar información que no debería estar ahí como llaves SSH, SSL, Certificados cliente, secretos, etc. Estas herramientas se centran en el uso de expresiones regulares y el uso de algoritmos probabilistas.
 +
 +  * [[https://github.com/newren/git-filter-repo]] Reescribir el historial de Git.
 +  * [[https://rtyley.github.io/bfg-repo-cleaner/]] Reescribir el historial de Git.
 +  * [[https://github.com/zricethezav/gitleaks]] Permite encontrar información sensible de repositorios Git.
 +  * [[https://github.com/GitGuardian/ggshield]] Permite encontrar información sensible de repositorios Git.
cheat_sheet_chuleta_de_git_para_sysadmins.1619517868.txt.gz · Last modified: 2021/04/27 12:04 by busindre