Github: Importar rama ascendente en fork


169

Tengo un fork ( origin) de un proyecto ( upstream) en github. Ahora el proyecto ascendente ha agregado una nueva sucursal, quiero importar a mi tenedor. ¿Cómo puedo hacer eso?

Intenté verificar el control remoto y crear una rama encima de eso, pero eso configura la rama de la forma en que git pushintenta empujar a upstream:

git checkout upstream/branch
git checkout -b branch

editar

Tal vez eso no estaba claro, pero quiero agregar la rama a mi repositorio local, para poder empujarla a origin(mi tenedor) a través de git push. Debido a que los repositorios ascendentes generalmente son de solo lectura y se bifurcan para contribuir.

Entonces, básicamente, quiero verificar una rama inexistente en origincuyo contenido se extraerá upstream.

Respuestas:


262
  1. Asegúrese de haber incorporado la nueva rama ascendente a su repositorio local :

    • Primero, asegúrese de que su árbol de trabajo esté limpio (confirme / oculte / revierta cualquier cambio)
    • Luego, git fetch upstreampara recuperar la nueva rama ascendente
  2. Cree y cambie a una versión local de la nueva rama ascendente ( newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. Cuando esté listo para impulsar la nueva rama al origen :

    • git push -u origin newbranch

El modificador -u configura el seguimiento al control remoto especificado (en este ejemplo origin)


66
Creo que git fetch upstreames una mejor opción en el primer paso, ya que git pull upstreamrequiere más acciones a realizar después git remote add ...de la upstream.
Alexander Pavlov

devuelve git pull upstream: You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.agregar el nombre de la rama al final del comando provoca una fusión entre la rama en la parte superior con la rama local actual en lugar de permitir la creación de una nueva rama local. ¿Algunas ideas?
mMontu

1
Reemplazar git pull upstreamcon git fetch upstreamresuelto el problema, y ​​los siguientes pasos funcionaron.
mMontu

Obtengo: fatal: no se pueden actualizar las rutas y cambiar a la rama 'ascendente' al mismo tiempo. ¿Tenía la intención de pagar 'upstream / master' que no se puede resolver como commit?
sureshvv

1
@sureshvv Probablemente sea porque necesita tener una referencia remota al repositorio ascendente denominado ascendente antes de hacer nada de eso. En caso de que no lo haga, así es como agrega uno: git remote add upstream your_git_upstream_repository_url.git . Lea esto si necesita aclaraciones al respecto.
Gabriel Rainha

7

yo usaría

git checkout -b <new_branch> upstream/<new_branch>

Eso es lo que intenté incluso antes de lo que he explicado en la pregunta; conduce a los mismos resultados.
meter

4

También tuve problemas con esto, y Google me llevó aquí. Sin embargo, las soluciones no funcionaron. Mi problema fue que cuando agregué mi upstream, configuró mi configuración de git para buscar solo master, en lugar de todas las ramas. por ejemplo, se veía así

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

Editar .git / config de la siguiente manera solucionó mi problema

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

Los siguientes pasos funcionaron bien para mí (suponiendo que el nombre de la rama ascendente sea branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
Obtengo git fetch upstream fatal: 'upstream' no parece ser un repositorio git fatal: No se pudo leer desde el repositorio remoto. Asegúrese de tener los derechos de acceso correctos y de que exista el repositorio.
ThinkDigital

0

--track?

git branch --track branch upstream/branch

Tal vez te entendí mal, pero hacer eso establecerá la rama de la misma manera; con pushpusing to upstream.
meter

No, creo que te he entendido mal.
troelskn

0

Tuve un escenario un poco más complicado en el que ya tenía una upstreamdefinición en mi bifurcación (del repositorio canónico) pero necesitaba verificar una rama de una bifurcación diferente. Para lograrlo, el proceso es ligeramente diferente. Aquí está la configuración con la que terminé:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

Ahora también puedes pagar una rama de <other_user>fork.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

Eso le dará una rama local que se deriva de la bifurcación.

Para impulsar esa rama local, tenía que ser específico con mi comando push.

git push origin <branch>

Eso es más o menos lo mismo que la respuesta aceptada, solo que el control remoto desde el que está buscando no se llama "ascendente".
meter el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.