¿Cómo puedo pasar a mi bifurcación desde un clon del repositorio original?


122

Creé una bifurcación (llamémoslo myrepo) de otro repositorio (llamémoslo orirepo) en GitHub. Más tarde, cloné orirepo.

git clone https://github.com/original/orirepo.git

Modifiqué unos 20 archivos, luego realicé mi cambio e hice una confirmación

git add
git commit

Sin embargo, cuando intenté empujar

git push

Tengo este error:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

Sé que cometí un error: debería haber clonado mi tenedor en lugar de hacerlo orirepo, pero ya es demasiado tarde para eso. ¿Cómo podría presionar hacia mi fork en lugar de hacia origin/orirepo, a la que no tengo acceso de escritura?

Respuestas:


187

Por defecto, cuando clonas un repositorio

  • que reside en https://github.com/original/orirepo.git,
  • cuya rama actual se llama master,

luego

  • la configuración local del clon resultante enumera solo una llamada remota origin, que está asociada con la URL del repositorio que clonaste;
  • la masterrama local en su clon está configurada para rastrear origin/master .

Por lo tanto, si no modifica la configuración de su clon, Git interpreta

git push

como

git push origin master:origin/master

En otras palabras, git pushintenta enviar su masterrama local a la masterrama que reside en el repositorio remoto (conocida por su clon como origin). Sin embargo, no está autorizado a hacer eso, porque no tiene acceso de escritura a ese repositorio remoto.

Necesitas

  1. o redefine el origincontrol remoto para asociarlo con su bifurcación, ejecutando

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. o, si desea conservar la definición original del origincontrol remoto, defina un nuevo control remoto (llamado myrepoaquí) que esté asociado a su bifurcación:

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    Entonces debería poder empujar su mastersucursal local a su bifurcación ejecutando

    git push myrepo master
    

    Y si quieres decirle a Git que git pushdebería presionar en myrepolugar de hacerlo de originahora en adelante, debes ejecutar

    git push -u myrepo master
    

en lugar.


¿´git push -u´ también cambiará el comportamiento predeterminado de ´git pull´?
benroth

1
Sí, así que en lugar de hacer "push -u", debe usar la opción pushDefault: git config --add remote.origin.pushdefault myrepo y solo afectará la inserción, y se aplica a todas las ramas nuevas y existentes.
Marius K

1
Hice git remote set-url origin http://github.com/myname/reponamey luego git push origin mybranch. ¡Trabajó! ¡Gracias!
Desarrollador Marius Žilėnas

1
Si se usa agregar control remoto, ¿cómo afecta el tirón? ¿De dónde saca? ¿Cómo maneja la fusión futura entre los 2 repositorios?
Kok How Teh

1
@KokHowTeh Agregar otro control remoto no afecta a qué rama remota (si corresponde) rastrea una rama local. Sin embargo, git push -u myrepo masterhace que su maestro local comience a rastrear myrepo/master. Si, después de eso, corres git pullmientras estás en master, tirarás de myrepoy no de origin.
jub0bs

17

Entonces, clonó el repositorio de alguien, hizo los cambios y luego se dio cuenta de que no puede presionar a ese repositorio, pero puede presionar a su propia bifurcación. Entonces, siguió adelante y bifurcó el repositorio original.

Todo lo que tiene que hacer es intercambiar la URL de origen en su clon local con la URL de su repositorio bifurcado.

Hazlo asi

git remote set-url origin https://github.com/fork/name.git

¿Dónde https://github.com/fork/name.gitestá la URL de su bifurcación desde el repositorio original?

Después de eso, solo

git push

y podrás enviar tus cambios a tu fork :)


7

Bien, finalmente edité mi archivo de configuración de git:

$ nano .git/config

cambiando :

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<origin-project>/<origin-repo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

a

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<mylogin>/<myrepo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Luego,

$ git push

Trabajado como un encanto.

O, gracias a la respuesta de Thiago F Macedo :

git remote set-url origin https://yourusername@github.com/user/repo.git

-5

Primero debe clonar el repositorio bifurcado en su cuenta.

git clone https://github.com/your_account/repo.git

Absolutamente tiene permisos para enviar a este repositorio. Si desea enviar su código al repositorio original, puede emitir una solicitud de extracción.


No piden clonar la bifurcación. Amablemente, lea la pregunta nuevamente.
Ahmad Awais
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.