Git and Git Flow Cheat Sheet
- Configuración
- Archivos de Configuración
- Crear
- Cambios locales
- Buscar
- Historial de Commits
- Ramas & Etiquetas
- Actualizar & Publicar
- Fusionar & Rebasar
- Deshacer
- Git Flow
$ git config --list
$ git config --local --list
$ git config --global --list
$ git config --system --list
$ git config --global user.name “[nombre apellido]”
$ git config --global user.email “[email-válido]”
$ git config --global color.ui auto
$ git config --global core.editor vi
<repo>/.git/config
~/.gitconfig
/etc/gitconfig
Existen dos maneras:
Vía SSH
$ git clone ssh://usuario@dominio.com/repo.git
Vía HTTP
$ git clone http://dominio.com/usuario/repo.git
$ git init
$ git status
$ git diff
$ git add .
$ git add -p <archivo>
$ git commit -a
$ git commit
$ git commit -m 'aquí el mensaje'
$ git commit -am 'aquí el mensaje'
git commit --date="`date --date='n day ago'`" -am "Mensaje del commit"
¡No modificar commits ya publicados!
$ git commit -a --amend
GIT_COMMITTER_DATE="date" git commit --amend
git commit --amend --date="date"
git stash
git checkout branch2
git stash pop
git stash apply
git stash drop
$ git grep "Hola"
$ git grep "Hola" v2.5
Mostrar todos los commits, empezando por los más recientes (se mostrará el hash, información sobre el autor, fecha y título del commit):
$ git log
$ git log --oneline
$ git log --author="usuario"
$ git log -p <archivo>
$ git log --oneline <origin/master>..<remote/master> --left-right
$ git blame <archivo>
$ git reflog show
$ git reflog delete
$ git branch
$ git branch -r
$ git checkout <rama>
$ git switch <rama>
$ git checkout -b <rama>
$ git switch -c <rama>
$ git branch <nueva-rama>
$ git branch --track <nueva-rama> <rama-remota>
$ git branch -d <rama>
¡Perderás los cambios sin fusionar!
$ git branch -D <branch>
$ git tag <tag-name>
$ git tag -a <etiqueta>
$ git remote -v
$ git remote show <remoto>
$ git remote add <remoto> <url>
$ git remote rm <remoto>
$ git fetch <remoto>
$ git remote pull <remote> <url>
$ git pull origin master
git pull --rebase <remote> <branch>
$ git push remote <remoto> <rama>
$ git push <remoto> :<rama> (desde Git v1.5.0) ó $ git push <remoto> --delete <rama> (desde Git v1.7.0)
$ git push --tags
$ git merge <rama>
¡No rebasar commits ya publicados!
$ git rebase <rama>
$ git rebase --abort
$ git rebase --continue
$ git mergetool
Usar tu editor para manualmente resolver conflictos y (después de resueltos) marcar el archivo como resuelto:
$ git add <archivo-resuelto>
$ git rm <archivo-resuelto>
$ git rebase -i <commit-just-before-first>
Ahora reemplazando esto,
pick <commit_id>
pick <commit_id2>
pick <commit_id3>
con esto,
pick <commit_id>
squash <commit_id2>
squash <commit_id3>
$ git reset --hard HEAD
$ git reset HEAD
$ git checkout HEAD <archivo>
$ git restore <archivo>
$ git revert <commit>
$ git reset --hard <commit>
$ git reset --hard <remote/branch> es decir, upstream/master, origin/my-feature
Reestablecer tu puntero HEAD a un commit anterior y preservar todos los cambios en el área de pruebas (stage area):
$ git reset <commit>
Reestablecer tu puntero HEAD a un commit anterior y preservar los cambios locales sin confirmar (uncommitted changes):
$ git reset --keep <commit>
Remover los archivos que fueron accidentalmente agregados al commit antes de ser añadidos al .gitignore:
$ git rm -r --cached .
$ git add .
$ git commit -m "remove xyz file"
- Configuración
- Iniciando
- Features (características)
- Hacer un lanzamiento
- Hotfixes (revisiones)
- Comandos
$ brew install git-flow
$ port install git-flow
$ apt-get install git-flow
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
Git flow necesita ser inicializado con el fin de personalizar la configuración de tu proyecto. Empieza usando git-flow inicializándolo dentro de un repositorio git existente:
Tendrás que responder un par de preguntas acerca de las convenciones de nombramiento de tus ramas. Es recomendable usar los valores por defecto.
git flow init
Desarrolla nuevos features para próximos lanzamientos. Típicamente sólo existen en los repositorios de desarrolladores.
Esta acción crea una nueva rama (feature branch) basada en la rama de desarrollo (develop branch) y cambia a esta.
git flow feature start MIFEATURE
git flow feature finish MIFEATURE
¿Estás desarrollando un feature colaborativamente? Publica un feature en el servidor remoto, así puede ser usado por otros usuarios.
git flow feature publish MIFEATURE
git flow feature pull origin MIFEATURE
git flow feature track MIFEATURE
Apoya la preparación de un nuevo lanzamiento a producción. Permite la corrección de pequeños bugs y la preparación de metadatos para un lanzamiento.
Para empezar un lanzamiento, usa el comando "release" de git flow. Este crea una rama de lanzamiento (release branch) de la rama de desarrollo (develop branch). Opcionalmente puedes sustituir el hash sha-1 de un commit [BASE] para empezar el lanzamiento desde este. El commit debe estar en la rama de desarrollo (develop branch).
git flow release start RELEASE [BASE]
Es aconsejable publicar la rama de lanzamiento (release branch) después de crearla para permitir publicar commits de otros desarrolladores. Hazlo de manera similar a publicar un feature con el comando:
git flow release publish RELEASE
Terminando un lanzamiento es uno de los grandes pasos en la ramificación de git. Realiza varias acciones:
3) Vuelve a fusionar la rama de lanzamiento (release branch) en la rama de desarrollo (develop branch).
git flow release finish RELEASE
Los hotfixes surgen de la necesidad de actuar inmediatamente ante un estado indeseado en una versión de producción en vivo. Puede ser desramificada de la correspondiente etiqueta en la rama master que marca la versión de producción.
$ git flow hotfix start VERSION [BASENAME]
El argumento versión marca el nombre de publicación del nuevo hotfix. Opcionalmente puedes especificar un nombre base desde cual empezar.
Al finalizar un hotfix este se fusiona nuevamente con la rama de desarrollo y la rama master. Adicionalmente la fusión master es etiquetada con la versión del hotfix.
git flow hotfix finish VERSION