Skip to content

Instantly share code, notes, and snippets.

@nullx5
Last active July 10, 2025 01:04
Show Gist options
  • Save nullx5/8ba9a4483ba39b46186c7ef12bc856d0 to your computer and use it in GitHub Desktop.
Save nullx5/8ba9a4483ba39b46186c7ef12bc856d0 to your computer and use it in GitHub Desktop.
#No modifiques commits publicos
#NUNCA RESCRIBIR LA HISTORIA DE RAMAS PUBLICAS(push) - SOLO HACERLO EN RAMAS LOCALES (git rebase | git commit --amend)
#HEAD es normalmente el ultimo commit del repositorio(master o main), si no te has movido a otro lado
#Los commits normales tienen un solo padre, un merge tiene 2 padres.
#Una rama no se crea hasta que tenga un commit.
https://www.youtube.com/watch?v=Uszj_k0DGsg
https://www.freecodecamp.org/news/git-sim/
https://learngitbranching.js.org/
https://runestone.academy/ns/books/published/opensource/sec_git_branching.html?mode=browsing
#herramientas visuales:
gitk # solo muestra la rama actual
VSC plugin gitgraph # muestra todas las ramas
#Convenciones de Commits:
feat: agregar nueva funcionalidad
fix: corregir bug
docs: actualizar documentación
style: cambios de formato
refactor: refactorización de código
test: agregar o modificar tests
chore: tareas de mantenimiento
git init --bare # repositorio desnudo
git init #Iniciar repositorio
#CONFIGURAR GIT:
git config --global --list #lista todas las configuraciones
git config --list #lista todas las configuraciones
git config --list --show-origin # Muestra ubicacion del archivo de configuracion y todas las configuraciones
git config --global user.name "Blessed"
git config --global user.email "john@example.com"
git config --global user.password "TOKEN"
git config --global color.ui true
git config --global init.defaultBranch main
git config --global core.hooksPath ~/.githooks
git config --global core.autocrlf input -> deja CRLF en los chekouts de Windows, pero LF en Mac y Linux y en el repositorio.
# Existen herramientas como dos2unix o fromdos CRLF a LF o viceversa
git config --global alias..glog log --graph --oneline
git config --global --edit #edicion interactiva con nano del archivo .gitconfig
/home/blessed/.gitconfig #Archivo de configuracion en linux
C:\Users\ghost\.gitconfig #Archivo de configuracion en windows
# Resolver conflictos merge
git checkout main
git merge feature-branch
resolver conflictos
git add archivo.txt
git commit
#IGNORAR ARCHIVOS Y DIRECTORIOS:
.gitignore #https://www.toptal.com/developers/gitignore/api/python,pycharm,flask
.vagrant/
node_modules/
venv/
__pycache__/
*.env
git ls-files --other --ignored --exclude-standar #listar archivos y directorios ignorados en .gitignore
git clone #Clonar Repositorio
git clone -b booklibrary https://github.com/roxsross/devops-static-web.git # clona repo y cambia automaticamente a la rama booklibrary tambien se descarfa todas las ramas
git clone --depth=1 https://github.com/usuario/repositorio.git #solo descarga ultimo commit
git clone -b ecommerce-ms --single-branch https://github.com/roxsross/devops-static-web.git ecommerce-ms # solo descarga la rama especificada
git status
git status -s #nomenclatura
M=Modificado
D=Delete
??=Untracked
A= Agregado staging area
git ls-files --others --exclude-standard # git status lista todos los archivos nuevos no rastreados
git shortlog | grep "username" #lista numero de commits hechos por usuario
git shortlog -sn --all --no-merges #lista numero de commits de mayor a menor
git commit #sin argumentos para comentarios de mas de una linea
git commit -m "mi primer commit" # Crea un commit
git commit -a -m "fhfhgfhg" #envia directo al commit desde el working tree, pero solo para archivos previamente commiteados
git commit -am "kwjnwkejn" # hace lo mismo
#git commit --amend cambia el hash del commit
git commit --amend #(sin files en stagin area) SOLO Modifica el mensaje del commit m�s reciente
git commit --amend #(Con files en stagin area) Agrega files olvidados al commit mas reciente
git commit --amend --no-edit #Actualiza solo los archivos no edita mensaje del commit
git commit --amend -m "an updated commit message" #permite escribir nuevo mensaje desde CLI
git blame [file] -l #fecha author y cambios en un archivo aplica para archivos sin commitear.
git blame [file]
git blame -L 67,76 [file] # rango de lineas
git blame -c # con opcion -c formatea un poco la salida para legibilidad
#SE PUEDE TRABAJAR CON VARIOS REMOTOS
git remote -v #Lista los remotos
git remote remove [origin] #Limpia los remotos
git remote remove origin #Limpia remotos, segun el nombre que se les dio generalmente es origin
git remote rename origin destination #renombrar remoto
git remote add origin git@github.com:nullx5/Learning-the-Syntax-python.git # Agrega remoto para SSH
git remote add origin https://github.com/nullx5/Learning-the-Syntax-python.git # Agrega remoto Para HTTPS
[ upstream
1-git remote add upstream https://github.com/roxsross/git-exercises.git # desde repo original actualizaciones al dia
#útil cuando trabajas con un fork en GitHub y quieres mantener tu copia actualizada con respecto al repositorio original.
2-git pull upstream main # <-- si quieres actualizar desde el repo original
3-git push origin main #sube las actualizaciones del upstream a tu fork en github.
]
git remote set-url origin git@github.com:nullx5/lcds.git # para SSH
git remote set-url origin https://ghp_5nTJZ2Ymd90t@github.com/nullx5/pull_request.git # para tokens
git add -A # Agrega archivos al staging area
git add . # Agrega archivos al staging area
git add <file>
git add <directory>
git reset file.py #Elimina o saca archivos del staging area unstage *
git reset # Saca todos los archivos del staging area
git diff --name-only --cached # Lista todos los archivos en el staging area
git restore --staged file.py #unstage
git restore <file> #deshacer cambios en working directory
git reset --soft HEAD~1 #Elimina el ultimo commit dejando intacta el working area y staging area
git reset --mixed HEAD~1 #Elimina el ultimo commit dejando intacta el working area y unstageando los archivos del stagin area
git reset --hard HEAD~1 #Elimina el ultimo commit dejando el working area y stagina area limpias
HEAD~3 #Elimina los ultimos tres commits
HEAD^^ #Otro formato con circunflejo
git reset <commit> --hard #cambia al commit indicado y cambia stagin area y working area, Este comando elimina de forma irreversible todos los commits realizados anteriormente.
#Recuperarse de un git reset <commit> --hard
- Antes de hacer el reset --hard anote el ID de ultimo commit HEAD
- comando para recuerarse git reset --hard <el ultimo commit HEAD>
git reset <commit> --soft #cambiar al commit indicado pero deja intacto el stagin area con lo que sea que tengas ahí, Este comando elimina de forma irreversible todos los commits realizados anteriormente.
git reset --soft HEAD^ #Elimina el ultimo commit dejando intacta el working area*
git reset HEAD -- . #Elimina o saca archivos del staging area *
git rm --cached <file> #Elimina o saca archivos del staging area *
git rm test.txt #Elimina archivo del commit, del stagin area y del working area.
git diff #Muestra cambios de archivos entre working area y staging area (cambios grandes usar una GUI)*
git diff --staged #Muestra los cambios entre staging area y HEAD actual.*
git diff HEAD
git diff master #(parado en otra rama diferente de master) compara cambios con master
git diff [rama1] [rama2] documento.js #Compara cambios de un archivo en diferentes ramas
git diff [rama1] [rama2] #compara diferencias entre 2 ramas
git diff <commit1> <commit2> #Compara cambios entre diferentes commits el orden importa poner al final el commit mas nuevo
git diff <commit1> <commit2> fichero #Compara cambios de un archivo en diferentes commits
git diff commitXXX config.py #Compara cambios de un archivo en el working directory contra un commit en localrepo
git diff commitXXX #comparar todos los archivos contra el commit
git diff --graph #indica las mezclas(fusiones-merge) que se han hecho en esa rama
git show #muestra todos los cambios en el ultimo commit
git show [commit] #muestra todos los cambios en un commit dado
git show file.txt # muestra todos los cambios de ese archivo
git log #muestra todos los commits hash autor y fecha
git log --since=2015-09-29 #buscar commits por fechas
git log file.py #muestra todos los commits de ese archivo
git log -p #muestra todos los commits hash autor fecha y cambios
git log --oneline #muestra hash y texto del commit en una sola linea
git log --name-only #Muestra archivos agregados en el commit
git log --name-status #Muestra estado de los archivos agreados al commit | M=Modificado | A= Agregado
git log 132b301 --stat #Stadisticas cuantas lineas se agregaron en un archivo en un commit particular
git log --stat #Estadisticas cuantas lineas se agregaron en un archivo
git log --follow [file] #Muestra historia de archivo, commits en los que fue afectado
git log --author="[Blessed]" #Muestra todos los commits de un autor
git log --oneline | wc -l #Lista Numero de commits
git log --graph --oneline --all #grafico de linea de comando de todas las ramas
git log --graph --oneline --decorate --all
git log --oneline <rama> #ver los commits de una rama en particular
git log --oneline <rama> ^master #ver que commits estan en una rama y que no estan en la otra
git log origin/main..main # commits en local pero no en remoto
git log main..origin/main # commits en remoto pero no en local
git grep "" #Hacer busquedas en archivos
git grep -n "" # hace busqueda lista archivos y numero de linea donde hay concidencias
git grep -c "" # hace busqueda lista archivos donde hay concidencias y su cantidaad
git log -S "" #Hacer busquedas en commits
git tag -a v1.0.0 -m "Release versión 1.0.0" # agregar tag verbose se agrega al ultimo commit
git tag -a v1.0.0 -m "Release versión 1.0.0" <commit> #Agregar tag a un commit especifico
git tag #ver tags
git show v1.0.0 #ver tag especifico
git show-ref --tags #ver tags y su commit asociado
git push origin --tags #enviar todos los tags a github
git push origin v1.0.0 # Push del tag
git tag -d tag-name #eliminar tag
git push origin :ref/tags/tag-name #eliminar tag en github
hacer push de un archvio eliminado en local hacia github eliminar
git status
deleted: nombre-del-archivo.txt
git add nombre-del-archivo.txt
git commit -m "Eliminado archivo innecesario nombre-del-archivo.txt"
git push origin main
DESHACER CAMBIOS:
git revert #investigar que hace, aparentemente desmergea un commit o desfusiona el commit
git clean -f: #Elimina todos los archivos no rastreados, los archivos no se pueden recuperar fácilmente.
git clean -df: #Elimina archivos no traqueados y directorios vacíos *
git clean -n: #Realiza una simulación del comando, mostrándote qué archivos se eliminarían sin llegar a borrarlos. Esto es útil para verificar qué se eliminará antes de ejecutar el comando real.
git clean -X: #Ignora las excepciones en el archivo .gitignore.
git checkout <hash_commit> #cambia al commit - se actualiza el working directory - con la info del commit
git checkout master #Cambiar a la rama master
git checkout - #cambiar de rama
#NO CAMBIAR DE RAMA sin commitear antes, o se pierden todos los archivos del working area
git push -f origin master #Elimina el ultimo commit en github(sin borrar el working area)
git push -u origin master #Empuja rama al repositorio remoto(solo se puede empujar una rama a la vez)
git push --force # fuerza a github a ser igual que el repo local
git push origin main --force
git push heroku master #Empuja a heroku
git fetch origin #trae o descarga rama de repo remoto
git merge <name_branch> #FUSIONA RAMAS PARARSE EN RAMA MASTER - HAY 2 TIPOS DE MERGE:
#Usar git merge cuando no hay commits en master por delante de la otra rama:
fast-forward(no crea nuevo commit)
recursive(crea nuevo commit - con mensaje [Merge branch 'name_branch'])Ensucia linea temporal
#Cuando hay commits en master por encima de otra rama -> mejor usar GIT REBASE:
#deshacer git revert -m 1 [commit]
git reset --merge [commit]
REESCRIBIR LA HISTORIA: #combina commits y modifica el historial de una rama
#cambiar a rama diferente a master y hacer:
git checkout otra_rama
git rebase master #Aplana y cambia el hash de los commits que rebasaron, los antiguos conservan su hash
#Luego cambiar a master y hacer:
git checkout master
git merge otra_rama #al haber hecho el rebase ahora el merge se hace por fast fordward
#Esto pone los commits de la otra rama adelante de los commits de master
#linea de tiempo m�s limpia
#Deshacer git rebase:
git rebase --abort #este funciono
git reflog
git reset --hard HEAD@{n}
git log HEAD@{n}
git rebase -i #modo interactivo,modifica historial de una rama,combina commits, cambiar orden, cambia mensaje
git rebase -i HEAD~4 #HEAD~4 indica que commits queremos afectar en este caso los ultimos 4(OJO CAMBIA TODOS LOS HASH)
#REBASE INTERACTIVO:
# En el editor, cambiar 'pick' por:
# - reword: cambiar mensaje del commit
# - edit: pausar para modificar commit
# - squash: combinar commits
# - drop: eliminar commit
git reflog # Muestra historial de cambios y commits
git pull origin master #trae repositorio remoto en rama master (sincroniza local y remoto)
git pull #Es un fecth + merge al mismo tiempo jala repo github
git fetch origin
git merge origin/master
git pull --rebase <remote> #Descarga de remote pero No fusiona
git pull --no-commit <remote> #Descarga de remote pero No fusiona
git pull --verbose
git pull origin master --allow-unrelated-historie
git branch #Muestra todas las ramas locales existentes y en cual estas parado
git branch -r #Muestra todas las ramas remotas en github
git ls-remote --heads origin #Muestra todas las ramas remotas en github
git brach --all #Muestra todas las ramas incluso las remotas
git branch -v #Muestra el ultimo commit de cada rama
git branch -a #Muestra ramas oculta origin master
git branch <name_branch> #Crea rama
git checkout <name_branch> #mueve a rama
git checkout -b <name_branch> #Crea rama y cambia a esa rama
git switch -c "nombre rama" #Crea rama
git switch nombre-rama #Cambia a rama
git branch -D <name_branch> # Elimina rama
git branch -d <name_branch> # Elimina rama
git push origin :mi-rama-remota #Elimina rama remota (git push remote-name local-branch :remote-branch)
git push origin --delete mi-rama-remota #Elimina rama remota
git push remote-name local-branch :remote-branch # branch remote develop
git cherry-pick <hash-commit> #Toma el commit que desee de otra rama, copia el commit pero cambia el hash
git cherry-pick -e <hash-commit> #Toma el commit que desee de otra rama, pero editando el mensaje del commit. igual cambia el hash
git cherry-pick -n $(git rev-parse [name_rama]) $(git rev-parse [name_rama]~1)#Trae contenido de un commit,sin hacer un nuevo commit(deja contenido en el stagin area)
git cherry-pick --abort
git stash -> guardado rapido y limpia working directory
git stash pop -> recupera el stash sacandolo de la pila
git stash pop stash@{0} ->recupera stash por numero sacandolo de la pila
git stash apply stash@{0} -> recupera stash por numero sin sacarlo de la pila (para usarlo en varias ocasiones)
git stash list -> lists todos los stash
git stash drop -> elimina los stash uno por uno de la pila
git stash drop stash@{n} -> elimina stash por numero
git stash branch name-rama #pasa el stash a una rama y se cambia automaticamente a esa rama
git stash clear #borra toda la lista de stash
Si usas git stash sin hacer git add, Git guardará en el stash, solo archivos ya rastreados por Git, NO sin rastrear.
git stash -u --include-untracked # Guarda cambios en archivos rastreados + nuevos sin seguimiento.
git stash -a --all # Guarda todo, incluyendo archivos ignorados.
#ENCONTRAR BUGS:https://github.com/bradleyboy/bisectercise
git rev-list --max-parents=0 HEAD #encuentra el primer commit del repo
git bisect start
git bisect bad HEAD #commit que tiene bug
git bisect good c1fd602276 #commit funcionando todo OK
ir probando commits dando [git bisect bad] o [git bisect good] hasta enontrar el commit que tiene el BUG
git bisect reset #vuelve al commit original antes de empezar git bisect
"!git remote update -p; git log ..@{u}"
log @{u}..
HEAD detached at -> git checkout master
dpkg -l lista todos los paquetes instalados
dpkg -l | grep apache2 #Informaciom de paquete
apt show apache2 #Informaciom de paquete
dpkg -L openssh-server lista las path del paquete
service --status-all
#####################################################################################################################################
remote: error: Your local changes to the following files would be overwritten by merge:
remote: file.config
remote: Please, commit your changes or stash them before you can merge.
tu archivo file.config tiene cambios y que es diferente al que esta en el repositorio, puedes hacer commit de tus cambios o hacer git stash para que no se reescriba tu archivo file.config.
Crear repo en github sin readme para evitar conflictos si ya tienes un readme en local
crear par keys privada y publica, agregar key publica a github - ssh-keygen -b 4096 -t rsa
agregar repositorio remote ssh - git remote add origin git@github.com:nullx5/Learning-the-Syntax-python.git
revisar git remote -v
empujar código a github - git push -u origin(nombre de repositorio) master(nombre rama)
opcion -u permite usar en adelante solo git push
#################################################################################################################################
Crear pull request:
fork
git clone
git checkout -b <name_branch>
creo mis cambios commits
git push -u origin <name_branch>
new pull request
configurar repositorio y rama que envia y repositorio y rama que recibe.
agregar descripcion y revisores
create pull request
merge pull request
################################333
wget https://github.com/jesseduffield/lazygit/releases/download/v0.46.0/lazygit_0.46.0_Linux_x86_64.tar.gz
7z x lazygit_0.46.0_Linux_x86_64.tar.gz
sudo install lazygit -D -t /usr/local/bin/
q salir
? ayuda
esc retroceder
P == push
p == pull
tab cambiar entre secciones o por numero 1 2 3 4
seccion1 :
status
seccion 2:
barra espaceadora == git add
c == git commit
seccion 3:
barra espaciadora == cambiar de rama
n == nueva rama
d == borrar rama
M == merge
seccion 4:
lista de commits
seccion 5:
pila de stash
command log:
historial de comandos
@nullx5
Copy link
Author

nullx5 commented Aug 30, 2024

final de linea

@nullx5
Copy link
Author

nullx5 commented Aug 30, 2024

GIT

@nullx5
Copy link
Author

nullx5 commented Sep 5, 2024

git graph

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment