
No solo aplica a código fuente, sino también a otros tipos de archivos (ej. diseños gráficos).






git add → Mueves cambios al staging area → staged.git commit → Guardas en el repositorio local → committed.git --versiongit config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"--global): Aplica a todos tus repositorios (solo configurar una vez).--global para sobrescribir la configuración en un repo específico.git config --list # Muestra toda la configuracióngit help <comando>git initgit add archivo1.java
git commit –m 'versión inicial del proyectogit commit -m "Primer commit: versión inicial del proyecto"$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: archivo1.java
no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)git init: Crea la estructura .git para empezar a versionargit add: Prepara los archivos para el commit (los añade al staging area)git commit: Guarda permanentemente una "foto" de los archivos en ese estadogit add → Mueves a Stagedgit commit → Guardas en el historial (Tracked - Unmodified)
git status On branch master nothing to commit, working directory clean On branch master Untracked files: (use "git add ..." to include in what will be committed) README nothing added to commit but untracked files present # Crear archivo nuevo
echo "Contenido" > archivo.txt
# Ver estado
git status # Muestra archivo.txt como "untracked"
# Añadir al control de versiones
git add archivo.txt
git status # Ahora aparece listo para commit.gitignore, el cual debemos de editar para añadir los nombres de los ficheros o directorios que se deben de ignorar.*.swp, *~).node_modules/, __pycache__/)..env, *.key)..gitignore*.log o temp/.! (ej. !config.important).# Ignorar archivos de compilación
*.o
*.a
# Excepción: un archivo específico
!lib.a
# Ignorar directorios
build/
node_modules/
# Ignorar archivos temporales de editores
*~
*.swp
# Ignorar archivos de documentación generada
doc/**/*.pdf git rm --cached archivo.txt# son comentarios..gitignore deben confirmarse con git add y git commit.git diff git status
# Cambios para commit:
# (usar "git restore --staged <file>..." para sacar del staging)
# modified: README.md
#
# Cambios no preparados:
# (usar "git add <file>..." para actualizar)
# modified: CONTRIBUTING.mdbash git diff bash git diff --staged bash git diff HEAD-)+)@@ -65,7 +65,8 @@ branch directly...
Please include a nice description...
if we have to read the whole diff...
-merged in.
+merged in. Also, split your changes...
+longer than a dozen lines.git diff sin parámetros no muestra cambios ya preparadosgit diff commit1 commit2git difftoolgit rm archivo.txt # Elimina del repositorio y del sistema de archivos
git commit -m "Eliminado archivo.txt" rm archivo.txt:git add archivo.txt #o git rm archivo.txt
git commit# Eliminar directorio y su contenido
git rm -r directorio/
git commit -m "Eliminado directorio/"
# Quitar del repositorio pero mantener local
git rm --cached config.ini
git commit -m "Dejar de trackear config.ini"git checkout HEAD -- archivo.txt # Recupera la última versión guardadagit status para ver el estado de los borrados--cached es útil para archivos que deben ignorarse (como .env)-f (protección contra pérdidas)git rm)git add)git mv archivo_viejo archivo_nuevomv archivo_viejo archivo_nuevo # Renombra en disco
git rm archivo_viejo # Elimina el nombre antiguo
git add archivo_nuevo # Añade el nombre nuevomv archivo_viejo archivo_nuevo
git rm archivo_viejo
git add archivo_nuevo# Caso 1: Uso de git mv
git mv README.md LEEME.md
# Caso 2: Proceso manual equivalente
mv guia_usuario.pdf manual.pdf
git rm guia_usuario.pdf
git add manual.pdfgit status
# Muestra:
# renamed: README.md -> LEEME.md
# renamed: guia_usuario.pdf -> manual.pdfgit add -A # Detecta automáticamente renombresgit mv -f archivo_viejo archivo_nuevo # Fuerza la deteccióngit loggit log -p -3 # Muestra diferencias de los últimos 3 commitsgit log --oneline --graph --allgit log --author="Juan" --since="1 month ago"git log -S"calcularTotal" --stat--since/--until aceptan formatos:"3 days ago""2023-05-01"--grep busca en mensajes de commit (combinar con --all-match para AND lógico)git commit --amend# 1. Añade los archivos olvidados (si aplica)
git add archivo_olvidado.py
# 2. Reescribe el commit
git commit --amend
--amend en commits ya pusheados (rompe el historial compartido)git revert + nuevo commitgit reset HEADgit add# 1. Ver estado actual
git status # Muestra archivos en staging
# 2. Quitar archivo específico
git reset HEAD archivo_accidental.txt
# Opción alternativa (todos los archivos)
git reset HEAD .$ git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: script.js # ← Este queremos sacar
$ git reset HEAD script.js
$ git status
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
modified: script.js # ← Ahora está fuera del staginggit checkout -- / git restore# Forma tradicional (aún válida)
git checkout -- archivo_dañado.html
# Versión moderna (Git 2.23+)
git restore archivo_dañado.htmlgit stash # Guarda cambios temporalmente
git stash drop # Si decides eliminarlos despuésgit reset --hard# 1. Ver historial (copiar hash objetivo)
git log --oneline
# 2. Retroceder (ej: 2 commits)
git reset --hard HEAD~2git taggit tag -l 'v1.8.5*'git tag nombre_etiquetagit show nombre_etiquetagit tag -d nombre_etiquetagit config --global alias.<nombre-corto> "<comando-original>"git config --global alias.co checkout # git co
git config --global alias.br branch # git br
git config --global alias.ci commit # git ci
git config --global alias.st status # git st# Crear alias para ver historial simplificado
git config --global alias.lg "log --oneline --graph --all"
# Uso:
git lg # Muestra el historial en formato resumido.git config --global --list | grep alias
git init

