git - remote - ¿cómo traemos los cambios del repositorio remoto?




¿Enviar el parche al proyecto Github sin clonar el repositorio a Github? (3)

Tengo un repositorio local que es una copia completa de un repositorio en Github. Hice un cambio que me gustaría contribuir al proyecto original.

¿Cómo puedo hacer esto sin volver a cargar mi proyecto en Github? No creo que abrir un problema sea la correcta.

Vi en ¿Cómo puedo aportar un parche a github? que debería dividir el proyecto, pero como mi repositorio local está "vinculado" al repositorio original de Github, no quiero estropearlo.

Entonces, si realmente no se recomienda compartir el parche de otra manera que no sea el fork, ¿cómo puedo simplemente bifurcar el proyecto original, fusionar mis cambios y luego compartirlos con el repositorio original?

Si elimino la bifurcación después de "confirmar" el cambio pero todavía no se ha aceptado, ¿desaparece mi confirmación?


Deberías bifurcar el proyecto, sí. Sin embargo, esto no significa que deba volver a clonar todo el contenido localmente .

Explicación: una forma simple de ver un repositorio de git es una gráfica de confirmaciones (está dirigida y es acíclica, pero eso es irrelevante para esta discusión); y todos los nodos de este gráfico, es decir, las confirmaciones, tienen un identificador único en todos los repositorios de git en el mundo . En cuanto a las ramas, son solo referencias simbólicas a un commit (en git parlance, una rama, o una etiqueta, se llama refspec ).

Además, nunca está vinculado a un repositorio remoto de ninguna manera. Lo único en lo que realmente estás "vinculado" es el gráfico de confirmación. Resulta que un repositorio remoto tiene un conjunto de refspecs (sucursales, etiquetas) ... que apunta a un gráfico de confirmación, que también tienen, a nadie le gustan las referencias colgantes. Cuando clonas un repositorio, obtienes el gráfico de confirmación (y los árboles asociados) y el conjunto de refspecs (es decir, ramas, etiquetas). Un refspec apunta a un árbol. Y eso es todo.

Esto significa lo siguiente:

  • tiene el repositorio github original: una gráfica de confirmaciones y árboles asociados, un conjunto de refspecs;
  • lo ha clonado localmente: el mismo gráfico de confirmaciones y árboles asociados, el mismo conjunto de refspecs;
  • ha comprometido cosas localmente: ha agregado en este gráfico y árboles asociados, y ha agregado un nuevo conjunto de refspecs.

OK, ahora haz lo siguiente:

  • clonar el repositorio original en github: el mismo gráfico de confirmaciones y árboles que el original; Los refspecs están aquí, solo precedidos por el nombre remoto, que es origin por defecto. ¿Y ahora qué?
  • en su repositorio local, agregue su fork como un control remoto ;
  • empujar a esa bifurcación (esto empujará los refspecs, y los árboles);
  • enviar una solicitud de extracción.

Agregar el tenedor como control remoto es tan "simple" como:

git remote add myfork [email protected]:youruser/theproject

Empuje su refspec (rama) a ella:

git push myfork mybranch

Y luego enviar una solicitud de extracción al autor original.

Debe tenerse en cuenta que, en teoría, puede agregar un control remoto a un repositorio git que no tenga ninguna relevancia con el repositorio "original": esto es simplemente que los dos gráficos de confirmación estarán completamente separados, sin embargo, el casos de uso para esto son raros


Sí, debe bifurcar el proyecto, pero no hay necesidad de clonar / jalar / fusionar nada. Después de hacer clic en el botón de bifurcación, haga

git remote add yourfork [email protected]:<yourname>/<project>.git

y empuja tu rama a tu tenedor con

git push yourfork branchname

a continuación, emitir una solicitud de extracción.

Si elimina la bifurcación después de que el parche se haya fusionado con el parche, no debería haber ningún problema. No estoy seguro de qué sucede cuando quitas el tenedor antes de que eso suceda.

No hay necesidad de fusionar nada.


Sin juguetear con su copia actual del repositorio.

  • Crea los parches con format-patch .
  • Bifurque aguas arriba y clónelo, pero no reemplace su copia de trabajo.
  • Aplique los parches con git am al proyecto recién bifurcado, empuje y cree la solicitud de fusión.

Esta no es la mejor solución, pero le impide perder accidentalmente sus cambios.







github