Vamos a describir el estado de un repositorio de git de forma simplificada, tiene 2 partes importantes:
- el árbol de commits, que es lo que guarda la base de datos de snapshots de git En el diagrama, cada commit apunta a su(s) padre(s).
- la tabla de branches, que dice qué branches tenemos y a qué commits apuntan
En un repositorio local, además tenemos:
- el current branch, el branch en el cual estamos trabajando en este momento
- el staging area
- el working directory
Hemos empezado a trabajar en un proyecto de git y está en este estado (seguimos la notación de git indicando el current branch con un asterisco). El working tree y el staging area están sin cambios.
Todas las preguntas empiezan con el estado inicial descrito arriba, no son cambios cumulativos.
Los diagramas son svg así que se pueden editar fácilmente con inkscape; hacer un diagrama a mano y subir una foto también es una opción.
(Ejemplo) Supongamos que hacemos unos cambios y ejecutamos git commit -m "Better idea"
:
Cambia el diagrama para representar el nuevo estado del repositorio.
NB: hay que inventarse la fecha y el hash:
Supongamos que tenemos otra idea, así que hacemos otro branch en este punto y cambiamos a este branch:
git branch another-idea
git checkout another-idea
Cambia el diagrama para representar el nuevo estado del repositorio: tanto el grafo de commits como la tabla de branches pueden cambiar.
------------------------------------
| current | branch | commit |
------------------------------------
| | master | d10d0c9 |
| | idea | 1c9a23c |
| * | another-idea | 1c9a23c |
------------------------------------
| commit | d10d0c9 |
| date | 21:01 06-07-2020 |
| message | Fix bug |
|
|
V
| commit | 1c9a23c | | commit | c87343a |
| date | 21:05 06-07-2020 | | date | 20:49 06-07-2020 |
| message | Crazy idea | | message | Add readme |
\ /
\ /
\ /
V V
| commit | 9c33a20 |
| date | 20:43 06-07-2020 |
| message | Initial commit |
Supongamos que hemos decidido integrar los cambios de la rama idea
a master
, así que cambiamos de rama y ejecutamos un merge:
git checkout master
git merge idea
Cambia el diagrama para representar el nuevo estado del repositorio: tanto el grafo de commits como la tabla de branches pueden cambiar.
------------------------------------
| current | branch | commit |
------------------------------------
| * | master | 80cca3c |
| | idea | 1c9a23c |
------------------------------------
| commit | 80cca3c |
| date | 21:35 06-07-2020 |
| message | Merge idea |
/ |
/ |
/ |
/ |
/ V
/ | commit | d10d0c9 |
/ | date | 21:01 06-07-2020 |
/ | message | Fix bug |
/
/ |
/ |
V V
| commit | 1c9a23c | | commit | c87343a |
| date | 21:05 06-07-2020 | | date | 20:49 06-07-2020 |
| message | Crazy idea | | message | Add readme |
\ /
\ /
\ /
V V
| commit | 9c33a20 |
| date | 20:43 06-07-2020 |
| message | Initial commit |
Nos hemos bebido un par de botellas de vino y ejecutamos
git reset --hard master
Cambia el diagrama para representar el nuevo estado del repositorio: tanto el grafo de commits como la tabla de branches pueden cambiar.
------------------------------------
| current | branch | commit |
------------------------------------
| | master | d10d0c9 |
| * | idea | d10d0c9 |
------------------------------------
| commit | d10d0c9 |
| date | 21:01 06-07-2020 |
| message | Fix bug |
|
|
V
| commit | 1c9a23c | | commit | c87343a |
| date | 21:05 06-07-2020 | | date | 20:49 06-07-2020 |
| message | Crazy idea | | message | Add readme |
\ /
\ /
\ /
V V
| commit | 9c33a20 |
| date | 20:43 06-07-2020 |
| message | Initial commit |
1c9a23c
pasa al orfanarium de los commits