| ... | ... | @@ -255,7 +255,7 @@ Hasta acá consideramos el caso en que iniciamos un fork de un repo GitHub y pon |
|
|
|
Hay que ser cuidadosx porque eventualmente vamos a utilizar herramientas que permiten "re-escribir la historia". Observen la formulación: en todo lo que sigue, no vamos a re-escribir la historia. Lo que vamos a hacer es dejar una huella mejor ordenada de la historia. Pero vamos a guardar todo, o casi todo. Y en cada caso que se esté haciendo algo que pueda borrar información del repo lo señalaremos. ¿Ya quedó atrás el pánico?
|
|
|
|
|
|
|
|
Primero un resumen de la historia:
|
|
|
|
- al instante de hacer el fork de un repo se lo clona en una nueva instancia eb otro namespace, con todo lo que contienen. Entonces el repo y el fork comparten los commits, ramas, tags, etc. que existían entonces. Comparten al menos el commit inicial y la rama principal, llamémosla master aquí.
|
|
|
|
- al instante de hacer el fork de un repo se lo clona en una nueva instancia en otro namespace, con todo lo que contienen. Entonces el repo y el fork comparten los commits, ramas, tags, etc. que existían entonces. Comparten al menos el commit inicial y la rama principal, llamémosla master aquí.
|
|
|
|
- los dos repos evolucionan por separado y recorren caminos o grafos diferentes
|
|
|
|
- pero siempre siguen compartiendo ese historial inicial común, sobre el cual sólo se agregaron contribuciones diferenciales (de hecho, si hay algo que nunca hay que borrar, es la rama y el commit desde el cual se ha hecho un fork)
|
|
|
|
|
| ... | ... | @@ -271,8 +271,19 @@ La definición más precisa de lo que hace ese .. es que muestra todos los commi |
|
|
|
|
|
|
|
Recorremos hasta el último commit del log y copiamos su hash. Si lo único que nos interesa es ir a ver ese hash, podemos resumir los reportes de log:
|
|
|
|
```
|
|
|
|
git log upstream/master..HEAD --oneline
|
|
|
|
$ git log upstream/master..HEAD --oneline
|
|
|
|
a4fbfb1 (HEAD -> master, tag: v0.1-arrayan, origin/master, origin/HEAD) Merge branch 'master' of https://github.com/UdelaRInterior/sympa
|
|
|
|
73fa356 Added .gitignore
|
|
|
|
6476d90 galaxy_install_info added to .gitignore
|
|
|
|
cc92007 Change topics.conf template
|
|
|
|
516a05f Change role name
|
|
|
|
6f60cd2 Correct syntax
|
|
|
|
c1f7238 Correct syntax
|
|
|
|
e7e4ea8 Correct syntax
|
|
|
|
ce4a63d Work with postgreSQL and create the robots
|
|
|
|
```
|
|
|
|
(los ejemplos reales de este tutorial vienen del repo `UdelaRInterior/ansible-sympa`)
|
|
|
|
|
|
|
|
Nos paramos entonces en ese hash:
|
|
|
|
```
|
|
|
|
$ git checkout ce4a63d
|
| ... | ... | @@ -313,7 +324,7 @@ Date: Fri Jun 21 18:06:45 2019 +0200 |
|
|
|
Pues es ahí que podemos crear nuestra rama `upstream-master`, y pararnos en ella:
|
|
|
|
```
|
|
|
|
$ git branch upstream-master
|
|
|
|
$ git checkiut upstream-master
|
|
|
|
$ git checkout upstream-master
|
|
|
|
```
|
|
|
|
Rama así bien injertada en el arbol del repo, de manera a que se actualice sin conflicto:
|
|
|
|
```
|
| ... | ... | @@ -323,9 +334,7 @@ Y ya tenemos nuestra rama upstream-master lista para preparar PRs para el repo d |
|
|
|
|
|
|
|
Hasta acá hemos resuelto el órden el el repo sin ni siquiera tener en algo que "re-escribir la historia". Simplemente la recorrimos.
|
|
|
|
|
|
|
|
Ahora, si a la hora de ordenarse para hacer PRs en upstream, nos damos cuenta que la rama `upstream-master` ya está creada, y que por alguna razón o error no sigue el mismo camino que su espejo `upstream/master` (¿notan la sutileza? `nom-bre` `remote/nombre`).
|
|
|
|
|
|
|
|
Ahí sí conviene, no re-escribir la histria, sino corregir una versión mal reportada de la historia.
|
|
|
|
Ahora bien, si a la hora de prepararse para hacer PRs en upstream, nos damos cuenta que la rama `upstream-master` ya existe, y que por alguna razón o error no sigue el mismo camino que su espejo `upstream/master` (¿notan la sutileza? `nom-bre` `remote/nombre`), ahí sí conviene, no re-escribir la histria, sino corregir una versión mal reportada de la misma.
|
|
|
|
|
|
|
|
A lo sumo, si por alguna razón no queremos perder el historial de esa rama equivocada, bien podemos preservarla con otro nombre antes de corregirla:
|
|
|
|
```
|
| ... | ... | @@ -352,7 +361,7 @@ $ git pull upstream/master |
|
|
|
|
|
|
|
Documentándome un poco para escribir esto, caí sobre un billete de blog que, si sos de los que leen sólo los titulares, te hará hacer muchas cagadas: [Always Squash and Rebase your Git Commits](https://blog.carbonfive.com/2017/08/28/always-squash-and-rebase-your-git-commits/).
|
|
|
|
|
|
|
|
Lo que conviene entender de ese título es que en muchos casos, es bueno poner orden a posteriori. La historia escrita en un git puede ser verborrágica. No siempre recordamos hacer `git ---amend` cuando nos olvidamos de un detalle en un commit. ¿cuántas veces hacemos un commit sólo por cambiar de rama o para retomar el trabajo en otra computadora?
|
|
|
|
Lo que conviene entender de ese título es que en muchos casos, es bueno poner orden a posteriori. La historia escrita en un git puede ser verborrágica. No siempre recordamos hacer `git ---amend` cuando nos olvidamos de un detalle en un commit. ¿Y cuántas veces hacemos un commit sólo por cambiar de rama o para retomar el trabajo en otra computadora?
|
|
|
|
|
|
|
|
Todo eso, no sólo no aporta nada y hace ruido, sino que además comprende metadatos que pueden llegar a interactuar con temas de privacidad. Es sano tirar a la basura los borradores y ordenar mejor la biblioteca.
|
|
|
|
|
| ... | ... | |
| ... | ... | |