Tengo problemas para entender cómo funciona una fusión de git en términos de las confirmaciones creadas por el proceso de fusión. He leído las secciones relevantes en pro git y el libro de la comunidad git, pero todavía estoy confundido.¿Cómo maneja git commits en una combinación?
Considere este escenario: Tengo un "origen" repositorio git:
master
|
a0--a1--a2--a3
\
-b0--b1
|
branch2
I clonar este repo a un acuerdo de recompra local y luego trabajar solamente en el repositorio local. En branch2, hice un "maestro de combinación git". Ahora mi repo local, se ve así:
master/origin/master
|
a0--a1--a2--a3
\ \
-b0--b1-----merge
| |
origin/branch2 |
branch2
Así la fusión creados 1 cometen, "fusionar", después de que el "b1" comprometerse. "Git log" para BRANCH2 muestra la gráfica esperada:
> git log branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
|\
| * 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
| * 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
| * 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
* | 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* | 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
|/
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
Además, si voy a cometer uno antes de que el actual jefe, llego a la b1 cometer, como se esperaba. (siga la línea branch2 en el gráfico y retroceda 1 commit)
> git log branch2~ --graph --pretty=oneline --decorate
* 99955f66843df51fb9d40c7797156c32cad57415 (origin/branch2) b1
* 30ca9b6363558322f2bb7810d75cda0d9c2ba3e0 b0
* 76a7c6d0eb54a9580841115ff2c3429360ab2ac9 a0
Aquí viene mi confusión. Todavía no he llevado mis cambios al origen, pero cuando hago un "estado de git", git dice que mi branch2 local está por delante del origen/branch2 por 4 commits. Pensé que la fusión solo dio como resultado 1 nueva confirmación de "fusión", como se ve en el gráfico/diagramas anterior. ¿Por qué 4?
> git status
# On branch branch2
# Your branch is ahead of 'origin/branch2' by 4 commits.
#
nothing to commit (working directory clean)
Además, haciendo un "git log" de origen/BRANCH2 a BRANCH2 4 muestra el cometa en lugar de la 1 que esperaba (pasando de "B1" a "fusionar").
> git log origin/branch2..branch2 --graph --pretty=oneline --decorate
* a7b69fc6759e1dd5463bab379ce101a6ad026c7b (HEAD, branch2) Merge branch 'master' into branch2
* 482e4026f05e33395a9fc3c87f50a746f692406a (origin/master, origin/HEAD, master) a3
* 8de57bdea2d316073af3b7055f8c28c56004ce94 a2
* 1e991047996aad269f2c01b9a0b9a7d8293096a1 a1
entiendo las 4 cometa, está el 3 de maestro (a1, a2, a3) que la fusión se supone que debe llevar a la rama 2, además de la "combinación" comprometerse. Pero, ¿por qué el gráfico no lo muestra de esa manera? Si lo hace, se vería así:
master/origin/master
|
a0--a1--a2--a3-----------
\ \
-b0--b1--a1'--a2'--a3'--merge
| |
origin/branch2 |
branch2
Y branch2 ~ me llevaría a a3 'en lugar de b1.
Gracias de antemano por cualquier ayuda.
a1, a2, a3 y merge simplemente no son parte de origin/branch2, es por eso que le tiró 4 commits. –
Si desea tener los cambios de la combinación como una única confirmación, puede usar 'git merge --squash'. – hammar