git branch -m maingit status


git add git1.py

git commit -m "comentario"
git log













master o main).
git init), Git crea automáticamente la rama master (o main en repositorios nuevos).master apunta a ese commit.git branch testing # Crea la rama "testing" 
HEADgit branch solo crea la rama, pero no mueve HEAD (sigues en la misma rama).
git log --oneline --decorate para ver:HEAD).f30ab (HEAD, master, testing) add feature #32
34ac2 fixed bug #1328
98ca9 initial commit master como testing apuntan a f30ab, pero HEAD indica que estás en master.git checkout <rama> # Ejemplo: `git checkout testing` 
HEAD, avanza sobre la rama en la que nos encontramos, si no hemos hecho ningún cambio, será sobre master o main
HEAD a la rama especificada.git checkout master # Vuelve a `master`
git commit -a -m "otros cambios" # Ahora `master` y `testing` tienen historiales distintos 
testing)master)testing, solo esa rama avanza; master permanece donde estaba)git log con opciones para ver ramas y divergencias:git log --oneline --decorate --graph --all * c2b9e (HEAD,master) otros cambios
| * 87ab2 (testing) un cambio
|/
* f30ab commit anterior
* 34ac2
* 98ca9 git branch: Crear ramas.git checkout: Moverse entre ramas.git commit: Avanzar el historial.git log --graph Visualiza el historial para entender la divergencia.
iss53:git checkout -b iss53 # Equivalente a: git branch iss53 + git checkout iss53
iss53 en el mismo commit que masteriss53git commit -a -m 'added a new footer [issue 53]'
iss53 avanza, mientras master se queda atrásmaster para resolverlo:git checkout master # ¡El directorio de trabajo revierte al estado de `master`!hotfix y solucionar el problema:git checkout -b hotfix
git commit -a -m 'fixed the broken email address'
hotfix avanza desde masterhotfix en mastergit checkout master
git merge hotfix # Git mueve `master` al mismo commit que `hotfix`hotfix (ya no es necesaria):git branch -d hotfixiss53: Volver a la rama original y continuar:git checkout iss53
git commit -a -m 'finished the new footer [issue 53]'
iss53 sigue su curso independiente de masterhotfix se fusionó con master mediante un fast-forward, ya que no había divergencias .Auto-merging index.html
CONFLICT (content): Merge conflict in index.htmlgit status (archivos marcados como "unmerged").<<<<<<< HEAD:index.html <!-- Versión en master -->
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer"> <!-- Versión en iss53 -->
please contact us at support@github.com
</div>
>>>>>>> iss53:index.htmlgit add index.html # Marca el conflicto como resuelto
git commit # Finaliza el merge commitgit mergetool para abrir una herramienta visual (ej.: meld, kdiff3).iss53, eliminarla:git branch -d iss53git branch*) indica la rama actual (donde está HEAD).git branch -viss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author listgit branch --mergediss53 ya fusionada).git branch --no-mergedgit branch -d para evitar pérdida de cambios.git branch -d iss53 # Elimina solo si está fusionadagit branch -D testing # Ignora advertencias--merged/--no-merged para evitar errores.git branch -vgit branch --no-mergedgit branch -d iss53git branch -D testingmain o master).git branch nueva-funcionalidad
git checkout nueva-funcionalidadgit checkout maingit checkout -b hotfix-buggit commit -m "Solución al bug crítico"git checkout main
git merge hotfix-buggit checkout nueva-funcionalidadgit clone /opt/git/project.git # Sin prefijo (usa hardlinks)
git clone file:///opt/git/project.git # Con prefijo (más lento)git clone ssh://user@server:/ruta/project.git # Formato explícito
git clone user@server:/ruta/project.git # Formato abreviado git clone http://example.com/ruta/project.git # Sin encriptar
git clone https://example.com/ruta/project.git # Con encriptación SSL master a main como parte de una iniciativa para promover un lenguaje más inclusivo.README.md.md). Se muestra automáticamente en la página del repositorio..gitignoreREADME.md básico (formato Markdown)..gitignore para excluir archivos generados automáticamente (ej: node_modules/, .env).

