Recientemente participé en un proyecto de GitHub. Hice lo siguiente:
Bifuré el repositorio original, lo cloné en mi máquina local, hice una rama para corregir el error existente, corrigió el error en esa rama, empujé esa rama a mi repositorio, envié una solicitud de extracción al autor del repositorio para fusionar mi rama de corrección a su rama maestra.
Fue la primera vez que me comprometí con el código de otro, así que no sé qué hacer. Ahora mi solicitud de extracción se ha fusionado con el repositorio / proyecto original del autor.
¿Qué debería hacer después? ¿Debo eliminar la rama? ¿Debería fusionar la rama? ¿Algo más?
Información adicional:
El proyecto original tiene una sola rama.
También tengo un conjunto ascendente para obtener las últimas actualizaciones del repositorio original. (Lo hice así) :
git remote add upstream https://path/to/original/repo.git
Y recibo actualizaciones como esta:
git fetch upstream
:)
Respuestas:
Lo que debe hacer a continuación es: continuar contribuyendo con nuevas funciones o corregir otros errores en sus propias ramas dedicadas (empujadas solo a su bifurcación).
Lo que significa que su tenedor permanece, pero las ramas dentro de su tenedor pueden ir y venir.
También puede eliminar la bifurcación si no planea contribuir más, pero eliminará la entrada correspondiente en 'Repositorios a los que contribuye' .
Es más fácil:
fix
rama (en realidad, ahora está eliminada para usted ) en su bifurcación (y en su repositorio clonado local: consulte " Eliminar una rama de Git tanto local como remotamente ")git pull upstream master
(simaster
fue la rama en la que se integró su corrección: la fusión será de avance rápido): no se necesita rebase en este punto.master
(ahora con la última versiónupstream master
).Sin embargo, nunca olvide un paso antes de enviar cualquier solicitud de extracción futura :
rebase primero su rama actual (
fix
) desde la rama de destino ascendente(
upstream
siendo el repositorio original que ha bifurcado: consulte " ¿Cuál es la diferencia entre el origen y el origen en github ")Antes de enviar cualquier cosa al repositorio original ("upstream"), debe asegurarse de que su trabajo se base en lo último de dicho repositorio original (o la solicitud de extracción no resultará en una combinación de avance rápido una vez aplicada de nuevo en
upstream
repositorio).Consulte, por ejemplo, " Flujo de trabajo para administrar solicitudes de extracción en repositorios compartidos en github ".
En otras palabras,
upstream
puede evolucionar (tener nuevas confirmaciones presionadas) mientras estás ocupado arreglando cosas. Necesita reproducir sus correcciones además del último trabajo de upstream para asegurarse de que sus confirmaciones sigan siendo compatibles con la última versión deupstream
.El OP Santosh Kumar pregunta en los comentarios :
Si no ha realizado ninguna corrección nueva desde su solicitud de extracción reciente, consulte más arriba (elimine y vuelva a crear una nueva rama
fix
sobre su actualizaciónmaster
).Si ha realizado más trabajo desde su solicitud de extracción, no me fusionaría
upstream
si quisiera hacer una nueva solicitud de extracción: extraería y reajustaría :De esa manera, todo mi nuevo trabajo local se reproduce sobre las
upstream
master
confirmaciones más recientes (obtenidas en mi repositorio local), suponiendo que esamaster
sea la rama de destino que integrará mi futura solicitud de extracción.Entonces puedo empujar mi trabajo local a '
origin
', que es mi bifurcación en GitHub deupstream
.Y desde mi bifurcación en GitHub, puedo hacer una solicitud de extracción de manera segura, sabiendo que solo agregará nuevas confirmaciones
upstream
sin necesidad de ninguna resolución de fusión: fusionar esas nuevas confirmaciones en elupstream
repositorio significará una combinación simple y rápida.A
git pull --rebase
sin especificar la rama sobre la que desea volver a establecer la base de su rama (actualmente verificada)fix
no funcionaría:Sí, puede especificar la rama que será el objetivo de la solicitud de extracción, por ejemplo '
master
'.Eso no eliminará su
fix
rama, pero la reproducirá en la parte superiormaster
obtenida en su repositorio.fuente
You asked to pull from the remote 'upstream', but did not specify a branch.
¿Debería añadirmaster
al fin? ¿Y qué hará esto ?, ¿eliminará mi rama de arreglo ?Primero, felicitaciones por su primera contribución a un proyecto en Github.
El flujo de trabajo habitual de Github es crear una nueva rama para cada problema que resuelva. De esa manera, el responsable del mantenimiento del repositorio principal puede decidir cuál de sus soluciones fusionar y cuál rechazar. Después de que una rama se fusionó en sentido ascendente, la rama ya no será necesaria y, por lo general, se puede eliminar.
fuente