remota - ver ramas git




La mejor(y más segura) forma de combinar una rama git en master (6)

Se crea una nueva rama del master , lo llamamos test .

Hay varios desarrolladores que se comprometen a master o crear otras ramas y luego se fusionan en el master .

Digamos que el trabajo en la test demora varios días y desea mantener la test continuamente actualizada con los confirmaciones dentro del master .

Haría git pull origin master desde test .

Pregunta 1: ¿Es este el enfoque correcto? Otros desarrolladores podrían haber trabajado fácilmente en los mismos archivos que yo he trabajado por cierto.

Mi trabajo en la test está terminado y estoy listo para fusionarlo de nuevo para master . Aquí están las dos maneras en que puedo pensar:

UNA:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

SEGUNDO:

git checkout test
git pull origin master
git checkout master
git merge test

No estoy usando --rebase porque, según tengo entendido, rebase obtendrá los cambios de master y stack mine además de que podría sobrescribir los cambios que otras personas hicieron.

Pregunta 2: ¿Cuál de estos dos métodos es correcto? ¿Cuál es la diferencia allí?

El objetivo de todo esto es mantener mi rama de test actualizada con las cosas que suceden en el master y más tarde podría fusionarlas de nuevo con el master con la esperanza de mantener la línea de tiempo lo más lineal posible.


Además de la respuesta de KingCrunches , sugiero utilizar

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

Es posible que haya realizado muchas confirmaciones en la otra rama, que solo debe ser una confirmación en la rama maestra. Para mantener el historial de confirmación lo más limpio posible, es posible que desee aplastar todas sus confirmaciones de la rama de prueba en una confirmación en la rama maestra (vea también: Git: ¿Aplastar o no aplastar? ). Luego también puedes reescribir el mensaje de confirmación a algo muy expresivo. Algo que es fácil de leer y entender, sin profundizar en el código.

edición: usted podría estar interesado en

Así que en GitHub, termino haciendo lo siguiente para una rama de mybranch :

Recibe lo último de origen

$ git checkout master
$ git pull origin master

Encuentra el hash base de fusión:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

Ahora asegúrese de que solo la primera es la pick , el resto es s :

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

A continuación, elija un mensaje de confirmación muy bueno y presione para GitHub. Haga la solicitud de extracción entonces.

Después de la combinación de la solicitud de extracción, puede eliminarla localmente:

$ git branch -d mybranch

y en GitHub

$ git push origin :mybranch

Como yo haria esto

git checkout master
git pull origin master
git merge test
git push origin master

Si tengo una sucursal local desde una remota, no me siento cómodo combinando otras sucursales que esta con la remota. Además, no presionaría mis cambios, hasta que esté satisfecho con lo que quiero promover y tampoco presionaría las cosas, eso es solo para mí y para mi repositorio local. En su descripción parece, esa test es solo para usted? Así que no hay razón para publicarlo.

git siempre trata de respetar los cambios tuyos y de otros, y así lo hará --rebase . No creo que pueda explicarlo adecuadamente, así que eche un vistazo al libro de Git - Rebasar o listo para git: Introducción a la rebasada para una pequeña descripción. Es una característica bastante genial


Este es el flujo de trabajo que uso en mi trabajo con el equipo. El escenario es como lo describiste. Primero, cuando termine de trabajar en la test me reagrupo con el maestro para extraer todo lo que se haya agregado al maestro durante el tiempo que he estado trabajando en la rama de test .

git pull -r upstream master

Esto llevará a los cambios al maestro ya que bifurcó la rama de test y los aplicó, y luego aplicará los cambios que haya realizado para probar "sobre" el estado actual del maestro. Puede haber conflictos aquí, si las otras personas han realizado cambios en los mismos archivos que ha editado en la prueba. Si los hay, deberás arreglarlos manualmente, y confirmar. Una vez que haya hecho eso, será bueno cambiar a la rama maestra y combinar la test sin problemas.


Hilo viejo, pero no he encontrado mi forma de hacerlo. Podría ser valioso para alguien que trabaja con rebase y desea combinar todos los compromisos de una rama en la parte superior del maestro. Si hay un conflicto en el camino, puede resolverlos para cada compromiso.

Obtener Master y sucursal al día:

git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>

Fusionar rama sobre maestro:

git checkout <branch_name>
git rebase master
git add .
git rebase continue

Si te topas con conflictos durante la Rebase:

En primer lugar, resolver el conflicto en el archivo. Entonces:

git add .
git rebase --continue

Una vez finalizado el rebase, rebase rama en la parte superior del maestro

git checkout master
git rebase <branch_name>

Yo usaría el método de rebase. Sobre todo porque refleja perfectamente su caso semánticamente, es decir. lo que quiere hacer es actualizar el estado de su rama actual y "simular" como si estuviera basado en lo último.

Así que, sin siquiera echarle un vistazo al master , yo:

git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here

Por supuesto, solo recuperar el origen no actualiza el estado local de su master (ya que no realiza una fusión), pero está perfectamente bien para nuestro propósito: queremos evitar el cambio, para ahorrar tiempo.


git checkout master
git pull origin master
# Merge branch test into master
git merge test

Después de fusionar, si se cambia el archivo, cuando lo fusione se producirá el error "Resolver conflicto"

Entonces, primero debe resolver todos sus conflictos, luego debe volver a confirmar todos los cambios y luego presionar

git push origin master

Esto es mejor hacer quién ha hecho cambios en la rama de prueba, porque sabía qué cambios ha hecho.







git-merge