echo "# cursoGit" >> README.mdREADME.md con el texto # cursoGit (formato Markdown).git init.git con la estructura necesaria para el control de versiones.git add README.mdgit commit -m "first commit"main (opcional)git branch -M mainmaster a main (práctica recomendada).git remote add origin https://github.com/martin2745/cursoGit.gitorigin (nombre convencional).git push -u origin mainmain como rama predeterminada para futuros push.origin: Es el nombre por defecto que Git asigna al repositorio remoto. Simplifica futuros comandos como git push o git pull.git branch -d nombreRamaNota: Estos pasos son esenciales para comenzar un proyecto bajo control de versiones y colaborar mediante GitHub. La opción-uengit pushevita especificar la rama remota en futuras actualizaciones.


README.md es la carta de presentación del repositorio.Estas herramientas facilitan la colaboración, automatización y mantenimiento de proyectos en GitHub. La pestaña Settings es crítica para gestionar permisos y seguridad.

git clone https://github.com/usuario/repositorio.gitgit clone git@github.com:usuario/repositorio.gitgit pull.



git pull
git diff).git fetch <remoto> <rama><remoto>: Nombre del repositorio remoto (usualmente origin).<rama>: Rama específica a descargar (opcional).git fetch originmain):git fetch origin maingit pull <remoto> <rama><remoto>: Generalmente origin (el nombre por defecto del repositorio remoto).<rama>: La rama que quieres actualizar (ej: main, develop).git pull origin mainmain del remoto origin y los fusiona con tu rama local actual.git push <remoto> <rama><remoto>: Normalmente origin.<rama>: La rama que quieres subir (ej: main, feature/login).git push origin mainmain al repositorio remoto (origin).git pull origin main # Actualiza tu repositorio local.git add . # Añade los cambios al staging.
git commit -m "Mensaje" # Crea un commit.
git push origin main # Sube los cambios al remoto.! [rejected] main -> main (non-fast-forward)git pull origin main # Fusiona los cambios primero.
git push origin main # Vuelve a intentar el push.fatal: The current branch has no upstream branchgit push -u origin main # Establece upstream.git pull → Actualiza tu repositorio local con cambios remotos.git push → Envía tus cambios locales al repositorio remoto.git fetch → Ideal para flujos de trabajo colaborativos donde la revisión de código es fundamental.pull antes de push para evitar conflictos.--force para no romper el historial de tus compañeros.git clone git://github.com/schacon/grit.gitgit clone git://github.com/schacon/grit.git mygritclone, add, commit, push, pull, fetch) y familiarizarte con GitHub.mi-primer-proyecto.git clone https://github.com/tu-usuario/mi-primer-proyecto.git
cd mi-primer-proyectohola-mundo.txt:echo "¡Hola, GitHub!" > hola-mundo.txtgit add hola-mundo.txt
git commit -m "Añadir archivo de saludo"git push origin mainREADME.md directamente en GitHub (añade una línea como ## Este es mi primer proyecto).git fetch origingit diff main origin/maingit pull origin mainREADME.md (añade algo como ### Hecho desde mi computadora).git add README.md
git commit -m "Editar README localmente"git pull origin main # Fusiona los cambios y marca conflictos.
# Edita README.md manualmente (elimina marcas de conflicto <<<<<<<).
git add README.md
git commit -m "Resolver conflicto en README"
git push origin maingit checkout -b nueva-ramacontribucion.txt y haz push de la rama:git push origin nueva-rama