Skip to content

Instantly share code, notes, and snippets.

@picuu
Last active March 11, 2024 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save picuu/eed5f72e99bacab9f39a88fb28e91bfd to your computer and use it in GitHub Desktop.
Save picuu/eed5f72e99bacab9f39a88fb28e91bfd to your computer and use it in GitHub Desktop.
Git and GitHub course

Git y GitHub

Es mucho más recomendado usar SSH para clonar repositorios, en vez de HTTPS.

Una buena práctica a la hora de hacer commits es no usar puntos. El mensaje de los commits realmente son sus títulos, y estos nunca se puntúan. Es tan fácil como fijarse en como GitHub hace sus propios commits.

Recordar que un commit es una confirmación. Cuando hacemos un commit estamos indicando que queremos confirmar los cambios que hemos realizado.

Comandos interesantes de Git

Git clone

Al clonar repositorios con el comando git clone podemos utilizar el parámetro --depth=1 para descargar el proyecto en el estado actual y únicamente el último commit que se ha realizado. Por ejemplo git clone link-repositorio.git --depth=1. De esta manera la clonación será mucho más rápida y además el proyecto no ocupará tanto espacio.

A la hora de clonar un repositorio, podemos indicar la carpeta en la que queremos que se clone poniendo la ruta al final del comando: git clone repositorio ./carpeta.

Git switch

Se puede utilizar el comando git switch nombre-rama para cambiar de rama, al igual que haríamos con el comando git checkout nombre-rama aunque la sintaxis queda algo más clara con el comando switch que con el checkout. Además, el comando checkout ya no es recomendado ya que viola la filosofía UNIX, y fue por eso que añadieron a Git los comandos switch y restore.

Con git switch -c "nombre-rama" estaremos creando una nueva rama y a su vez moviéndonos a ella.

Git reset

En caso de haber realizado un commit que no queríamos, aún estamos a tiempo de volver atrás. Con el comando git reset --hard HEAD~1 eliminaremos el último commit realizado y descartaremos todos los cambios que este realizaba. Si solamente queremos eliminar el commit pero conservar los cambios, también podemos hacerlo cambiando el parámetro git reset --soft HEAD~1. Si quisiéramos devolver el estado de nuestro proyecto a un commit anterior en concreto, podemos sustituir HEAD~1 por el código SHA-1 de 40 caracteres, o la abreviatura de 7, que identifica el commit, por ejemplo con git reset --soft 8f8f5d9 eliminaríamos todos los commits que se han realizado después del indicado pero conservaríamos los cambios.

Git log

Para ver todos los commits que hemos realizado podemos utilizar el comando git log. Si queremos reducir la información que se muestra, podemos utilizar el parámetro git log --oneline.

Git fetch

El comando fetch es muy similar al pull pero tienen una diferencia. Con fetch los cambios remotos solo se aplican a nuestros cambios confirmados, y no reemplazan los cambios que tengamos sin confirmar. En cambio el pull aplica los cambios remotos tanto a nuestros cambios confirmados como a nuestro working directory.

Git stages

Contribuciones con GitHub Flow

Fork y clonación del repositorio

El primer paso para hacer una contribución a un repositorio ajeno es hacer un Fork.

Una vez hecho el fork, deberemos clonar el fork en local. Para ello, una herramienta que nos va a facilitar la vida es usar la CLI de GitHub. El equivalente a git clone link-repositorio.git sería gh repo clone usuario/repositorio.

La principal diferencia es que la CLI de GitHub ya nos enlaza el repositorio remoto upstream1 (desde donde hemos hecho el fork), mientras que con el comando de git tendríamos que hacerlo manual. Para hacerlo manual utilizaríamos el comando git remote add upstream link-repositorio.git (en upstream realmente podemos poner la palabra que nosotros queramos, pero lo estándar es así)1. Para ver los remotos que tenemos configurados, podemos utilizar el comando git remote --verbose. Podemos tener tantos repositorios remotos como queramos.

Git remotes

Esto es interesante ya que si en el repositorio original se realizan modificaciones, podemos coger esos cambios directamente con git fetch upstream1 y aplicarlos en nuestro repositorio local (main, en el ejemplo) con git pull upstream main1.

Pull request

Una vez realizados los cambios pertinentes, deberemos subirlos a GitHub.

En primer lugar podemos crear una rama, en nuestro repositorio local, con el comando git switch -c "nombre-rama". Importante darle un nombre descriptivo a la rama de lo que arregla.

Luego deberemos crear los commits necesarios y subirlos a nuestro repositorio remoto (el fork que hemos hecho). Una manera sería con el comando git push -u origin nombre-rama.

Una vez tengamos los cambios publicados a nuestro repositorio remoto en GitHub, veremos que nos aparece un cartel que nos indica que tenemos una nueva rama nuevos cambios respecto a la rama principal. GitHub Pull Request card

Al hacer click en el botón, será cuando realmente podremos hacer la pull request hacia el repositorio original (de donde hemos hecho el fork). GitHub Pull Request card

Esta imagen significa que haremos una pull request de la rama fix-accessibility-issues de nuestro repositorio (midudev/svgl) hacia el repositorio base (pheralb/svgl) a la rama main.

Buenas prácticas para los pull requests

  1. Ser quirúrgicos: modificar solo y únicamente lo que necesitemos para arreglar/implementar nuestra feature. No crear "ruido" innecesario modificando el estilo o re-formateando el código.
  2. Separar: utiliza una pull request para arreglar una cosa concreta. Si ves que hay más errores o cosas que podrías implementar, crea otras pull requests.
  3. Imitar el estilo de los commits: siempre habrá más probabilidades de que os acepten una pull request si seguís con el estilo usado.
  4. Revisar los commits: antes de enviar la pull request, no es mala idea revisar los commits que hemos hecho y las líneas que modifican, para no enviar cosas que no queramos.
  5. Minimizar el número de ramas.

Una vez se haga el merge de nuestra pull request, GitHub nos dará la opción de borrar la rama de nuestro repositorio (el fork que habíamos hecho). Al eliminar la rama desde GitHub, luego podremos sincronizar los cambios con nuestro repositorio local con el comando git fetch.

Además, luego también podremos sincronizar los cambios de nuestro repositorio (el fork, que está atrasado) con los nuevos cambios que se han integrado al repositorio original con nuestra pull request. GitHub nos ofrecerá también un botón para hacerlo. Si no, podemos utilizar el comando git pull upstream main1 para llevar los cambios realizados en el repositorio original desde donde habíamos hecho el fork hacia nuestro repositorio local. Para ver si tenemos vinculado el upstream1 (con la CLI de GitHub se vinculaba automáticamente) utilizaríamos el comando git remote --verbose. Luego, deberíamos actualizar los cambios a nuestro repositorio remoto con git push -u origin main.


Referencias

YouTube:

Curso de GIT y GITHUB DESDE CERO Para Aportar a Proyectos

Artículos y Webs:

Borrar último commit con reset y revert en git | Solucionex

Webs para encontrar proyectos en los que hacer nuestras primera Pull Request

For Good First Issue | Make your next open-source contribution matter.

Good First Issue: Make your first open-source contribution

Good First Issues

Footnotes

  1. Upstream es una palabra clave que se utiliza para indicar a la fuente de datos que está más arriba, la original. Sería para hacer referencia al repositorio desde el que nosotros hemos hecho un fork. 2 3 4 5 6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment