Academia.eduAcademia.edu

GUIA GIT Y GITHUB

1. CURSO PROFESIONAL DE GIT Y GITHUB Introducción a Git / Introducción a la línea de comandos. ~ : hogar de “Mis documentos” pwd: Nos da la dirección en donde estamos cd: para navegar en carpeta. cd [nombre_ruta] ls : listar archivos en la raíz de linux emulado. ls -al: argumento que mostrará todos los archivos ocultos en forma de lista. ls -a : muestra archivos ocultos de forma desordenada. ls -l : muestra los archivos de la ruta en forma de lista. clear: limpia la consola. mkdir: crear carpeta. mkdir [nombre_carpeta] touch: crea un archivo vacío. touch [nombre_archivo.tipo] cat: muestra rápido el contenido de un archivo. cat [nombre_archivo.tipo] history: nos muestra el historial de comandos. para repetir un comando dado en history: ![numero_del_comando] rm: elimina archivo rm [nombre_del_archivo] Git Bash es de Linux. No existe la ruta como en Windows: C:\Users\nombre este se cambia por: /C/Users/nombre Para cambiar de directorio en Git Bash, se usa el comando cd / esto nos envía a la raíz del disco. Al utilizar el comando ls dentro de una ruta, nos mostrará todos los archivos que existen dentro de él. Para entrar en el disco en el cual se encuentra nuestra partición utilizaremos cd /c de esa forma entraremos en el disco C. Para entrar en la carpeta usuarios se utiliza el siguiente comando cd Users cabe destacar que en Windows no importa si se usan mayus. o minusc. mientras se ingrese el nombre_carpeta correcta. Para volver a la carpeta anterior, es necesario usar el comando cd .. (esto nos regresa a la unidad C). Nota: al usar una letra+[TAB], nos agrega la ruta con auto llenado. cd siempre nos va a redireccionar al HOME (/C/Users/nombre). al ver las carpetas dentro del directorio con ls hay unas que terminan en un “.” o “..” un punto significa en la carpeta que estamos, dos puntos es la carpeta anterior a la que estamos. para obtener una ayuda del uso de los comandos se puede utilizar el siguiente comando: [comando] --help 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / Staging y Repositorios en Git. git init: inicializa git en una carpeta. git add: añade archivos al staging (vive en staging). git add . (añade todos los cambios que hay en la carpeta). git add [nombre_archivo.tipo] (añade cambios dentro del documento) commit: manda el archivo al repositorio commit -m “mensaje_commit” git rm: remueve el archive que se encuentra en Staging. Al usar el comando git init se crean 2 cosas: un área de staging y se crea también el repositorio. Staging: es el área en la RAM donde se guardarán los cambios, antes de ser enviados al repositorio. Repositorio: Es el lugar donde se almacenan todos los cambios que se han realizado. La carpeta .git que se crea al inicializar git init dentro de nuestra carpeta, es el Repositorio. El nombre por defecto de un repositorio siempre será MASTER. MASTER: se encuentran todos los cambios que se hagan dentro del repositorio. Para subir un archivo, se utiliza el comando git add, al usar este comando nuestro archivo estará en staging. Este no llega hasta el repositorio hasta realizar un commit. Cada commit es una nueva versión de cambios dentro del repositorio. Los números aleatorios que se generar al hacer un commit son el nombre interno en la base de datos de git. 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / ¿Qué son Branch y Merge? branch: ramas dentro de git. Merge: unir cambios de una rama a la rama actual o a otra rama. Siempre se trabaja sobre la rama MASTER del repositorio, pero también se pueden crear distintas ramas, para trabajar en paralelo al MASTER sin alterar el proyecto original. Para solucionar bugs de forma rápida se llaman hotfix, a esa rama normalmente le llaman bugfixing. A la rama de experimentos se le llama development. 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / Creando Repositorio y commit. code: abre VSCODE. code [nombre_archivo.tipo] *sirve para abrir un archivo específico. Para crear un repositorio debemos estar en la carpeta en la cual deseamos iniciar un repositorio y utilizar el comando git init. git status: visualiza el estado en que se encuentra el proyecto en git. Git Bash, tiene la facilidad de usar el comando code para abrir rápidamente Visual Studio Code. rm --cached: elimina el proyecto del staging, pero el archivo sigue existiendo. git config: muestra los comandos que existen en git. git config --list: muestra los comandos por defecto que están configurados en nuestro git. git config --list --show-origin: muestra donde está el origen de los datos configurados. git config --global user.name [nombre_usuario] *sirve para ingresar un usuario en git. git config --global user.email [correo_electronico] *sirve para ingresar un correo electrónico en git. git log: historial de commits hechos en el proyecto. git log [nombre] git status, nos muestra 3 cosas distintas: ◆ Cuando existen cambios dentro del proyecto (los cambios se muestran en color rojo). ◆ Cuando ya se ha hecho un git add al proyecto y se encuentra el archivo en staging (los archivos añadidos se encuentran en color verde, esto significa que aún no están los proyectos en el repositorio y que se requiere hacer un commit). ◆ Cuando no existen cambios dentro del proyecto que añadir. (aquí no se muestra nada pues todos los archivos ya están cargados en el repositorio). Para poder guardar un commit es necesario tener un usuario y correo electrónico dado de alta en git. Todos los commit mostrados en el comando git log contienen un número, ese es su TAG de referencia para poder movernos entre versiones. La versión (HEAD -> MASTER) eso significa que es la versión más reciente del proyecto guardado en el repositorio. 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / Analizando cambios en proyecto. git show (archivo): muestra las modificaciones internas por líneas. git show [nombre_archivo.tipo] git show es un comando que nos muestra los cambios realizados en el documento en forma de líneas, como se muestra de la siguiente manera: git diff: sirve para comparar 2 versiones de commit que se elijan. git diff [código_commit1] [código_commit2] donde las letras rojas marcan el formato del archivo anterior, y las letras verdes marcan en que líneas se ha hecho modificación, así como la línea extra que se añadió. *Los Código para comparar se obtienen de git log. ESC + SHIFT + Z + Z: para guardar lo escrito en VIM y volver a git bash. ESC + i : para insertar texto dentro del editor de texto VIM. Al no añadir ningún mensaje al commit este nos mandará al editor de texto de Vim, para que se añada un mensaje de forma obligatoria. *UN COMMIT JAMÁS DEBE ENVIARSE VACÍO. Para salir del editor y volver al Git Bash, es importante usar un juego de teclas, pues así está definido en Linux ESC + SHIFT + Z + Z para poder salir. El comando git diff, sirve para comparar versiones, el primer código que se ingresa mostrará la diferencia con el segundo, es decir depende el orden se muestran las diferencias. 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / Usando Branch y Checkout. git reset: nos permite volver a una versión anterior. git reset [código_commit] -hard. git reset [código_commit] -soft. git diff: cambios entre repo actual y staging. git status: nos muestra la vista de staging. git log --stat: cambios específicos en archivos de un commit a otro mostrado en bits. q: nos saca del (END) en git bash. git checkout [#commit] [nombre_archivo]: nos muestra la versión del commit seleccionado, pero no se almacena a menos que se haga un commit. git checkout [rama_MASTER] [nombre_archivo]: nos muestra la versión actual de nuestra rama MASTER del archivo seleccionado. Contamos con 3 entornos distintos: ◆ Directorio de trabajo (nuestra carpeta de proyecto). ◆ Staging (Área de memoria RAM donde esperan los documentos a ser enviados al repositorio). ◆ Repositorio (donde se guardan todos los cambios que hemos hecho). Existen 2 tipos de usar el comando git reset: ◆ git reset [#commit] --hard: nos regresa al estado del commit que seleccionemos, eliminando todos los commits posteriores a la versión seleccionada. ◆ git reset [#commit] --soft: nos regresa a la versión del commit seleccionado, pero no elimina lo que se encuentra en staging, aun que se eliminen las versiones posteriores, se guarda el último cambio hecho en staging. Para volver a una versión anterior se utiliza el comando checkout esta nos permite visualizar la versión seleccionada, pero NO SE CAMBIA A ESA VERSIÓN a menos que se realice un commit. Para volver a la versión actual, solo se ingresa el comando checkout seguida de la rama MASTER y el archivo. con esto se puede modificar el archivo de una versión anterior, sin eliminar o modificar los demás archivos dentro del directorio, es por eso que se selecciona el [nombre_archivo]. 1. CURSO PROFESIONAL DE GIT Y GITHUB Comandos básicos de Git / Git reset vs Git rm. Traemos de nuevo estos comandos aquí: git reset: nos permite volver a una versión anterior. git reset [código_commit] -hard. git reset [código_commit] -soft. git rm --cached: elimina el proyecto del staging, pero el archivo sigue existiendo. Git rm. Este comando nos ayuda a eliminar archivos de git, sin eliminar su historial del sistema de versiones. Esto quiere decir que si necesitamos recuperar el archivo solo debemos viajar en el tiempo y recuperar el último commit antes de borrar el archivo en cuestión. debe utilizarse uno de los siguientes flags: git rm --cached: Elimina los archivos del área de staging y del próximo commit, pero los mantiene en el disco duro. git rm --force: Elimina los archivos de git y del disco duro. Git reset. Este comando nos permite volver en el tiempo, pero no como git checkout que nos deja ir, mirar, pasear y volver. con git reset volvemos al pasado sin la posibilidad de volver al futuro, borramos la historia y la debemos sobre escribir, no hay vuelta atrás. git reset --hard: Borramos el historial y los registros de git, pero guardamos los cambios en staging. git reset --soft: Se elimina absolutamente todo. git reset HEAD: Este comando saca los archivos de staging, no para borrarlos, sino para que no se envíen al último commit. 1. CURSO PROFESIONAL DE GIT Y GITHUB Flujo de trabajo en Git / Flujo con repositorio remoto. git clone [url]: copia del repositorio remoto al repositorio local del proyecto. git push: envía el guardado en el repositorio local, los envía al repositorio remoto git fetch: actualizaciones del repositorio remoto al repositorio local. Repositorio remoto: para trabajar con un equipo en un servidor, donde se encuentra la versión del documento. Ejemplo: (GitHUB). git clone: con el link del repo remoto, trae una copia del master al directorio de carpeta en equipo y crea la base de datos de todos los cambios históricos en el repositorio local. git pull: actualiza los cambios hechos en el repositorio remoto y los guarda en el repositorio local y en nuestro directorio de trabajo. git push: ultima versión del head en master de nuestro repositorio local sea enviado al repositorio remoto, se utiliza git push. git fetch: sirve para traer actualizaciones hechas en el repositorio remoto hacia el repositorio local. git pull: funciona git fetch y git merge, donde además de bajar las actualizaciones al repositorio local, también lo hace en el directorio de nuestro proyecto. 1. CURSO PROFESIONAL DE GIT Y GITHUB Flujo de trabajo en Git / Introducción a ramas en Git. git commit -am “mensaje”: esto automáticamente hace el git add de los cambios, solo a los archivos que anteriormente ya les hayamos realizado un git add. Las ramas son formas en las que podemos hacer cambios sin afectar el MASTER git commit -a: nos manda a la consola de VIM para insertar un add. Al crear una rama, no se muestra nada, hasta dar git show nos dice que el ultimo commit hecho apunta a master y a cabecera como se ve a continuación: git branch [nombre_rama]: nos crea una rama. No se observa hasta que se da git show. git branch cabecera git checkout [nombre_rama]: nos envía a la rama seleccionada. git checkout cabecera git checkout MASTER git status: también nos sirve para mostrar en que rama estamos, si en MASTER u en otra. Las ramas son paralelas y pueden fusionarse. HEAD <- LUGAR DONDE ESTOY TRABAJANDO Para movernos del MASTER a la rama creada, en este caso CABECERA, se utiliza el comando git checkout como se muestra: cuando hacemos un commit en una rama distinta a MASTER, y ponemos el comando git log, nos muestra los commits, de esta forma: git log: nos muestra el historial de commits. git branch -D [nombre rama]: nos permite eliminar una rama Lo que pasa internamente al crear una rama, es que copia del MASTERA, en la primera imagen vemos como un commit apunta a (MASTER, CABECERA), lo que denota que es ahí cuando se crea la rama. Cuando se realizan cambios, es decir un commit dentro de la rama, eso ya no se muestra en la rama MASTER. *El comando git checkout es el más importante, ya que nos permite movernos entre las diferentes ramas del proyecto. 1. CURSO PROFESIONAL DE GIT Y GITHUB Flujo de trabajo en Git / Fusión de ramas con git MERGE. git merge [nombre_rama]: para traer los cambios de esa rama a la rama en la que estás posicionado. git branch: te muestra las ramas que existen en tu proyecto. Cuando creamos un MERGE, se marca el final de una rama, pues esta se fusiona a la rama MASTER. *Puede que la rama no se pierda, pero todo el contenido lo guarda en MASTER. Si realizamos cambios al archivo dentro de cualquier rama y no guardamos cambios, al dar git checkout, se pierden todos los cambios realizados en esa rama. El MERGE siempre ocurre en la rama en la que te encuentras. Ej. Si tengo la rama [nombre_rama], y la quiero enviar al MASTER, debo posicionarme en la rama MASTER y desde ahí invocar el comando git merge. Al crear un merge en MASTER, internamente se crea un nuevo commit que trae la nueva información de la rama que exporta, se fusionan (el ultimo commit de MASTER y el último commit de [nombre_rama]) y es por eso que se crea un nuevo commit. *A menos que se hayan modificado 2 líneas iguales dentro de la rama MASTER y [nombre_rama], al dar git merge, nos creará un conflicto, y no nos permitirá hacer el cambio. Todos los merge piden un mensaje, ya que se crea un nuevo commit. Al fusionar una rama al MASTER, se ve de la siguiente forma: 1. CURSO PROFESIONAL DE GIT Y GITHUB Flujo de trabajo en Git / Solución de conflictos. Visual Studio Code: nos permite ver los conflictos. Existen 3 tipos: de cambios, el de la rama actual, la rama de donde exportamos y aceptar ambos cambios. Cuando 2 usuarios modifican la misma línea de código en distintas ramas, y luego intentan unirlas, se crea un conflicto, ya que git no sabe cuál de las 2 versiones elegir. Cuando se intenta hacer un merge, marca de esta forma en VSCode: Nos dice que: <<<<<<<En la cabecera actual tenemos esto ======== >>>>>>>Y en la cabecera esto otro En consola se muestran de la siguiente forma: (MASTER|MERGING) nos muestra que estamos en un estado donde no se ha completado el merge, esto está a la espera de solucionar el conflicto seleccionando la versión final y añadiendo un commit. VSCode, nos permite seleccionar que cambio deseamos hacer para no hacerlo manual, con las siguientes opciones: 1. Aceptar el cambio actual. (rama en que estas) 2. Aceptar el cambio que viene. (rama de la que exportas) 3. Aceptar ambos cambios. Una vez hecho eso, se debe: 1. Realizar un add y commit de los archivos solucionados con git commit -am “mensaje” 2. Revisar con git status que se ha subido el cambio 3. Volver a hacer el merge. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Uso de GitHub. New repository: Sirve para crear un repositorio remoto. READ ME: archivo al entrar al repositorio de github, es una buena práctica hacerlo. git remote add origin [url_repositorio]: para agregar un origen remoto de nuestros archivos. git remote: nos muestra un origen remoto, git remote -v: nos muestra el origen para hacer fetch y para hacer pull. git pull origin [rama_MASTER]: para traer cambios del repositorio remoto a nuestro directorio local. git pull origin master --allowunrelated-histories: permite fusionar lo que existe en la rama origin/master con la rama Master local, es decir realiza un MERGE git push origin [rama_MASTER]: sirve para enviar al origen remoto, todo lo que hay en nuestra rama MASTER. Al crear un repositorio en GitHub, existe una buena práctica que siempre se debe realizar, que es inicializar READ ME. Dentro del repositorio creado en GitHub nos muestra 3 opciones al dar clic en READ ME: ◆ Raw: Muestra el código plano de ese archivo. ◆ Blame: Muestra quien ha realizado los commits. ◆ History: muestra la historia del archivo, similar al hacer un log. El repositorio puede ser de 2 tipos: ◆ Público. ◆ Privado. fetch: traer cosas del repositorio remoto. push: enviar cosas de nuestra rama MASTER al origen del repositorio remoto. Antes de realizar un push, debemos hacer un pull del repositorio remoto para que puedan almacenarse los cambios en el. al realizar pull, nos aparece la siguiente información: Ya cargada la información podemos realizar un push y se observa de la siguiente manera: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Uso de GitHub. New repository: Sirve para crear un repositorio remoto. READ ME: archivo al entrar al repositorio de github, es una buena práctica hacerlo. git remote add origin [url_repositorio]: para agregar un origen remoto de nuestros archivos. Después de: 1. 2. Crear el repositorio remoto en GitHub. Clonar el repositorio remoto en nuestro repositorio local con git remote add origin [URL]. 3. Ingresar nuestras credenciales de identificación de github. 4. Realizar el pull origin master, para traer el repositorio remoto a nuestro repositorio local. 5. Hecho el Merge del origin al master del repositorio local para fusionar los datos. 6. Visualizar que el archivo README.md se encuentra en nuestro repositorio local con ls -al. 7. Realizar un push origin, para enviar todo lo que tenemos en nuestro repositorio local, hacia el repositorio remoto. Todo se visualizará en el repositorio remoto en GitHub. git remote: nos muestra un origen remoto, git remote -v: nos muestra el origen para hacer fetch y para hacer pull. GitHub web, también nos permite realizar modificaciones y commits, de una forma amigable por medio de su interfaz de la siguiente manera: Nos vamos al documento que queremos modificar: git pull origin [rama_MASTER]: para traer cambios del repositorio remoto a nuestro directorio local. git pull origin master --allowunrelated-histories: permite fusionar lo que existe en la rama origin/master con la rama Master local, es decir realiza un MERGE git push origin [rama_MASTER]: sirve para enviar al origen remoto, todo lo que hay en nuestra rama MASTER. Una vez dentro seleccionamos el lápiz para editar: Al editar una línea y dar clic en “Preview Changes” nos permite visualizar los cambios y a la vez realizar un commit: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Llaves públicas y privadas en Git. En este apartado, sólo se muestran conceptos básicos acerca de la teoría antes de pasar a la práctica. Todos los commits realizados en el proyecto local, al fusionarse, también se muestran en el repositorio remoto y viceversa: En el repositorio Local: En el repositorio local: Cifrado simétrico de un solo camino (algoritmo de las llave públicas y privadas). Lo que se cifra con la llave pública, solo lo abre la llave privada ya que estas se encuentran vinculadas matemáticamente una con la otra. Las llaves permiten encriptar mensajes, que solo pueden ser descifrados por la llave pública. Es un cifrado tan poderoso, que así funcionan las finanzas del mundo. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Configurar llaves privadas SSH local. ssh-keygen -t rsa -b 4096 -C “email” : especifica algoritmo para usar la llave usando el rsa, que es el más popular, B 4096 es la complejidad de la llave, con C especificamos el correo electrónico al que estará conectado la llave. Enter passphrase: Nos deja añadir una contraseña con espacios para la seguridad SSL. Al configurar seguridad SSH en Git y GitHub, la seguridad se vuelve más fuerte y no tendremos que volver a colocar nuestras credenciales de identificación. Funciona de la siguiente manera: En el repositorio local se crean las llaves privadas y públicas. Al crearlas enviaremos la llave pública a GitHub, para que use la llave privada que tendremos en nuestra computadora, de esa forma podremos conectarnos con github por medio de un protocolo nuevo: SSH. Al enviar la llave publica a Github, Github enviará su propia llave pública con la llave que le enviamos para hacer la conexión, creando así una conexión cifrada de doble camino, entre GitHub y nuestro repositorio local. A la llave privada que tenemos, podemos añadirle una contraseña para hacerla aún más segura. Las llaves SSH no son por repositorio, si no por persona. Para crear la llave SSH se debe hacer: 1. Estar en la carpeta Home de nuestros documentos. 2. Tener el mismo correo en la configuración de Git. 3. Usar el comando para inicializar SSH (lado izq.) 4. Dar Enter para que se guarde en la carpeta que nos muestra. 5. Ingresar una contraseña para tener aún mayor seguridad. Eso es todo, nos crea el cifrado, nos dice donde se encuentra salvado desde nuestro ordenador, nos da la huella, y una imagen de la llave: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Configurar llaves privadas SSH local. ssh-keygen -t rsa -b 4096 -C “email” : especifica algoritmo para usar la llave usando el rsa, que es el más popular, B 4096 es la complejidad de la llave, con C especificamos el correo electrónico al que estará conectado la llave. Enter passphrase: Nos deja añadir una contraseña con espacios para la seguridad SSL. eval $(ssh-agent -s): con este comando se evalúa que un comando SSH se dispare. ~ : es una variable que tiene el directorio HOME. id_rsa : esta es la llave privada, la que no se debe compartir con NADIE!! id_rsa.pub: es la llave pública que si podemos compartir. La imagen se nos muestra de esta forma y ya se encontrará creada: Se debe revisar que el servidor de llaves SSH se encuentre prendido para ver que estén revisando que las llaves están corriendo y conecte la conexión doble cuando se haga la conexión remota. Para eso se ejecuta el comando eval. el cual nos dará como resultado una línea de comando como esta: Agent pid #### (los hashes son números aleatorios del servicio). Posteriormente, después de verificar que el servidor de cifrado corre bien, debemos agregarla al sistema, para eso veamos los siguientes puntos: 1. Identificar en que carpeta se guardó el id_rsa 2. Ingresar el carácter ~ para que nos muestre el directorio. 3. nos dirigimos a la carpeta por medio de este comando cd ~/.ssh/ 4. podemos ver con el comando ls -al que nos encontramos en la carpeta indicada. 5. Para agregar la llave debemos poner el siguiente comando con la ruta donde se encuentra nuestro ssh: ssh-add ~/.ssh/id_rsa 6. Si configuraste contraseña, debes añadirla para que pueda ejecutarse. 7. Listo, se mostrará en terminal “Identidad agregada” 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Configuración de GitHub con SSH. git remote set-url origin [url_SSH]: sirve para cambiar la URL, ya que ahora usaremos la de clonar con seguridad SSH. Las llaves ya están creadas en el home de la carpeta de nuestro usuario en nuestra computadora. git pull: trae del servidor remoto al repositorio local. Para configurar GitHub con el SSH, debemos hacer lo siguiente: 1. Copiar lo que hay dentro del archivo id_rsa.pub 2. Ir a GitHub > configuración > SSH y GPG keys. 3. Una vez dentro agregaremos una nueva llave SSH 4. Añadimos un título 5. en Key, pegamos la clave que copiamos de id_rsa.pub 6. Damos clic en agregar 7. Añadimos nuestra contraseña Al finalizar nos mandará una pantalla como esta y ya se encontrará configurado. git push: envía los cambios del repositorio local al repositorio remoto. git diff: nos muestra las diferencias en cambios realizados. *Cada persona debe tener una llave única. Ahora podremos clonar nuestro repositorio usando la opción SSH, para ello debemos modificar la URL por la de SSH que nos da en GitHub con el comando: git remote set-url origin [url_SSH] Eso nos cambiará la URL por una con seguridad de cifrado SSH, al ingresar el comando git remote -v observaremos que se han cambiado las URL’s. Después del proceso exitoso, antes de realizar cambios en el servidor local y hacer commit, debemos hacer un pull al origen para traer la última versión del servidor remoto: git pull origin master Al realizar eso, ahora si podremos realizar cambios, commit y un git push origin master para enviar esos cambios del repositorio local al servidor remoto de GitHub. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Tags y versiones en Git y GitHub. git log --all: muestra todos los commits que hay incluso en las ramas. Para añadir un alias a algún comando es necesario escribir en la línea de comandos lo siguiente: alias [nombre_alias] = "comando" git log --all --graph: nos muestra gráficamente como están las ramas. git log --all --graph --decorate -oneline: muestra lo mismo que graph, pero todo más comprimido. alias [nombre_alias] = "comando": crea alias para no usar el comando completo. git tag -a [nombre_versión] -m “mensaje_commit” [hash_commit]: Sirve para crear un TAG git tag -a v0.1 -m “Primer bifurcación” d03d7d8 git tag: nos permite ver los TAGS que tenemos. Entonces para ejecutar esos comandos, basta solo escribir el alias que ingresamos en ese momento. Un tag sirve para crear un atajo a algún commit en específico. Usamos el hash de un commit, para ver lo que existe en el de forma rápida y sin tener que ingresar el hash completo. Los tags son importantes para que los vea alguien, y sepan la versión, eso se observa en GitHub por eso es por lo que se debe enviar el TAG a él, para ello debemos realizar un git pull origin master para traer todo lo que tenemos en el origin hacia master. Para enviar los TAGS realizados a GitHub, se utiliza el siguiente comando: git push origin --tags Dentro del Bash, no nos aparecerá nada más que esto: git show-ref --tags: para saber a qué hash está apuntando el tag. git push origin --tags: empuja los tags hacia el origin de GitHub. Al revisar en GitHub, en el área de Branch, a un lado podremos ver Tags y ahí nos aparecerá la versión del TAG que hemos subido: git tag -d nombre_tag: esto elimina el tag de nuestro directorio local. git push origin :refs/tags/nombre_tag : Elimina los tags que tenemos en GitHub. Cuando envías por error un TAG hacia GitHub, la forma de eliminarlo es la siguiente: git push origin :refs/tags/nombre_tag 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Manejo de ramas en GitHub. REPASO DE COMANDOS RAMAS. En GitHub siempre se vera la rama MASTER es decir el origin. git branch [nombre_rama: te permite crear una rama con el nombre que elijas. Internamente podemos ver un desglose de las ramas que tenemos con los comandos: git checkout [nombre_rama]: permite navegar entre ramas. git branch: nos muestra todas las ramas que existen. git show-branch git show-branch --all También existe en git, un software visual que se abre con el comando gitk y se ve de la siguiente forma: git show-branch: nos muestra las ramas que existen y la historia de ellas. git show-branch --all: nos muestra cuando se ha utilizado la rama y la divide por colores. gitk: nos abre un software visual para observar los cambios. git push origin [nombre_rama]: envía nuestra rama hacia GitHub. *debemos estar dentro de la rama que deseamos enviar. **SIEMPRE ANTES DE ENVIAR ARCHIVOS A GITHUB DEBEMOS TRAER LOS DATOS AL REPOSITORIO LOCAL CON git pull origin master. Para enviar las ramas que tenemos en el repositorio local hacia GitHub, es necesario seguir estos pasos: 1. posicionarnos en la rama que deseamos subir con git checkout [nombre_rama] 2. Usar el comando (estando entro de la rama) git push origin [nombre_rama] Y eso sería todo para enviar una rama hacia GitHub, cabe mencionar que la rama debe estar creada previamente. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Múltiples colaboradores en GitHub. git restore --staged <file>: elimina el archive que hemos agregado con git add. git pull origin [nombre_rama]: sirve para traer el origin del repositorio remoto a una rama en específico. git pull origin footer: nos trae la rama footer desde GitHub a nuestro repositorio remoto. CTRL + F5: Para forzar la actualización de un sitio. Para añadir a colaboradores del repositorio en GitHub debemos: 1. Ir a settings del repositorio. 2. Collaborators, ahí podremos enviarles la invitación por medio de su correo electrónico ligado a GitHub. 3. Si no puede agregarse por correo, también existe la posibilidad de agregarlo por nombre de usuario. Cualquier persona puede clonar un repositorio si es público, pero no tendrá acceso a realizar push al origin, es decir que si realiza cambios, no podrá subirlos al repositorio a menos que sea colaborador. **LAS MEJORES PRÁCTICAS DICEN QUE LOS ARCHIVOS BINARIOS NO DEBEN AGREGARSE A LOS REPOSITORIOS. El problema con los binarios es el peso, entre más binarios haya, más pesado será nuestro repositorio. El trabajo en conjunto debe realizarse en distintas ramas por lo cual para fusionar al MASTER, es necesario seguir los pasos: 1. Revisar los cambios de la rama a fusionar antes de hacerlo. 2. Una vez revisado podremos pasar a la rama MASTER 3. Una vez en MASTER podremos hacer el merge 4. Si el merge no se realiza porque hay conflictos, debemos solucionar los conflictos (IR AL TEMA SOLCUIÓN DE CONFLICTOS). 5. Después de realizar el merge y observar los cambios, el proyecto del MASTER 6. Se debe hacer un pull del origin al master para ver que no se hayan realizado cambios en el repositorio remoto. 7. Podremos hacer un push origin master, para subir todos los cambios que hemos revisado y realizado en la rama MASTER. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Flujo de trabajo con Pull Request. En este apartado se habla de GitHub para realizar Pull Request. Un Pull Request: es un estado intermedio antes de enviar el merge, este nos permite que otros miembros del equipo visualicen los cambios realizados que hemos hecho y al aprobarlos se ejecuta el merge en staging. Staging Developer: Es una rama donde se encuentra una copia exacta del MASTER final, y se utiliza para realizar pruebas. El Pull Request es una característica única de GitHub, es importante porque permite a personas que no son colaboradores, trabajar en nuestro proyecto o apoyar en una rama. Las personas que realizan este tipo de cambios, pruebas y acepta los pull request son los líderes de equipo o personas con un perfil de DevOps. Para hacer un pull request debemos: 1. Seleccionar New Pull Request 2. Seleccionamos la base, es decir Master y la rama que queremos comparar: 3. Al entrar a la comparación del pull request, nos permite ver los cambios y agregar detalles. 4. Se puede añadir Reviewers para que revisen los pull request 5. Se da clic en pull request. Una vez hecho el pull request, nos mandará a una pantalla donde observaremos la conversación principal del pull request, los commits, los cheks y los archivos modificados. Para ello debemos estar en files changed, estando ahí podemos, seleccionar Review changes y: ◆ Aceptar el pull request y hacer un merge. ◆ Solicitar modificar esos cambios. ◆ Realizar un comentario para hacer feedback. Si solicitamos Reviewers, estos deben aceptar todos los cambios antes de realizar el merge, debe estar marcado con una palomita verde antes de realizar el merge. Una vez hecho el merge al MASTER, es posible eliminar el branch, ya que hay branch que se abren solo para solucionar errores 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Creando un Fork en GitHub. vi [nombre_archivo.extension]: nos permite utilizar el editor de texto vim desde consola. stash them: solución de errores. git remote -v: nos permite ver donde tenemos el proyecto al que se hace push y pull. git remote add [nombre_fuente] [url_repositorio]: Nos crea una fuente nueva, visible desde el comando anterior para traer a 2 puntos un pull o un hacer un push. switching the base: nos cambia a la base del repositorio original donde sacamos el fork en GitHub, para eso antes debemos darle en compare para ver los cambios. git remote add origin [url_repositorio]: para agregar un origen remoto de nuestros archivos. Un fork lo puede realizar una persona que no es colaborador directo del repositorio pero que si se encuentra interesado en aportar a él. ◆ Al hacer a un watch a un repositorio en GitHub marcamos que nos interesa y podremos ver cambios que se realicen. ◆ Al colocar una star significa que el proyecto me gusta y es importante. ◆ un fork es tomar una copia del estado actual proyecto y hacerlo mío, esto solo funciona para repositorio públicos. AL realizar el fork, el proyecto se pasa nuestro lugar de repositorios, pero en la parte de abajo aparecerá de donde se copió el fork. Lo que pasa cuando el repositorio de donde realizamos el fork avanza, nosotros debemos actualizar esos cambios. Al entrar al repositorio veremos si se han hecho cambios en el repositorio original: Nosotros podremos hacer una comparación de lado derecho se encuentra el botón. El flujo es el siguiente después de tener el fork 1. Crear una fuente y clonar el repositorio original. 2. git remote -v nos va a permitir ver las fuentes de repositorios remotos que tenemos: 3. Hacer un git pull upstream master. Para traer todo lo que clono upstream al MASTER del fork. 4. Después de tenerlo ya en nuestro MASTER, procedemos a realizar un git push origin master, para guardar los cambios del fork en GitHub. En el repositorio en GitHub debe aparecer algo así: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Ignorar archivos con .gitignore. La sintaxis dentro de git ignore es la siguiente: * que nos dice que añadirán todos los archivos que tengamos. seguido del .[extensión] *.jpg *.png *.doc para ignorar carpetas debe ponerse de la siguiente manera: /nombre_carpeta sí seleccionamos la carpeta pero no deseamos que todo sea ignorado: !/nombre_carpeta/(archivos que no deben ignorarse) Si deseamos ignorar de una carpeta un archivo especifico: /nombre_carpeta/.extensión Con el símbolo hash # podemos hacer comentarios dentro del .gitignore .gitignore es la forma en la cual podemos ignorar archivos importantes para que no puedan verlos, es decir que no serán agregados al repositorio. Sirve por si deseamos añadir archivos binarios o archivos importantes debemos: **evitar que los archivos binarios del contenido sean parte de un repositorio. Para usar .gitignore debemos seguir los siguientes pasos: 1. Crear un nuevo archivo .gitignore y guardarlo en la raíz del proyecto. 2. .gitignore es una lista de los archivos que vamos a ignorar. 3. Se guarda y debemos ir a Bash y dar git status. 4. Una vez ahí si teníamos archivos con git add. 5. Hacer git commit. 6. Hacer un git pull origin master. 7. Hacer un git push origin master. Las imágenes ya no aparecerán, por lo que debemos subirlas a un servidor y cargar la url para poder visualizarlas. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Readme.md. ##: Mark Down es un lenguaje intermedio utilizado en Wikipedia y también para crear un readme.md para salir del editor de texto Vim: Esc, después :x Enter Readme.md Existe para mostrarle al mundo de que trata nuestro repositorio y es una buena práctica dentro de nuestros repositorios. para poder crear nuestro README.md podemos utilizar el siguiente link: https://dillinger.io/ Ejemplo de un README.md: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Git rebase. git rebase [nombre_rama]: Nos permite hacer un rebase, es decir, pegar lo que hemos realizado en la rama. git rebase master: trae todo lo que tenemos en nuestra rama hacia master pegándolo. Rebase: es tomar una rama entera y pegarla en la historia del MASTER, no con un merge… si no como si se hubiera trabajado en el MASTER todo el tiempo. *Es muy mala práctica hacer eso en los repositorios remotos, es mejor utilizarla internamente. Funciona como un parche. Para hacer un rebase debemos: 1. Posicionarnos en una rama distinta a MASTER. 2. Crear cambios en esa rama 3. En lugar de hacer un merge, debemos: estando en la rama que queremos enviar a MASTER usar el comando: git rebase MASTER 4. Para unir lo que hay en Master en nuestra rama_prueba. 5. Después debemos posicionarnos en MASTER con git checkout master, estando en Master debemos usar el siguiente comando: git rebase rama_prueba 6. Y eso nos traerá toda la información que existe en esa rama hacia la rama MASTER. 7. Una vez realizado eso será como si la rama_prueba, jamás hubiera existido pues los commits que se hicieron dentro de la rama_prueba ahora son parte de la historia del MASTER La magia de rebase radica en que, si se realizan cambios en la rama MASTER, mientras estamos en alguna otra rama, al ejecutar el comando rebase en la rama_prueba, traerá primero todos los cambios de MASTER hacia tu rama y lo fusiona. Es muy útil usar esta información para datos locales, no para datos remotos ya que modifica por completo la historia de donde fue creada Tal rama. Recapitulando un rebase es la forma de realizar cambios silenciosos en otras ramas, como si no existieran y llevarlas al MASTER. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Git stash. git stash: nos permite volver a un estado anterior de los cambios realizados, porque almacena los cambios en un lugar temporal. git stash list: nos permite ver loa cambios que tenemos guardados en un lugar temporal. WIP: Work In Progress. git stash pop: nos regresa a lo que teníamos dentro del stash (es decir los cambios que hicimos). git stash branch nombre_rama: nos manda lo que tenemos en el stash guardado (el cambio que hicimos) a otra rama, la rama que escribamos puede ser una nueva que se crea ahí mismo, o una que ya tengamos. Git Stash es: nos permite almacenas un cambio en un lugar temporal. Es aquel que toma un cambio y lo guarda hasta que decidamos volver a soltarlo. Para ejecutarlo hace falta escribir el comando: git stash Para soltar el cambio que guardamos es: git stash pop git stash también nos sirve por si hemos roto parte del código y hemos guardado cambios dentro del mismo proyecto. OJO(no hecho git add o git commit -am, eso lo resuelve un git rm o un git reset) Ya que podemos guardar esos cambios hechos en el stash y utilizar el comando git stash drop esto es para borrar los cambios que hay en el stash, es decir aquellos cambios que hicimos que rompieron el código. como lo dice en la parte lateral izquierda, al ejecutar el comando git stash el cambio que recién hicimos lo guarda en el stash y nos regresa a lo que teníamos en el commit anterior, pero los cambios los tenemos guardados dentro de ese stash para: ◆ Soltarlos en el código para modificarlo. ◆ Ponerlos dentro de una rama. ◆ Borrarlos del stash, si es que esos cambios no nos sirven. Después de haber aceptado un stash se debe hacer un git commit -am “mensaje” para guardarlo. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Git clean y Git cherry-pick. git clean --dry-run: es un comando que sirve para simular lo que se va a borrar, sin borrarlo. git clean -f: borra las copias que no nos sirven dentro del proyecto. git cherry-pic #commit: Nos trae a la rama en la que nos encontramos el cambio del commit seleccionado. git log --oneline: nos muestra en una sola línea simplificada la lista de los commits. Git clean: nos sirve para limpiar de nuestro repositorio a los archivos que por error creamos o que no nos sirven realmente como lo son copias de archivos. Git las detecta y puede eliminarlas pero para saber que va a eliminar antes de hacerlo se utiliza el comando: git clean --dry-run git elimina con git clean -f los archivos (aquellos que ya hemos revisado con el comando anterior), SOLO no elimina copias de carpetas o de archivos que se encuentren dentro de .gitignore Git cherry-pick: Sirve para traernos cambios específicos de una rama a otra, sin tener que hacer merge utilizando únicamente el commit del cambio que deseamos utilizar. Para utilizarlo necesitamos: 1. Posicionarnos en la rama de donde queremos sacar el #commit. 2. Realizar un git log --oneline para ver el # del commit que deseamos traernos a la otra rama. 3. Una vez visto el # lo copiamos. 4. Nos regresamos a la rama donde queremos traer ese commit. 5. Ejecutamos el comando git cherry-pic #commit y listo, tendremos la actualización de ese commit que se encontraba en otra rama, dentro de nuestra otra rama, en este caso MASTER. *Los cambios se verán reflejados dentro de nuestro código. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Reconstruir en Git con amend. git commit --amend: sirve para copiar los cambios que hicimos al commit anterior. Git commit --amend, nos ayuda cuando hemos enviado un commit y nos ha faltada añadir algo, entonces podemos utilizar este comando y todo lo que agreguemos se va a pegar en el commit anterior. La forma correcta de realizar los cambios es: 1. Al observar que nos ha faltado algo debemos modificarlo y hacer un git add [archivo.extension] 2. Eso debe hacerse antes de hacer el commit, ya que el commit se ejecutará en la forma del comando para pegarlo: git commit --amend Y listo con eso habremos “enmendado” la falta que no subimos en el commit anterior. Se le llama enmendar porque es lo que significa amend en inglés. 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Git Reset y Reflog: EMERGENCIAS. git reflog: nos muestra todos los head que hemos tenido en el proyecto a lo largo de nuestro proyecto. git reset (--HARD o --SOFT) HEAD@{numero}: nos recupera el head de los commits. Git Reflog, nos muestra TODO, absolutamente toda la historia incluso ramas que hemos eliminado ya que nos muestra todos los head que hemos tenido. Al mostrarnos todos los head, podemos seleccionar el HEAD al que deseemos volver, si es que hemos tenido un error enorme, como lo dice el título, solo se usa en emergencias. por ejemplo: aquí podemos volver al head donde realicé un cambio mal usamos: HEAD@{numero} después de eso utilizamos (los comandos ya antes vistos) git reset (--HARD o --SOFT) HEAD@{numero} Ese comando nos regresa a la posición donde estuvimos antes, dependiendo de si usamos Hard o Soft nos podrá guardar lo que tenemos en staging o no. Aun así si hemos eliminado archivos el HEAD@{numero} no nos servirá pues solo nos recupera el Head de los commits no los archivos eliminados. Para ello demos utilizar la misma función pero esta vez copiando el #commit para volver a ese punto, utilizando: git reste --hard #commit 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Git Grep y Log. git grep [palabra]: busca esa palabra en nuestros archivos en la rama en la cual nos encontremos. git grep -n [palabra]:nos da la línea específica en donde se encuentra esa palabra. git grep -c [palabra]: nos muestra el número de veces que se utiliza esa palabra en nuestros distintos archivos. git log -S “palabra”: busca palabras usadas en commits. Cuando nuestro proyecto se hace grande, se hace más complicado buscar algunas palabras que hemos utilizado dentro del proyecto, para eso existe el comando: git grep [palabra] al ejecutar ese código nos mostrará los resultados de la siguiente manera: mostrándonos todos los lugares donde utilice la palabra color. para conocer la línea de código exacta en donde utilicé esa palabra se usa el comando: git grep -n [palabra] Para saber cuántas veces he usado esa palabra en los archivos usamos el comando: git grep -c [palabra] Para buscar una palabra, no dentro de los archivos del proyecto, sino en los commits se utiliza el comando: git log -S “palabra” Se nos muestra de la siguiente forma: 1. CURSO PROFESIONAL DE GIT Y GITHUB Repositorios Remotos / Recursos Colaborativos Git y GitHub. git shortlog: para ver cuántos commits ha hecho cada miembro del equipo. Git branch -r: vemos las ramas remotas que tenemos en el servidor GitHub. git branch -a: se ven todas las ramas (remotas y locales) git shortlog -sn: para contar los commits y las personas que han hecho commits. git shortlog -sn --all: nos muestra todos los commits hechos incluso los que se borraron. git shortlog -sn --all --nomerges: Vuelve a mostrar los commits total de cada miembro del equipo eliminando los merges. git config --global alias.stats “comando”: sirve para agregar a la configuración local un alias sin tener que añadirlo cada vez que se abre git. git config --global alias.stats “shortlog -sn --all --no-merges” git [comando] --help: no sabre un manual de cómo funciona el comando git blame [archivo.extension]: nos muestra quien ha hecho los cambios en ese archivo Insights. Nos muestra TODO lo que debemos saber del proyecto. Pulsos, contribuidores, comunidad, commits, Frecuencia del código por días, Dependencia del código (librerías a las que sigue el proyecto). Network, Forks, Advertencias. Gracias a todos los que han descargado esta guía que realicé en mi paso por la ruta, espero le sirva de mucha ayuda. Mi nombre es @Loreli-Cervantes y para mí es un placer ayudarlos.