Difference between revisions of "GitHub (Comandos)"
(→Enlaces Externos) |
Charmander (Talk | contribs) |
||
Line 178: | Line 178: | ||
* '''Comenta''' todo lo relevante que se esté realizando en el issue. | * '''Comenta''' todo lo relevante que se esté realizando en el issue. | ||
+ | = Enlaces Internos = | ||
+ | * [[GitHub]] | ||
+ | * [[Git: ¿Es un buen método para trabajar en equipo]] | ||
= Enlaces Externos = | = Enlaces Externos = |
Latest revision as of 15:23, 16 January 2017
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.
Contents
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:
- Modificas archivos en tu directorio de trabajo.
- Añades instantáneas de lo archivos a tu área de preparación.
- 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.