Recientemente bifurqué un proyecto y apliqué varias correcciones. Luego creé una solicitud de extracción que luego fue aceptada.
Unos días después, otro contribuyente hizo otro cambio. Entonces mi tenedor no contiene ese cambio.
¿Cómo puedo obtener ese cambio en mi tenedor? ¿Debo eliminar y volver a crear mi bifurcación cuando tenga que realizar más cambios? ¿O hay un botón de actualización?
git
github
pull-request
git-fork
Lea Hayes
fuente
fuente
Respuestas:
En su clon local de su repositorio bifurcado, puede agregar el repositorio original de GitHub como "remoto". (Los "controles remotos" son como apodos para las URL de los repositorios;
origin
es uno, por ejemplo). Luego, puede buscar todas las ramas de ese repositorio ascendente y volver a redactar su trabajo para continuar trabajando en la versión ascendente. En términos de comandos que podrían verse así:Si no desea reescribir el historial de su rama maestra (por ejemplo, porque otras personas pueden haberlo clonado), debe reemplazar el último comando con
git merge upstream/master
. Sin embargo, para realizar más solicitudes de extracción que sean lo más limpias posible, probablemente sea mejor volver a redactar.Si ha reubicado su rama,
upstream/master
es posible que deba forzar el empuje para empujarlo a su propio repositorio bifurcado en GitHub. Harías eso con:Solo necesita usar
-f
la primera vez después de haber reescrito.fuente
-f
que se equivoca a todos los que podrían haber clonado tu versión.git merge --no-ff upstream/master
esta manera, sus commits ya no están en la parte superior.A partir de mayo de 2014, es posible actualizar una bifurcación directamente desde GitHub. Esto todavía funciona a partir de septiembre de 2017, PERO conducirá a un historial de confirmación sucio.
Update from original
).Ahora tiene tres opciones, pero cada una conducirá a un historial de confirmación menos que limpio.
This branch is X commits ahead, Y commits behind <original fork>
.Entonces, sí, puede mantener actualizado su repositorio con su flujo ascendente utilizando la interfaz de usuario web de GitHub, pero hacerlo dañará su historial de confirmación. En cambio, quédese con la línea de comando : es fácil.
fuente
Aquí está el documento oficial de GitHub sobre Sincronizar una bifurcación :
fuente
git push origin master
--follow-tags
: stackoverflow.com/a/26438076/667847git merge upstream/master
, luego echar un vistazo para desarrollar una rama y hacerlogit merge upstream/develop
Permission denied (publickey). fatal: Could not read from remote repository.
al intentar buscar desde la cuenta de Github de Facebook en sentido ascendente.Muchas respuestas terminan moviendo su fork una confirmación por delante del repositorio principal. Esta respuesta resume los pasos encontrados aquí que moverán su bifurcación al mismo commit que el padre .
Cambie el directorio a su repositorio local.
git checkout master
Agregue el padre como un repositorio remoto,
git remote add upstream <repo-location>
git fetch upstream
Problema
git rebase upstream/master
git status
Problema
git push origin master
Para obtener más información sobre estos comandos, consulte el paso 3 .
fuente
Si, como yo, nunca comprometes nada directamente para dominar , lo que realmente deberías hacer, puedes hacer lo siguiente.
Desde el clon local de su bifurcación, cree su control remoto ascendente. Solo necesitas hacer eso una vez:
Luego, cuando quiera ponerse al día con la rama maestra del repositorio ascendente, debe:
Asumiendo que nunca has cometido nada sobre el maestro, ya deberías haberlo hecho. Ahora puede empujar a su maestro local a su bifurcación remota GitHub de origen. También puede cambiar la base de su rama de desarrollo en su maestro local ahora actualizado.
Después de la configuración inicial ascendente y la comprobación principal, todo lo que necesita hacer es ejecutar el siguiente comando para sincronizar su maestro con el ascendente: git pull upstream master .
fuente
Prólogo: su bifurcación es el "origen" y el repositorio desde el que se bifurcó es el "ascendente".
Supongamos que ya clonaste tu fork en tu computadora con un comando como este:
Si eso se da, entonces debe continuar en este orden:
Agregue el "flujo ascendente" a su repositorio clonado ("origen"):
Obtenga los commits (y las ramas) del "upstream":
Cambie a la rama "maestra" de su bifurcación ("origen"):
Guarda los cambios de tu rama "maestra":
Combine los cambios de la rama "maestra" de la "corriente arriba" en su rama "maestra" de su "origen":
Resolver conflictos de fusión, si los hay, y confirmar su fusión.
Empuja los cambios a tu tenedor
Recupere sus cambios escondidos (si los hay)
Ya terminaste! ¡Felicidades!
GitHub también proporciona instrucciones para este tema: Sincronizar una bifurcación
fuente
git remote add upstream [email protected]:original_author/project_name.git
solo un alias paragit remote add upstream https://github.com/original_author/project_name.git
?git stash
ygit stash pop
parte muy útilDesde noviembre de 2013, se ha abierto una solicitud de función no oficial con GitHub para pedirles que agreguen un método muy simple e intuitivo para mantener una bifurcación local sincronizada con el flujo ascendente:
https://github.com/isaacs/github/issues/121
Nota: Dado que la solicitud de función no es oficial, también es aconsejable ponerse
[email protected]
en contacto para agregar su soporte para que se implemente una función como esta. La solicitud de características no oficiales anterior podría usarse como evidencia del monto de interés en esta implementación.fuente
A la fecha de esta respuesta, GitHub no tiene ( o debo decir que ya no? ) Esta característica en la interfaz web. Sin embargo, puede solicitar
[email protected]
agregar su voto para eso.Mientras tanto, el usuario de GitHub bardiharborow ha creado una herramienta para hacer precisamente esto: https://upriver.github.io/
La fuente está aquí: https://github.com/upriver/upriver.github.io
fuente
Si está utilizando GitHub para Windows o Mac, ahora tienen una función de un clic para actualizar las horquillas:
fuente
En realidad, es posible crear una bifurcación en su bifurcación a partir de cualquier confirmación del flujo ascendente en el navegador:
https://github.com/<repo>/commits/<hash>
, donde el repositorio es su bifurcación, y el hash es el hash completo de commit que puede encontrar en la interfaz web ascendente. Por ejemplo, puedo abrir https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990 , que apunta allinux
master
momento de la escritura.Luego puede buscar esa rama en su clon local, y no tendrá que enviar todos esos datos de nuevo a GitHub cuando inserte ediciones encima de esa confirmación. O use la interfaz web para cambiar algo en esa rama.
Cómo funciona (es una suposición, no sé exactamente cómo lo hace GitHub): los tenedores comparten el almacenamiento de objetos y usan espacios de nombres para separar las referencias de los usuarios. Por lo tanto, puede acceder a todas las confirmaciones a través de su bifurcación, incluso si no existían en el momento de la bifurcación.
fuente
Sigue los pasos a continuación. Los probé y me ayudó.
Pago a su sucursal
Tire de la rama del repositorio de origen para obtener el último código
fuente
git push HttpsForYourForkOfTheRepo BRANCH_NAME
Actualizo mis repositorios bifurcados con esta línea:
Use esto si no desea agregar otro punto final remoto a su proyecto, como otras soluciones publicadas aquí.
fuente
pull
.Como complemento a esta respuesta, estaba buscando una manera de actualizar todas las ramas remotas de mi repositorio clonado ( origen ) desde las ramas aguas arriba de una sola vez. Así es como lo hice.
Esto supone que ya ha configurado un apuntamiento remoto ascendente en el repositorio de origen (desde donde se bifurcó el origen ) y lo ha sincronizado
git fetch upstream
.Entonces corre:
La primera parte de este comando enumera todas las cabezas en el repositorio remoto ascendente y elimina el SHA-1 seguido del
refs/heads/
prefijo de nombre de rama.Luego, para cada una de estas ramas, empuja la copia local de la rama de seguimiento remoto ascendente (
refs/remotes/upstream/<branch>
en el lado local) directamente a la rama remota en el origen (refs/heads/<branch>
en el lado remoto).Cualquiera de estos comandos de sincronización de bifurcación puede fallar por una de dos razones: o la bifurcación ascendente se ha reescrito o usted ha enviado confirmaciones en esa bifurcación a su bifurcación. En el primer caso en el que no ha comprometido nada con la bifurcación en su bifurcación, es seguro presionar con fuerza (agregue el interruptor -f ; es decir,
git push -f
en el comando anterior). En el otro caso, esto es normal ya que la bifurcación de su bifurcación se ha desviado y no puede esperar que el comando de sincronización funcione hasta que sus confirmaciones se hayan fusionado nuevamente en sentido ascendente .fuente
La aplicación "Pull" es una solución automática de configuración y olvido. Sincronizará la rama predeterminada de su bifurcación con el repositorio ascendente.
Visite la URL, haga clic en el botón verde "Instalar" y seleccione los repositorios donde desea habilitar la sincronización automática.
La rama se actualiza una vez por hora directamente en GitHub, en su máquina local necesita extraer la rama maestra para asegurarse de que su copia local esté sincronizada.
fuente
mergemethod
. Más sobre esto aquíAndroid Studio ahora ha aprendido a trabajar con repositorios de fork de GitHub (ni siquiera tiene que agregar un repositorio remoto "ascendente" por comando de consola).
Abrir menú VCS → Git
Y preste atención a los dos últimos elementos del menú emergente:
Rebase mi tenedor GitHub
Crear solicitud de extracción
Pruébalos. Utilizo el primero para sincronizar mi repositorio local. De todos modos, las ramas del repositorio remoto principal ("upstream") estarán accesibles en Android Studio después de hacer clic en "Rebase my GitHub fork", y podrá operar con ellas fácilmente.
(Uso Android Studio 3.0 con los complementos "Integración Git" y "GitHub").
fuente
Cuando haya clonado su repositorio bifurcado, vaya a la ruta del directorio donde reside su clon y las pocas líneas en su Terminal de Git Bash.
Y ahí estás listo para ir. Todos los cambios actualizados en el repositorio principal se incluirán en el repositorio de fork.
El comando "buscar" es indispensable para mantenerse actualizado en un proyecto: solo cuando realice una "búsqueda de git" se le informará sobre los cambios que sus colegas introdujeron en el servidor remoto.
Todavía puede visitar aquí para más consultas.
fuente
Si configura su upstream. Consulte con
git remote -v
, entonces esto será suficiente.fuente
Eso depende del tamaño de su repositorio y de cómo lo bifurcó.
Si es un repositorio bastante grande, es posible que haya querido administrarlo de una manera especial (por ejemplo, el historial de descartes). Básicamente, puede obtener diferencias entre las versiones actuales y ascendentes, confirmarlas y luego volver a elegir el maestro.
Intenta leer este . Describe cómo manejar grandes repositorios de Git y cómo actualizarlos con los últimos cambios.
fuente
Me gustaría agregar a la respuesta de @ krlmlr .
Inicialmente, el repositorio ha bifurcado una rama llamada:
master
. Si está trabajando en una nueva característica o una solución, generalmente crearía una nueva ramafeature
y haría los cambios.Si desea que el repositorio bifurcado esté sincronizado con el repositorio principal, puede configurar un archivo de configuración (
pull.yml
) para la aplicación Pull ( en la rama de funciones ), de esta manera:Esto mantiene
master
actualizada la rama del repositorio bifurcado con el repositorio principal. Mantiene lafeature
rama del repositorio bifurcado actualizada a través de lamaster
sucursal del repositorio bifurcado fusionando la misma. Esto supone que lafeature
rama es la rama predeterminada que contiene el archivo de configuración.Aquí
mergemethods
hay dos en juego, uno es elhardreset
que ayuda a forzar los cambios de sincronización en lamaster
rama del repositorio bifurcado con el repositorio principal y el otro método esmerge
. Este método se utiliza para fusionar los cambios realizados por usted en lafeature
rama y los cambios realizados debido a la sincronización forzada en lamaster
rama. En caso de conflicto de fusión, la aplicación de extracción le permitirá elegir el próximo curso de acción durante la solicitud de extracción.Puede leer sobre configuraciones básicas y avanzadas y varias
mergemethods
aquí .Actualmente estoy usando esta configuración en mi repositorio bifurcado aquí para asegurarme de que una mejora solicitada aquí se mantenga actualizada.
fuente
Hay dos cosas principales para mantener un repositorio bifurcado siempre actualizado para siempre.
Entonces, cuando se acepte su solicitud de extracción, puede eliminar de forma segura la sucursal, ya que su código contribuido estará en vivo en su maestro de su repositorio bifurcado cuando lo actualice con el flujo ascendente. Con esto, su maestro siempre estará en condiciones de limpieza para crear una nueva rama para hacer otro cambio.
Esto se puede hacer con cron . Aquí hay un código de ejemplo si lo hace en Linux.
ponga este código en
crontab file
para ejecutar el trabajo por hora.luego cree el
cron.sh
archivo de script y una interacción git con ssh-agent y / o espere de la siguiente maneraVerifique su repositorio bifurcado. De vez en cuando siempre mostrará esta notificación:
fuente
Use estos comandos (en caso de suerte)
fuente