GitHub (Comandos)

De FdIwiki ELP
Revisión a fecha de 14:23 16 ene 2017; Charmander (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

GitHub es el host de repositorios Git por excelencia, es el punto central de la colaboración de millones de desarrolladores y proyectos.

Para saber más puedes visitar Guía rápida de Github y Estudio sobre GitHub, en este último tienes además un manual detallado disponible. Para más información sobre los comandos y sus opciones puedes introducir man git-<COMMAND> en la terminal o git help <COMMAND> en Git Bash para Windows, una vez instalado Git.


Obteniendo y creando proyectos

init

Inicializa un directorio con o sin contenido como un nuevo repositorio Git.

git init

clone

Hace una copia local un repositorio para que puedas tener acceso a él, tanto visualizarlo como modificarlo.

git clone [<url>]


Haciendo instantáneas

El staging area (área de preparación) es un archivo de tu directorio Git, en él se encuentra qué información estará en el próximo commit. A veces, nos referimos a él como el "índice". El flujo de trabajo básico en Git es algo como:

  1. Modificas archivos en tu directorio de trabajo.
  2. Añades instantáneas de lo archivos a tu área de preparación.
  3. Haces commit, que toma los archivos como están en el área de preparación y guarda esa instantánea permanentemente en tu directorio Git.

Una versión particular de un archivo puede estar commited (está en el repositorio), staged (está en el staging area pero no se le ha hecho commit) o modificada (tiene cambios pero no ha sido añadido al staging area).

add

Añade ficheros al staging area. Añades un archivo cuando quieres incluir los cambios que has hecho a tu próximo commit. Aquello que hayas modificado pero no añadido, no será incluido en el commit.

git add <ficheros>   añade la lista de ficheros separados por un espacio.
git add .   añade recursivamente todos los archivos desde el directorio actual.
git add *   añade todos los archivos en el directorio actual, no recursivo.

status

Ver el estado de tus archivos en el directorio de trabajo y en el staging area.

git status
git status -s   te dará cada entrada de manera más reducida

diff

Muestra la diferencia entre lo que está añadido (staged) y aquello que ha sido modificado pero no añadido. Muestra la diferencia línea por línea.

git diff   muestra el diff de los cambios no añadidos (unstaged) y el último commit
git diff --cached   muestra el diff de cambios añadidos y el último commit
git diff HEAD   muestra el diff de todos los cambios de archivos, tanto añadidos o no, con el último commit
git diff --stat   con esta opción se muestra un resumen de los cambios en lugar de la versión completa 

commit

Guarda una instantánea del staging area, se modifica el repositorio local.

git commit -a '<message>'    la opción -m permite agregar un mensaje que describa al commit. Su
uso es canónico.
git commit -a   hace commit de los archivos en los que ya se hizo un commit sin tener que pasar por
la etapa de staging
git commit -a '<message> #<num_issue>'    mensaje que hace referencia a un issue

reset

Deshace cambios y commits. Resetea el HEAD (último commit de la rama actual) al estado especificado.

git reset [<commit>] [--] <files>   Copia el estado de las entradas de commit en el staging area. Si
no especificamos el commit, se toma por defecto HEAD (el último commit).
git reset HEAD [--] <files>  Copia el estado de las entradas de HEAD en el staging area, es lo contrario
de hacer  git add files, (hace un "unstage"). Los archivos en tu copia local no se ven afectados. 
git reset --soft <commit>    resetea el HEAD al commit especificado, no afecta al staging area. 
git reset --hard <commit>    resetea el HEAD al commit especificado y revierte todos los cambios en
el directorio a ese commit.

rm

Elimina archivos del staging area

git rm <files>   elimina el archivo del staging area por completo junto al de tu directorio. 
git rm --cached <files>   elimina el archivo del staging area y deja el archivo de tu directorio sin verse afectado.

mv

Renombra archivos en tu repositorio. No es necesario, pues Git puede darse cuenta por comparaciones de qué archivos han sido renombrados. Sin embargo el comando existe y lo que hace es un git rm --cached, renombra en disco y luego usa git add con el nuevo archivo.

git mv <name> <new_name>  

stash

Guarda cambios hechos en el staging area actual y en el directorio de trabajo para luego. Guarda los cambios que no están listos para hacerles commit y que así puedas volver a ellos mientras trabajas en otra cosa. Este comando funciona con una pila de cambios.

git stash   guarda los cambios actuales en la pila.
git stash list   ver lo que hay en la pila.
git stash apply   aplica en el directorio actual los cambios guardados en la cima de la pila.
git stash drop   borra la cima de la pila.


Branching y Merging

Se pueden crear ramas o contextos, cambiar de contexto, guardar instantáneas de commits en ese contexto y luego moverte entre ellos.

Cuando cambias de ramas, Git reemplaza tu directorio de trabajo con la instantánea del último commit en esa rama de forma que no tienes que tener múltiples directorios para múltiples ramas.Se puede hacer merge con las ramas, fusionarlas. Puedes hacer merge de varias ramas en una y hacer merge las veces que quieras de una rama a otra o simplemente borrar una rama después de haberle hecho merge.

branch

Lista, crea y administra contextos de trabajo llamados ramas.

git branch   lista tus ramas disponibles
git branch <branchname>   crea una nueva rama.
git branch -v   ver el último commit de todas las ramas disponibles.
git push <remote-name> :<branchname>   borrar una rama remota. Necesitamos el push para este caso.

checkout

Cambia de rama, te lleva a otro contexto.

git checkout <branch>   cambiar a la rama especificada.
git checkout -b <branchname>   crear e inmediatamente cambiar a esa rama

merge

Mezcla una rama con la rama actual. Si causas un conflicto, GitHub inserta marcas en los archivos mostrando, muy parecido a Subversion, qué partes son las conflictivas para que las soluciones.

git merge <branch>

log

muestra el historial de commits de una rama con sus respectivos detalles.

git log   ver historial de commits de la rama actual
git log --oneline   para ver una versión más compacta del historial de commits

tag

Etiqueta un punto en el historial o commit como importante. Te permite hacer referencia más fácilmente a ese punto luego, en lugar de usar el identificador del commit. Se suele etiquetar con el número de versión.

git tag -a "<tag>"   etiqueta el último commit (HEAD) con la etiqueta proporcionada. La opción -a
permite que se añada también cuándo, quién o un mensaje
git log --decorate   muestra el historial de commits con las etiquetas.


Compartir y actualizar proyectos

Puedes actualizar un proyecto local y compartir tus cambios. Además puedes administrar tus repositorios remotos.

remote

Lista, añade y borra repositorios remotos con ayuda de sus alias.

git remote   lista los alias de los repositorios remotos disponibles. 
git remote -v   con la opción -v podrás ver el URL de cada alias.
git remote add <alias> <URL>   añade un nuevo repositorio remoto a tu proyecto. 
git remote rm <alias>   elimina un el repositorio existente indicado
git remote rename [<old-alias>] [<new-alias>]   renombra alias
git remote set-url <alias> <URL>   actualiza el URL del alias indicado

fetch

Descarga ramas y toda nueva información de un repositorio remoto. Extrae la información remota.

git fetch [<alias>]   actualiza la versión local del repositorio “alias”, ahora tu rama master será alias/master
git fetch --all   trata de actualizar la información a partir de todos los repositorios remotos
git merge [<alias>]/[<branch>]   para hacer merge de una rama de un remoto específico en tu rama actual.

pull

Hace fetch de una repo remota y trata de hacer merge de esa información en tu rama actual. pull = fetch + merge. Ejecutar los comandos fetch y merge por separado involucra menos magia y menos problemas.

git pull [alias]   extraer (fetch) y mezclar (merge) de una sola vez.

push

Hacer push es subir tus ramas y datos del repositorio local al repositorio remoto, todo aquello a lo que hayas hecho commit. Si alguien hace push después de tu último fetch and merge, Git no dejará que hagas push hasta que estés actualizado.

git push [<alias>] [<branch>]   comparte tus commits de tu rama en el repositorio remoto con ese alias.


Inspección y comparación

Encuentra commits específicos en el historial de tu proyecto, haz búsquedas por autor, fecha o contenido. Además, compara dos puntos de tu historia, generalmente buscamos diferencias entre dos ramas o qué ha cambiado de una versión a otra del software.

log

Hace filtros en tu historial de commits y compara ramas.

git log <branchA> ^<branchB>   compara ramas mirando los commits de una rama que no son alcanzables desde la otra.
git log --author=Linus [-<N>]   busca los commits de un autor específico, incluso buscar los N últimos.
git log --grep=<word>   filtra commits por mensaje dándole una cadena clave
git log --stat   muestra diffstat de los cambios introducidos en cada commit

diff

Sirve para ver los cambios entre dos commits. Se suele usar en dos situaciones: para ver cómo difieren dos ramas entre ellas y para ver qué cambios ha habido la publicación o desde un punto en el historial.

git diff [<version/tag>]   ver qué ha cambiado desde la última publicación, puedes usar la versión o lo que hayas puesto en la etiqueta. 
git diff <branchA> <branchB>   para comparar dos ramas divergentes
git merge-base <branchA> <branchB>   para calcular cuál es el merge-base (primer commit ancestro común) entre dos commits.
git diff <branchA>...<branchB>   Git encontrará automáticamente el commit común (merge base) y hace la diferencia.


Consejos a seguir

Forma de Trabajo con Ramas

Se asigna una rama específica sobre la que trabaja una persona o varias personas. Se crea una rama local sobre la que realizar cambios y desde la rama específica se realiza el merge con la rama local.

Realización de Commits

  • Agrupa cambios similares en un commit y separa cambios diferentes en commits diferentes.
  • Evita los supercommits.
  • Describe los cambios de cada commit correcta y completamente, da una descripción detallada del cambio.

Flujo de Realización de Trabajo

Ir repositorio ⇒ comprobar estado repositorio (git status) ⇒ actualizar datos (pull) ⇒ crear nueva rama ⇒ ir a la nueva rama ⇒ realizar cambios ⇒ añadirlos ⇒ realizar el commit ⇒ ir a la rama superior ⇒ realizar merge ⇒ realizar push ⇒ volver comprobar estado repositorio (git status).

Trabajo con Issues

  • Mueve todos los puntos a realizar a issues.
  • Usa correctamente las etiquetas.
  • Comenta todo lo relevante que se esté realizando en el issue.

Enlaces Internos

Enlaces Externos

GitHub