[Conceptos Básicos] [Trabajando con Git] [Git Flow] [Revertir Cambios] [Cuando todo falla] [Recursos]
El control de versiones es un sistema que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante.
- Instantáneas no diferencias
- Es local
- Tiene integridad
- Solo añade información
- Confirmado (commited) : Los datos estan almacenados de forma segura en la base de datos local.
- Modificado (modified) : Se ha modificado el archivo pero todavía no lo has confirmado a tu base de datos.
- Preparado (staged) : Se ha marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
- Directorio de Git (Git direcyory) : Es la base de datos de objetos para el proyecto. Es lo que se copia cuando se clona un repositorio.
- Directorio de trabajo (working direcry) : Es una copia de una versión del proyecto.
- Area de preparación (staging area) : Es un archivo que almacena información sober lo que va a ir en la próxima confirmación.
- Modificar : los archivos en tu directorio de trabajo.
- Preparar : los archivos, añadiendolos al área de preparación.
- Confirmar : los cambios, tomando los archivos tal y como están en el área de preparación, y almacena esas instantáneas de manera permanente en el directorio de Git.
Si una versión concreta de un archivo está en el directorio de Git, se considera confirmada (committed). Si ha sufrido cambios desde que se obtuvo del repositorio, pero ha sido añadida al área de preparación, está preparada (staged). Y si ha sufrido cambios desde que se obtuvo del repositorio, pero no se ha preparado, está modificada (modified).
$ git init
Initialized empty Git repository in /Users/meplaz/Documents/chubb/learn/git/.git/
$ git config --list
credential.helper=osxkeychain
user.name=MiguelPlazas
user.email=miguelplazasr@gmail.com
core.excludesfile=/Users/meplaz/.gitignore_global
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/Applications/Sourcetree 2.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
$ git config --global user.name "name"
$ git config --global user.email "email@example.com"
$ git status
$ git add .
$ git commit -am "First commit"
$ git status
$ git log
$ git log --pretty=oneline
$ gitk
Archivos que no serán versionados
El modificador --amend
se usa para adicionar cambios al último commit realizado.
Ej. Cuando se quedan archivos fuera del área de preparación
$ git commit -m "Add feature"
$ git add newfile
$ git commit --amend
$ git reset HEAD file2.txt
$ git checkout -- file
- Listar
$ git tag
- Crear
$ git tag -a v1.0 -m 'version 1.0'
- Push
$ git push origin v1.0
Es un apuntador movil apuntando a una confirmación. master es la rama principal del proyecto
- Mostrar
$ git branch
- Crear
$ git branch testing
- Cambiar de rama
$ git checkout testing
Al realizar cambios en una rama ejemplo testing, esta rama avanza con cada commit
Al trabajar sobre diferentes ramas haciendo cambios en ellas se crean proyectos divergentes. Los cambios de cada una de esas ramas están aislados en ramas independientes.
- Merge
$ git merge MYFEATURE
Incorpora los cambios de la rama MYFEATURE en la rama actual
- Rebase
$ git rebase master
Replica los cambios confirmados de la rama master en la rama actual
Publicar
$ git push REMOTO RAMA
Publica en el repositorio remoto la rama deseada
Actualizar repositorio local
$ git pull
git-flow es un conjunto de extensiones para git que proveen comandos de alto nivel para operar repositorios basados en el modelo de ramificaciones de Vincent Driessen
osx
$ brew install git-flow-avh
Linux
$ apt-get install git-flow
Windows
$ wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash
Iniciar un proyecto con Git Flow
$ git flow init
Es el desarrollo de características para futuras versiones Es parte de la rama develop
- Iniciar un nuevo feature
$ git flow feature start MYFEATURE
- Publicar feature
- Hace la publicación del feature en el repositorio remoto
- Deja el feature disponible para colaboración
$ git flow feature publish MYFEATURE
- Finalizar un feature
$ git flow feature finish MYFEATURE
Es la preparación de una versión para paso a producción
- Iniciar un release
$ git flow release start RELEASE
- Publicar un release
Se debe publicar el release para que otros developers puedan enviar cambios
$ git flow release publish RELEASE
- Finalizar un release
$ git flow release finish RELEASE
Correcciones para resolver bugs en la aplicación
- Iniciar un hotfix
$ git flow hotfix start VERSION
- Finalizar un hotfix
$ git flow hotfix finish VERSION
Ver el log
$ git log --pretty=oneline
Seleccionar la rama a la cual queremos regresar
$ git reset --hard d3c4b3900355e702f77930bec0c379b90a57b0d9
Ver el registro del HEAD
$ git reflog
Ver con detalle
$ git log -g
Estratégia: Crear una rama a partir de log eliminado
$ git branch recover-branch 9fd2ad3
$ git log --pretty=oneline recover-branch