Git avanzado - Mario Gonzأ،lez git fetch + git rebase = git pull --rebase Si siempre queremos pull --rebase:

  • View
    3

  • Download
    0

Embed Size (px)

Text of Git avanzado - Mario Gonzأ،lez git fetch + git rebase = git pull --rebase Si siempre queremos pull...

  • Git avanzadoGit avanzado

  • Conceptos inicialesConceptos iniciales

    Git avanzado

  • Git avanzado

  • Conceptos iniciales

    Qué es el control de versiones VCS centralizados / distribuidos Línea de comandos vs. interfaces gráficas Branching

    Git avanzado

  • Instalación yInstalación y configuraciónconfiguración

    Git avanzado

  • Instalación  Notepad++

    Marcar o asegurarse de que está marcado: Git Bash Here Use Notepad++ as Git's default editor Use Git from the Windows Command Prompt Checkout Windows-style, commit Unix-style etc. Use MinTTY Enable Git Credential Manager

    Crear una cuenta en  (con un email real)

    Git

    Bitbucket

    Git avanzado

    https://git-scm.com/downloads https://bitbucket.org/

  • Instalación

    Git avanzado

  • Instalación

    Git avanzado

  • Instalación  Notepad++

    Marcar o asegurarse de que está marcado: Git Bash Here Use Notepad++ as Git's default editor Use Git from the Windows Command Prompt Checkout Windows-style, commit Unix-style etc. Use MinTTY Enable Git Credential Manager

    Crear una cuenta en  (con un email real)

    Git

    Bitbucket

    Git avanzado

    https://git-scm.com/downloads https://bitbucket.org/

  • Instalación  Notepad++

    Marcar o asegurarse de que está marcado: Git Bash Here Use Notepad++ as Git's default editor Use Git from the Windows Command Prompt Checkout Windows-style, commit Unix-style etc. Use MinTTY Enable Git Credential Manager

    Crear una cuenta en  (con un email real)

    Git

    Bitbucket

    Git avanzado

    https://git-scm.com/downloads https://bitbucket.org/

  • Instalación  Notepad++

    Marcar o asegurarse de que está marcado: Git Bash Here Use Notepad++ as Git's default editor Use Git from the Windows Command Prompt Checkout Windows-style, commit Unix-style etc. Use MinTTY Enable Git Credential Manager

    Crear una cuenta en  (con un email real)

    Git

    Bitbucket

    Git avanzado

    https://git-scm.com/downloads https://bitbucket.org/

  • Instalación  Notepad++

    Marcar o asegurarse de que está marcado: Git Bash Here Use Notepad++ as Git's default editor Use Git from the Windows Command Prompt Checkout Windows-style, commit Unix-style etc. Use MinTTY Enable Git Credential Manager

    Crear una cuenta en  (con un email real)

    Git

    Bitbucket

    Git avanzado

    https://git-scm.com/downloads https://bitbucket.org/

  • Configuración

    Variables de configuración Sistema (S.O.): git config --system Global (usuario): git config --global Local (proyecto): git config [--local]

    Guardar una variable de configuración: git config [ámbito] nombre_variable valor Por ejemplo: git config --system user.name "Mario González"

    Leer una variable de configuración: git config [ámbito] nombre_variable Por ejemplo: git config --global user.name

    Listar todas las variables de configuración git config [ámbito] --list

    Archivos de configuración git config [ámbito] --list --show-origin

    Git avanzado

  • Configuración inicial

    Configuración proxy: git config --global http.proxy http://username:password@host:port git config --global https.proxy http://username:password@host:port

    Configuración usuario: git config --global user.name "Mario González" git config --global user.email mario@mariogl.com

    Git avanzado

    Configuración Notepad++: git config --global core.editor "'C:\Program Files (x86)\Notepad++\notepad++.exe' -multiInst -notabbar -nosession - noPlugin" Configuración saltos de línea: git config --global core.autocrlf true    (Windows) git config --global core.autocrlf input   (UNIX)

  • Fundamentos yFundamentos y arquitectura internaarquitectura interna

    de Gitde Git

    Git avanzado

  • Fundamentos de Git

    Working directory Repositorio Commits (snapshots) Stage

    Git avanzado

  • Fundamentos de Git

    Referencias Ramas HEAD Tags

    Git avanzado

  • Fundamentos de Git

    Tipos de tags: Ligera Anotada

    Añadir tag ligera: git tag nombre_tag [commit] Añadir tag anotada: git tag -a nombre_tag -m "Mensaje tag" [commit]

    Git avanzado

  • Fundamentos de Git

    Ignorar archivos y carpetas con .gitignore Generador de .gitignore

    Git avanzado

    https://www.gitignore.io/

  • CommitsCommits

    Git avanzado

  • Preparando el commit

    Añadir nuevos archivos al índice (empezar a versionar): git add Añadir modificaciones al stage: git add Información sobre el estado de las tres zonas: git status Quitar modificaciones del stage: git reset HEAD Deshacer cambios del Working Directory: git checkout --   (operación irreversible)

    Git avanzado

  • Preparando el commit Borrar archivos: git rm path Sacar un archivo del repositorio sin borrarlo en el Working Directory: git rm --cached path

    Git avanzado

  • Preparando el commit Hacer el commit: git commit [-m "Mensaje"] Evitar mensajes genéricos como "Cambios", "Nuevo archivo", "Correcciones", "CSS", "Merge"... Modificar el último commit: git commit --amend No hacer --amend si el commit ya se había subido al remoto

    Git avanzado

  • El commit

    Autor / commiteador Fecha Mensaje Padre/s Hash SHA-1

    Git avanzado

  • El log

    Git avanzado

    Ver el histórico de commits: git log [rama] Ver el log compacto: git log --oneline Ver el log de todas las ramas: git log --branches Ver ramificaciones en el log: git log --graph Crear un alias: git config --global alias.milog "log --oneline --branches --graph" Ver el contenido de un commit: git show

  • El log

    Cómo referenciar a un commit Por su identificador: hash SHA-1 Por su posición respecto al HEAD: HEAD^, HEAD^2... HEAD~, HEAD~2... Por el nombre de una rama Por su posición en el listado de reflog: HEAD@{n}

    Git avanzado

  • El log

    Saltar a otro commit o rama: git checkout Borrar commits: git reset [--soft|--mixed|--hard] Ver el histórico de HEADs con git reflog Culpar con git blame path

    Git avanzado

  • El log

    Apartar cambios provisionalmente git stash [push -m "Mensaje"] git stash list git stash show [stash@{n}] [-p] git stash apply [stash@{n}] git stash pop [stash@{n}] git stash drop [stash@{n}]

    Git avanzado

  • Cómo deshacer

    Git avanzado

    Deshacer cambios en el Working Directory Deshacer subidas al stage Deshacer commits Deshacer un commit --amend Deshacer un reset Resolver problemas derivados del Detached HEAD Ignorar archivos que ya están siendo versionados

  • ConflictosConflictos

    Git avanzado

  • Cuando hay dos versiones de código y Git no puede decidir cuál es la definitiva Diferencias en formato del archivo (tabulaciones, codificación, saltos de línea...) Pueden aparecer en cualquier operación que implique fusión de código: merge, rebase, cherry-pick, pull Siempre que aparezcan conflictos, primero lanzar git status Git espera a que resolvamos los conflictos y le demos la orden de cerrar la operación Los conflictos se delimitan por marcas en los archivos

    Conflictos

    Git avanzado

  • Conflictos

    Git avanzado

    > develop

  • Si queremos resolverlos a mano, editamos el texto, borramos las marcas y dejamos el código definitivo. Para usar una interfaz gráfica específica para resolver conflictos: git mergetool Ejemplo: configurar KDiff3 git config --global merge.tool kdiff3 git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"

    Conflictos

    Git avanzado

  • Una vez resueltos los conflictos, se lo comunicamos a git mediante git add path Para terminar la fusión en un merge o en un pull: git commit Para terminar la fusión en un rebase: git rebase --continue Para terminar la fusión en un cherry-pick: git cherry-pick --continue

    Conflictos

    Git avanzado

  • BranchingBranching

    Git avanzado

  • Ramas

    Git avanzado

  • Ramas

    Referencia La rama master Múltiples ramas

    Git avanzado

  • Ramas

    Listar ramas: git branch Crear una rama: git branch nombre_rama [commit] Ir a una rama: git checkout nombre_rama Crear rama e ir a ella: git checkout -b nombre_rama Borrar una rama: git branch -d/-D nombre_rama Renombrar una rama: git branch -m nombre_antiguo nombre_nuevo

    Git avanzado

  • Ramas - merge

    Git avanzado

    HEADdevelop

    C1

    C2

    C5

    C6

    C7

    C3

    C4

  • Fusionar ramas Volcar el trabajo de una rama en otra Objetivo: que una rama tenga los commits de otra Tipos de merge:

    Fast forward: no crea un nuevo commit, sin conflictos Merge a tres bandas: crea un nuevo commit, posibilidad de conflictos

    Conflictos: lanzar siempre git status

    Ramas - merge

    Git avanzado

  • Ramas - rebase

    Git avanzado

    HEADdevelop

    C1

    C2

    C5