Git y GitHub
Usuario y correo
Estos datos se reflejan en los commits, independientemente del correo con el que se suban los cambios a GitHub.
Solo repositorio actual
git config user.email "[email protected]"
git config user.name "Work Name"
# Ver información asignada
git config user.name
git config user.email
Global (todos los repositorios)
git config --global user.email "[email protected]"
git config --global user.name "Personal Name"
# Ver información asignada
git config --global user.name
git config --global user.email
Doble cuenta
Configuración para tener dos cuentas de GitHub en la misma computadora.
- En la primer cuenta se inicia sesión desde Visual Studio Code.
- En la segunda cuenta se utiliza GitHub Desktop
Configuración inicial
- Descargar GitHub Desktop
- Iniciar sesión
- Al preguntar por la cuenta, elegir Personalizada o Local para que los commits en todo el sistema no tengan los datos de la segunda cuenta por defecto
Ya trabajando
- Clonar/crear repositorio
- Cambiar los ajustes locales del repositorio: Repository settings -> Git config -> Use a local git config y utilizar los datos reales de la segunda cuenta
- Para hacer commits se puede desde VSCode ya que tomará la configuración local del repositorio
- Para sincronizar el repositorio con GitHub es necesario hacerlo desde GitHub Desktop
Comunes
git init # Inicializar Git en la carpeta actual
git add . # Preparar archivos y cambios para commit
git commit -m "message" # Guardar cambios
git push [origin <branch>] # Subir cambios a GitHub
git log [--oneline] # Historial de commits
git log --pretty=format:"%an <%ae>" # Usuario y correo del commit
git status [--short | -s] # Archivos en el stage
git rm --cached <file> <path/file.ext> # Quitar achivos del stage
git restore # Revertir cambios no guardados
Comandos en desuso o con alternativas modernas
# Revertir cambios no guardados (git restore)
git checkout -- . # Todos los archivos
git checkout -- index.html archivo2.txt # Uno o mas archivos
Borrar commit
- Borra permanentemente todos los commits que estén después del punto al que se desea volver
git reset --hard <codigoCommit>
- Enviar cambios a GitHub. Reemplaza el repositorio en GitHub con el repositorio local.
git push --force [origin <branch>]
Agregar cambios al ultimo commit
- Reescribe el historial (el ultimo commit)
- Util cuando no se ha sincronizado con el repositorio en GitHub
Si no se han enviado los cambios (push)
- Agregar cambios al stage
git add .
- Agregar los cambios al último commit
git commit --amend
- Se puede cambiar el mensaje o dejarlo igual
- Guardar y cerrar el editor del mensaje si se abre uno
Si ya se enviaron los cambios
- Actualizar el commit en el repositorio remoto
Verifica primero que nadie más haya subido nuevos commits a esa rama antes de sobrescribir.
git push --force-with-lease
git push --force sobrescribe el historial remoto con el nuevo commit, lo cual puede causar problemas si otras personas están trabajando en la misma rama.
git push --force
Ejemplos para mensajes de commit
Estructura básica
<tipo>(opcional: alcance): <mensaje breve>
[opcional cuerpo]
[opcional pie de mensaje]
Tipos comunes
feat: Nueva funcionalidadfix: Corrección de erroreschore: Tareas menores que no afectan la funcionalidad (ej. configs)refactor: Reestructuración del código sin cambio de comportamientodocs: Cambios en documentacióntest: Cambios relacionados con testsstyle: Cambios de estilo (espacios, formato, etc.)perf: Mejoras de rendimientobuild: Cambios que afectan el sistema de build o dependenciasci: Cambios en configuración de integración continua
Ejemplos
| Tipo de cambio | Ejemplo de feat(<alcance>) |
|---|---|
| Nueva ruta o recurso | feat(users) feat(auth) |
| Nuevo middleware | feat(middleware) |
| Nueva lógica de validación | feat(validation) |
| Setup inicial del servidor | feat(server) |
| Configuración de base de datos | feat(database) |
| Controladores o servicios | feat(posts-controller) o feat(user-service) |
| Autenticación o autorización | feat(auth) |
| API versioning | feat(api-v1) |
feat(users): add CRUD endpoints for user resource
feat(server): initialize axum server with env config
build(deps): update sqlx from 0.8.5 to 0.8.6