You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/basic-branching-and-merging.asc
+5-5
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ En este momento, recibes una llamada avisándote de un problema crítico que has
12
12
. Vuelves a la rama de producción original.
13
13
. Creas una nueva rama para el problema crítico y lo resuelves trabajando en ella.
14
14
. Tras las pertinentes pruebas, fusionas (merge) esa rama y la envías (push) a la rama de producción.
15
-
. Vuelves a la rama del tema en que andabas antes de la llamada y continuas tu trabajo.
15
+
. Vuelves a la rama del tema en que andabas antes de la llamada y continúas tu trabajo.
16
16
17
17
[[r_basic_branching]]
18
18
==== Procedimientos Básicos de Ramificación
@@ -23,7 +23,7 @@ Imagina que estas trabajando en un proyecto y tienes un par de confirmaciones (c
23
23
.Un registro de confirmaciones corto y sencillo
24
24
image::images/basic-branching-1.png[Un registro de confirmaciones corto y sencillo.]
25
25
26
-
Decides trabajar en el problema #53, según el sistema que tu compañía utiliza para llevar seguimiento de los problemas.
26
+
Decides trabajar en el problema #53, según el sistema que tu compañía utiliza para llevar el seguimiento de los problemas.
27
27
Para crear una nueva rama y saltar a ella, en un solo paso, puedes utilizar el comando `git checkout` con la opción `-b`:
28
28
29
29
[source,console]
@@ -32,7 +32,7 @@ $ git checkout -b iss53
32
32
Switched to a new branch "iss53"
33
33
----
34
34
35
-
Esto es un atajo a:
35
+
Esto es un atajo para:
36
36
37
37
[source,console]
38
38
----
@@ -59,7 +59,7 @@ Entonces, recibes una llamada avisándote de otro problema urgente en el sitio w
59
59
Al usar Git, no necesitas mezclar el nuevo problema con los cambios que ya habías realizado sobre el problema #53; ni tampoco perder tiempo revirtiendo esos cambios para poder trabajar sobre el contenido que está en producción.
60
60
Basta con saltar de nuevo a la rama `master` y continuar trabajando a partir de allí.
61
61
62
-
Pero, antes de poder hacer eso, hemos de tener en cuenta que si tenemos cambios aún no confirmados en el directorio de trabajo o en el área de preparación, Git no nos permitirá saltar a otra rama con la que podríamos tener conflictos.
62
+
Pero, antes de poder hacer eso, hemos de tomar en cuenta que si tenemos cambios aún no confirmados en el directorio de trabajo o en el área de preparación, Git no nos permitirá saltar a otra rama con la que podríamos tener conflictos.
63
63
Lo mejor es tener siempre un estado de trabajo limpio y despejado antes de saltar entre ramas.
64
64
Y, para ello, tenemos algunos procedimientos (stash y corregir confirmaciones), que vamos a ver más adelante en <<ch07-git-tools#r_git_stashing>>.
65
65
Por ahora, como tenemos confirmados todos los cambios, podemos saltar a la rama `master` sin problemas:
@@ -90,7 +90,7 @@ $ git commit -a -m 'fixed the broken email address'
90
90
.Rama `hotfix` basada en la rama `master` original
91
91
image::images/basic-branching-4.png[Rama `hotfix` basada en la rama `master` original.]
92
92
93
-
Puedes realizar las pruebas oportunas, asegurarte que la solución es correcta, e incorporar los cambios a la rama `master` para ponerlos en producción.
93
+
Puedes realizar las pruebas oportunas, asegurarte de que la solución es correcta, e incorporar los cambios a la rama `master` para ponerlos en producción.
94
94
Esto se hace con el comando `git merge`:(((git commands, merge)))
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/branch-management.asc
+3-3
Original file line number
Diff line number
Diff line change
@@ -29,7 +29,7 @@ $ git branch -v
29
29
30
30
Otra opción útil para averiguar el estado de las ramas, es filtrarlas y mostrar solo aquellas que han sido fusionadas (o que no lo han sido) con la rama actualmente activa.
31
31
Para ello, Git dispone de las opciones `--merged` y `--no-merged`.
32
-
Si deseas ver las ramas que han sido fusionadas en la rama activa, puedes lanzar el comando `git branch --merged`:
32
+
Si deseas ver las ramas que han sido fusionadas con la rama activa, puedes lanzar el comando `git branch --merged`:
33
33
34
34
[source,console]
35
35
----
@@ -50,7 +50,7 @@ $ git branch --no-merged
50
50
----
51
51
52
52
Esto nos muestra la otra rama del proyecto.
53
-
Debido a que contiene trabajos sin fusionar, al intentarla borrarla con `git branch -d`, el comando nos dará un error:
53
+
Debido a que contiene trabajos sin fusionar, al intentar borrarla con `git branch -d`, el comando nos dará un error:
54
54
55
55
[source,console]
56
56
----
@@ -59,4 +59,4 @@ error: The branch 'testing' is not fully merged.
59
59
If you are sure you want to delete it, run 'git branch -D testing'.
60
60
----
61
61
62
-
Si realmente deseas borrar la rama, y perder el trabajo contenido en ella, puedes forzar el borrado con la opción `-D`; tal y como indica el mensaje de ayuda.
62
+
Si realmente deseas borrar la rama y perder el trabajo contenido en ella, puedes forzar el borrado con la opción `-D`; tal y como indica el mensaje de ayuda.
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/nutshell.asc
+6-6
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ En este momento, el repositorio de Git contendrá cinco objetos: un "blob" para
25
25
.Una confirmación y sus árboles
26
26
image::images/commit-and-tree.png[Una confirmación y sus árboles.]
27
27
28
-
Si haces más cambios y vuelves a confirmar, la siguiente confirmación guardará un apuntador su confirmación precedente.
28
+
Si haces más cambios y vuelves a confirmar, la siguiente confirmación guardará un apuntador a su confirmación precedente.
29
29
30
30
.Confirmaciones y sus predecesoras
31
31
image::images/commits-and-parents.png[Confirmaciones y sus predecesoras.]
@@ -37,7 +37,7 @@ En cada confirmación de cambios que realicemos, la rama irá avanzando automát
37
37
38
38
[NOTE]
39
39
====
40
-
La rama ``master'' en Git no es una rama especial.(((master)))
40
+
La rama ``master'' en Git, no es una rama especial.(((master)))
41
41
Es como cualquier otra rama.
42
42
La única razón por la cual aparece en casi todos los repositorios es porque es la que crea por defecto el comando `git init` y la gente no se molesta en cambiarle el nombre.
43
43
====
@@ -67,7 +67,7 @@ image::images/two-branches.png[Dos ramas apuntando al mismo grupo de confirmacio
67
67
Y, ¿cómo sabe Git en qué rama estás en este momento?
68
68
Pues..., mediante un apuntador especial denominado HEAD.
69
69
Aunque es preciso comentar que este HEAD es totalmente distinto al concepto de HEAD en otros sistemas de control de cambios como Subversion o CVS.
70
-
En Git, es simplemente el apuntador a la rama local en la que tú estés en ese momento, en este caso la rama `master`; pues el comando `git branch` solamente crea una nueva rama, y no salta a dicha rama.
70
+
En Git, es simplemente el apuntador a la rama local en la que tú estés en ese momento, en este caso la rama `master`; pues el comando `git branch` solamente crea una nueva rama, pero no salta a dicha rama.
71
71
72
72
.Apuntador HEAD a la rama donde estás actualmente
73
73
image::images/head-to-master.png[Apuntador HEAD a la rama donde estás actualmente.]
@@ -102,7 +102,7 @@ Esto mueve el apuntador HEAD a la rama `testing`.
102
102
image::images/head-to-testing.png[El apuntador HEAD apunta a la rama actual.]
103
103
104
104
¿Cuál es el significado de todo esto?
105
-
Bueno... lo veremos tras realizar otra confirmación de cambios:
105
+
Bueno..., lo veremos tras realizar otra confirmación de cambios:
106
106
107
107
[source,console]
108
108
----
@@ -126,7 +126,7 @@ image::images/checkout-master.png[HEAD apunta a otra rama cuando hacemos un salt
126
126
127
127
Este comando realiza dos acciones:
128
128
Mueve el apuntador HEAD de nuevo a la rama `master`, y revierte los archivos de tu directorio de trabajo; dejándolos tal y como estaban en la última instantánea confirmada en dicha rama `master`.
129
-
Esto supone que los cambios que hagas desde este momento en adelante divergirán de la antigua versión del proyecto.
129
+
Esto supone que los cambios que hagas desde este momento en adelante, divergirán de la antigua versión del proyecto.
130
130
Básicamente, lo que se está haciendo es rebobinar el trabajo que habías hecho temporalmente en la rama `testing`; de tal forma que puedas avanzar en otra dirección diferente.
131
131
132
132
[NOTE]
@@ -173,7 +173,7 @@ Crear una nueva rama es tan rápido y simple como escribir 41 bytes en un archiv
173
173
174
174
Esto contrasta fuertemente con los métodos de ramificación usados por otros sistemas de control de versiones, en los que crear una rama nueva supone el copiar todos los archivos del proyecto a un directorio adicional nuevo.
175
175
Esto puede llevar segundos o incluso minutos, dependiendo del tamaño del proyecto; mientras que en Git el proceso es siempre instantáneo.
176
-
Y, además, debido a que se almacenan también los nodos padre para cada confirmación, el encontrar las bases adecuadas para realizar una fusión entre ramas es un proceso automático y generalmente sencillo de realizar.
176
+
Y además, debido a que se almacenan también los nodos padre para cada confirmación, el encontrar las bases adecuadas para realizar una fusión entre ramas es un proceso automático y generalmente sencillo de realizar.
177
177
Animando así a los desarrolladores a utilizar ramificaciones frecuentemente.
178
178
179
179
Vamos a ver el por qué merece la pena hacerlo así.
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/rebasing.asc
+11-11
Original file line number
Diff line number
Diff line change
@@ -18,9 +18,9 @@ Realiza una fusión a tres bandas entre las dos últimas instantáneas de cada r
18
18
.Fusionar una rama para integrar el registro de trabajos divergentes
19
19
image::images/basic-rebase-2.png[Fusionar una rama para integrar el registro de trabajos divergentes.]
20
20
21
-
Sin embargo, también hay otra forma de hacerlo: puedes coger los cambios introducidos en C3 y reaplicarlos encima de C4.
21
+
Sin embargo, también hay otra forma de hacerlo: puedes capturar los cambios introducidos en C3 y reaplicarlos encima de C4.
22
22
Esto es lo que en Git llamamos _reorganizar_ (_rebasing_, en inglés).
23
-
Con el comando `git rebase`, puedes coger todos los cambios confirmados en una rama, y reaplicarlos sobre otra.(((git commands, rebase)))
23
+
Con el comando `git rebase`, puedes capturar todos los cambios confirmados en una rama y reaplicarlos sobre otra.(((git commands, rebase)))
24
24
25
25
Por ejemplo, puedes lanzar los comandos:
26
26
@@ -32,7 +32,7 @@ First, rewinding head to replay your work on top of it...
32
32
Applying: added staged command
33
33
----
34
34
35
-
Haciendo que Git vaya al ancestro común de ambas ramas (donde estás actualmente y de donde quieres reorganizar), saque las diferencias introducidas por cada confirmación en la rama donde estás, guarde esas diferencias en archivos temporales, reinicie (reset) la rama actual hasta llevarla a la misma confirmación en la rama de donde quieres reorganizar, y, finalmente, vuelva a aplicar ordenadamente los cambios.
35
+
Haciendo que Git vaya al ancestro común de ambas ramas (donde estás actualmente y de donde quieres reorganizar), saque las diferencias introducidas por cada confirmación en la rama donde estás, guarde esas diferencias en archivos temporales, reinicie (reset) la rama actual hasta llevarla a la misma confirmación que la rama de donde quieres reorganizar, y finalmente, vuelva a aplicar ordenadamente los cambios.
36
36
37
37
.Reorganizando sobre C3 los cambios introducidos en C4
38
38
image::images/basic-rebase-3.png[Reorganizando sobre C3 los cambios introducidos en C4.]
@@ -56,7 +56,7 @@ Habitualmente, optarás por esta vía cuando quieras estar seguro de que tus con
56
56
En casos como esos, puedes trabajar sobre una rama y luego reorganizar lo realizado en la rama `origin/master` cuando lo tengas todo listo para enviarlo al proyecto principal.
57
57
De esta forma, la persona que mantiene el proyecto no necesitará hacer ninguna integración con tu trabajo; le bastará con un avance rápido o una incorporación limpia.
58
58
59
-
Cabe destacar que la instantánea (snapshot) apuntada por la confirmación (commit) final, tanto si es producto de una reorganización (rebase) como si lo es de una fusión (merge), es exactamente la misma instantánea; lo único diferente es el historial.
59
+
Cabe destacar que, la instantánea (snapshot) apuntada por la confirmación (commit) final, tanto si es producto de una reorganización (rebase) como si lo es de una fusión (merge), es exactamente la misma instantánea; lo único diferente es el historial.
60
60
La reorganización vuelve a aplicar cambios de una rama de trabajo sobre otra rama, en el mismo orden en que fueron introducidos en la primera, mientras que la fusión combina entre sí los dos puntos finales de ambas ramas.
61
61
62
62
==== Algunas Reorganizaciones Interesantes
@@ -143,7 +143,7 @@ Si sigues esta recomendación, no tendrás problemas.
143
143
Pero si no lo haces, la gente te odiará y serás despreciado por tus familiares y amigos.
144
144
145
145
Cuando reorganizas algo, estás abandonando las confirmaciones de cambio ya creadas y estás creando unas nuevas; que son similares, pero diferentes.
146
-
Si envias (push) confirmaciones (commits) a alguna parte, y otros las recogen (pull) de allí; y después vas tú y las reescribes con `git rebase` y las vuelves a enviar (push); tus colaboradores tendrán que refusionar (re-merge) su trabajo y todo se volverá tremendamente complicado cuando intentes recoger (pull) su trabajo de vuelta sobre el tuyo.
146
+
Si envías (push) confirmaciones (commits) a alguna parte, y otros las recogen (pull) de allí; y después vas tú y las reescribes con `git rebase` y las vuelves a enviar (push); tus colaboradores tendrán que refusionar (re-merge) su trabajo y todo se volverá tremendamente complicado cuando intentes recoger (pull) su trabajo de vuelta sobre el tuyo.
147
147
148
148
Veamos con un ejemplo como reorganizar trabajo que has hecho público puede causar problemas.
149
149
Imagínate que haces un clon desde un servidor central, y luego trabajas sobre él.
@@ -162,7 +162,7 @@ A continuación, la persona que había llevado cambios al servidor central decid
162
162
Tu te traes (fetch) esos nuevos cambios desde el servidor.
163
163
164
164
[[r_pre_merge_rebase_work]]
165
-
.Alguien envio (push) confirmaciones (commits) reorganizadas, abandonando las confirmaciones en las que tu habías basado tu trabajo
165
+
.Alguien envió (push) confirmaciones (commits) reorganizadas, abandonando las confirmaciones en las que tu habías basado tu trabajo
166
166
image::images/perils-of-rebasing-3.png[Alguien envií (push) confirmaciones (commits) reorganizadas, abandonando las confirmaciones en las que tu habías basado tu trabajo.]
167
167
168
168
Ahora los dos están en un aprieto.
@@ -206,7 +206,7 @@ También puedes simplificar el proceso si ejecutas `git pull --rebase` en vez de
206
206
207
207
Si sueles utilizar `git pull` y quieres que la opción `--rebase` esté activada por defecto, puedes asignar el valor de configuración `pull.rebase` haciendo algo como esto `git config --global pull.rebase true`.
208
208
209
-
Si consideras la reorganización como una manera de limpiar tu trabajo y tus confirmaciones antes de enviarlas (push), y si solo reorganizas confirmaciones (commits) que nunca han estado disponibles públicamente, no tendrás problemas.
209
+
Si consideras la reorganización como una manera de limpiar tu trabajo y tus confirmaciones antes de enviarlas (push), y si sólo reorganizas confirmaciones (commits) que nunca han estado disponibles públicamente, no tendrás problemas.
210
210
Si reorganizas (rebase) confirmaciones (commits) que ya estaban disponibles públicamente y la gente había basado su trabajo en ellas, entonces prepárate para tener problemas, frustrar a tu equipo y ser despreciado por tus compañeros.
211
211
212
212
Si tu compañero o tú ven que aun así es necesario hacerlo en algún momento, asegúrense que todos sepan que deben ejecutar `git pull --rebase` para intentar aliviar en lo posible la frustración.
@@ -221,14 +221,14 @@ Para algunos, el historial de confirmaciones de tu repositorio es *un registro d
221
221
Un documento histórico, valioso por sí mismo y que no debería ser alterado.
222
222
Desde este punto de vista, cambiar el historial de confirmaciones es casi como blasfemar; estarías _mintiendo_ sobre lo que en verdad ocurrió.
223
223
¿Y qué pasa si hay una serie desastrosa de fusiones confirmadas?
224
-
Nada. Así fue como ocurrió y el repositorio debería tener un registro de esto para la posteridad.
224
+
Nada. Así fué como ocurrió y el repositorio debería tener un registro de esto para la posteridad.
225
225
226
-
La otra forma de verlo es que el historial de confirmaciones es *la historia de cómo se hizo tu proyecto.*
226
+
La otra forma de verlo puede ser que, el historial de confirmaciones es *la historia de cómo se hizo tu proyecto.*
227
227
Tú no publicarías el primer borrador de tu novela, y el manual de cómo mantener tus programas también debe estar editado con mucho cuidado.
228
228
Esta es el área que utiliza herramientas como `rebase` y `filter-branch` para contar la historia de la mejor manera para los futuros lectores.
229
229
230
-
Ahora, sobre qué es mejor si fusionar o reorganizar: verás que la respuesta no es tan sencilla.
230
+
Ahora, sobre si es mejor fusionar o reorganizar: verás que la respuesta no es tan sencilla.
231
231
Git es una herramienta poderosa que te permite hacer muchas cosas con tu historial, y cada equipo y cada proyecto es diferente.
232
232
Ahora que conoces cómo trabajan ambas herramientas, será cosa tuya decidir cuál de las dos es mejor para tu situación en particular.
233
233
234
-
Normalmente, la manera de sacar lo mejor de ambas es reorganizar tu trabajo local, que aun no has compartido, antes de enviarlo a algún lugar; pero nunca reorganizar nada que ya haya sido compartido.
234
+
Normalmente, la manera de sacar lo mejor de ambas es reorganizar tu trabajo local, que aún no has compartido, antes de enviarlo a algún lugar; pero nunca reorganizar nada que ya haya sido compartido.
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/remote-branches.asc
+4-4
Original file line number
Diff line number
Diff line change
@@ -44,7 +44,7 @@ Puedes denominar `teamone` a este remoto al asignarle este nombre a la URL.
44
44
.Añadiendo otro servidor como remoto
45
45
image::images/remote-branches-4.png[Añadiendo otro servidor como remoto.]
46
46
47
-
Ahora, puedes usar el comando `git fetch teamone` para recuperar todo el contenido del remoto `teamone` que tú no tenias.
47
+
Ahora, puedes usar el comando `git fetch teamone` para recuperar todo el contenido del remoto `teamone` que tú no tenías.
48
48
Debido a que dicho servidor es un subconjunto de los datos del servidor `origin` que tienes actualmente, Git no recupera (fetch) ningún dato; simplemente prepara una rama remota llamada `teamone/master` para apuntar a la confirmación (commit) que `teamone` tiene en su rama `master`.
49
49
50
50
.Seguimiento de la rama remota a través de `teamone/master`
@@ -163,7 +163,7 @@ Branch serverfix set up to track remote branch serverfix from origin.
163
163
Cuando tienes asignada una rama de seguimiento, puedes hacer referencia a ella mediante `@{upstream}` o mediante el atajo `@{u}`. De esta manera, si estás en la rama `master` y esta sigue a la rama `origin/master`, puedes hacer algo como `git merge @{u}` en vez de `git merge origin/master`.(((+++@{u}+++)))(((+++@{upstream}+++)))
164
164
====
165
165
166
-
Si quieres ver las ramas de seguimiento que tienes asignado, puedes usar la opción `-vv` con `git branch`. Esto listará tus ramas locales con más información, incluyendo a qué sigue cada rama y si tu rama local está por delante, por detrás o ambas.
166
+
Si quieres ver las ramas de seguimiento que tienes asignadas, puedes usar la opción `-vv` con `git branch`. Esto listará tus ramas locales con más información, incluyendo a qué sigue cada rama y si tu rama local está por delante, por detrás o ambas.
167
167
168
168
[source,console]
169
169
----
@@ -183,7 +183,7 @@ Es importante destacar que estos números se refieren a la última vez que traji
183
183
==== Traer y Fusionar
184
184
185
185
(((pulling)))
186
-
A pesar de que el comando `git fetch` trae todos los cambios del servidor que no tienes, este no modifica tu directorio de trabajo.
186
+
A pesar de que el comando `git fetch` trae todos los cambios que no tienes del servidor, este no modifica tu directorio de trabajo.
187
187
Simplemente obtendrá los datos y dejará que tú mismo los fusiones.
188
188
Sin embargo, existe un comando llamado `git pull`, el cuál básicamente hace `git fetch` seguido por `git merge` en la mayoría de los casos.
189
189
Si tienes una rama de seguimiento configurada como vimos en la última sección, bien sea asignándola explícitamente o creándola mediante los comandos `clone` o `checkout`, `git pull` identificará a qué servidor y rama remota sigue tu rama actual, traerá los datos de dicho servidor e intentará fusionar dicha rama remota.
@@ -204,4 +204,4 @@ To https://github.com/schacon/simplegit
204
204
- [deleted] serverfix
205
205
----
206
206
207
-
Básicamente lo que hace es eliminar el apuntador del servidor. El servidor Git suele mantener los datos por un tiempo hasta que el recolector de basura se ejecute, de manera que si la has borrado accidentalmente, suele ser fácil recuperarla.
207
+
Básicamente, lo que hace es eliminar el apuntador del servidor. El servidor Git suele mantener los datos por un tiempo hasta que el recolector de basura se ejecute, de manera que si la has borrado accidentalmente, suele ser fácil recuperarla.
0 commit comments