Tengo una rama llamada dmgr2 (desarrollo) y quiero extraer de la rama maestra (sitio en vivo) e incorporar todos los cambios en mi rama de desarrollo. ¿Hay una mejor manera de hacer esto? Esto es lo que había planeado hacer, después de confirmar los cambios:
git checkout dmgr2
git pull origin master
esto debería llevar los cambios en vivo a mi rama de desarrollo, ¿o me equivoco?

devrama con agit checkout dev. Entoncesgit pull --rebase origin master. Si tienes suerte, no habrá conflictos y el desarrollador tendrá los últimos cambios de master.Respuestas:
Los pasos que enumeró funcionarán, pero hay una forma más larga que le brinda más opciones:
El
fetchcomando se puede hacer en cualquier momento antes delmerge, es decir, puede intercambiar el orden de la búsqueda y el pago, porquefetchsimplemente va al control remoto nombrado (origin) y le dice: "dame todo lo que tienes que no tengo ", es decir, todos los commits en todas las ramas. Se copian en su repositorio, pero reciben el nombreorigin/branchde cualquier rama nombradabranchen el control remoto.En este punto se puede utilizar cualquier espectador (
git log,gitk, etc.) para ver "lo que tienen" que no lo hace, y viceversa. A veces esto solo es útil para Warm Fuzzy Feelings ("ah, sí, eso es de hecho lo que quiero") y otras veces es útil para cambiar estrategias por completo ("whoa, todavía no quiero ESO").Finalmente, el
mergecomando toma el commit dado, que puede nombrar comoorigin/master, y hace lo que sea necesario para incorporar ese commit y sus antepasados, a cualquier rama en la que se encuentre cuando ejecuta elmerge. Puede insertar--no-ffo--ff-onlyevitar un avance rápido, o fusionar solo si el resultado es un avance rápido, si lo desea.Cuando usas la secuencia:
el
pullcomando indica a git que se ejecutegit fetch, y luego el equivalente moral degit merge origin/master. Entonces, esto es casi lo mismo que hacer los dos pasos a mano, pero hay algunas diferencias sutiles que probablemente no le preocupan demasiado. (En particular, elfetchpaso ejecutado solopulltrae , y no actualiza la referencia en su repositorio: 1 cualquier nueva confirmación termina referida solo por la referencia especial ).origin/masterFETCH_HEADSi usa la secuencia más explícita
git fetch origin(luego, opcionalmente, mire a su alrededor) y luegogit merge origin/master, también puede actualizar su propio localmastercon el control remoto, con solo unafetchejecución en la red:por ejemplo.
1 Esta segunda parte se ha cambiado, digo "arreglado", en git 1.8.4, que ahora actualiza las referencias de "rama remota" de manera oportunista. (Fue, como dicen las notas de la versión, una decisión de diseño deliberada para omitir la actualización, pero resulta que más personas prefieren que git lo actualice. Si desea que la antigua rama remota SHA-1, por defecto, se guarde en y, por lo tanto, recuperable del reflog. Esto también habilita una nueva característica git 1.9 / 2.0 para encontrar rebases ascendentes).
fuente
git checkoutnormalmente no es destructivo y normalmente no hay razón para deshacer un archivogit fetch, por lo que parece que estás preguntando cómo cancelar una confirmación de fusión. La respuesta es la misma que para otras confirmaciones: ya seagit resetogit revert. Para los cambios no publicadosgit resetsuele ser el mejor método; para los cambios que otros ya tienen,git revertpuede ser mejor, pero vea los consejos de Linus Torvald para revertir una fusión: kernel.org/pub/software/scm/git/docs/howto/…gitk,git log --graphcon o sin--oneline, etc.) y se puedegit showogit show -muna combinación de cometer, o el usogit diff. En todos estos casos, está especificando el programa a medida que ingresa el comando en la línea de comandos.Situación : trabajando en mi sucursal local, pero me encanta mantener actualizaciones en la sucursal de desarrollo nombrada
dev.Solución : por lo general, prefiero hacer:
fuente
Esto funcionó para mí. Para obtener el último código de maestro a mi sucursal
git rebase origin/masterfuente
git fetch originprimero.Escenario :
Tengo actualización maestra y actualización de mi sucursal, quiero que mi sucursal haga un seguimiento de la maestra con rebase, para mantener todo el historial rastreado correctamente, llamemos a mi sucursal Mybranch
Solución :
(corrección a la última etapa, por cortesía de Tzachi Cohen, usando "-f" obliga a git a "actualizar el historial" en el servidor)
ahora la rama debe estar alineada con el maestro y el rebase, también con la actualización remota, por lo que en el registro de git no hay "detrás" o "adelante", solo necesita eliminar todos los archivos de conflicto local * .orig para mantener la carpeta "limpia"
fuente