Soy nuevo en GitHub . Hoy me encontré con un problema cuando intentaba enviar mi código a GitHub.
Pushing to [email protected]:519ebayproject/519ebayproject.git
To [email protected]:519ebayproject/519ebayproject.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Todavía no he introducido nada en el repositorio, entonces, ¿por qué necesito extraer algo?
Respuestas:
Si no desea fusionar la rama remota en su rama local (vea las diferencias con git diff ), y quiere hacer un empuje forzado, use el comando push con -f
¿Dónde
origin
está el nombre de su repositorio remoto ?fuente
$ git pull origin master -v
pero da errorfatal: refusing to merge unrelated histories
. Luego probé esto y funcionó y mis archivos locales aparecieron en el repositorio remoto de github.Como te dice el mensaje,
Úselo
git pull
para extraer los últimos cambios del repositorio remoto a su repositorio local. En este caso, la extracción de cambios requerirá una fusión porque ha realizado cambios en su repositorio local.Proporcionaré un ejemplo y una imagen para explicar. Supongamos que su último tirón desde el origen / rama fue en Comprometer B. Ha completado y comprometido algún trabajo (Compromiso C). Al mismo tiempo, alguien más ha completado su trabajo y lo ha llevado a origen / rama (Compromiso D). Deberá haber una fusión entre estas dos ramas.
Como eres el que quiere empujar, Git te obliga a realizar la fusión. Para hacerlo, primero debe extraer los cambios de origen / rama.
Después de completar la fusión, ahora se te permitirá adelantar rápidamente el origen / rama al Compromiso E presionando tus cambios.
Git requiere que manejes las fusiones tú mismo, porque una fusión puede generar conflictos.
fuente
git pull
también impresoAlready up-to-date
. Resultó que no estaba en la rama, aunque lo estaba, sino una rama HEAD separada (¿posiblemente de una fusión fallida?). Esto fue obvio después de corrergit branch
. Después de ejecutargit checkout mybranch
todo funcionó como se esperaba.¿Has actualizado tu código antes de presionar?
Úselo
git pull origin master
antes de empujar cualquier cosa.Supongo que lo está utilizando
origin
como nombre para su control remoto.Debe extraer antes de enviar, para actualizar su repositorio local antes de enviar algo (por si alguien más ya ha actualizado el código
github.com
). Esto ayuda a resolver conflictos localmente.fuente
git pull origin master
'origin' does not appear to be a git repository
git remote --verbose
para ver todo el control remoto configurado en su carpeta git. La información que se muestra en la pantalla también incluirá rutas "[email protected]" o rutas HTTPS, desde las cuales podrá identificar dónde empujar. Espero que esto ayude !git pull origin master
mostrando Ya actualizado. pero luego, cuando intente presionar origin_branch, diga la misma advertencia mencionada en la pregunta. Cualquier sugerencia !!git push -f <remote> <branch>
por ejemplo, git push origin <your_local_branch> revisa este hilo .Esto normalmente sucede cuando usted
git commit
e intenta realizargit push
cambios antesgit pulling
en esa ramax
donde otra persona ya ha realizado cambios.El flujo normal sería el siguiente,
PASO 1 :
git stash
sus cambios locales no confirmados en esa rama.PASO 2 :
git pull origin branch_name -v
a lospull and merge
cambios comprometidos localmente en esa rama ( déle a esta combinación algún mensaje y solucione los conflictos, si corresponde ) .PASO 3 :
git stash pop
losstash
cambios ed ( luego puede realizar confirmaciones en los archivos emergentes si lo desea o insertar cambios ya confirmados (PASO 4) primero y realizar una nueva confirmación a los archivos más adelante ) .PASO 4 :
git push origin branch_name -v
los cambios combinados.Reemplace
branch_name
conmaster
(paramaster
rama).fuente
commit
? ¿No deberías confirmar tus cambios despuésstash pop
?Primera y simple solución (no recomendado)
git push -f origin master
.Solución recomendada
Si esto no funciona, entonces sigue 🔰
.git
directorio de la carpeta.Luego ejecute estos comandos:
O
Úselo solo
git push -f origin master
si-u
no funciona para usted.Esto resolverá casi cualquier tipo de error que ocurra mientras empuja sus archivos.
fuente
A veces olvidamos el tirón e hicimos muchos trabajos en el entorno local.
Si alguien quiere empujar sin tirar,
está trabajando. Esto no se recomienda cuando se trabaja con otras personas, pero cuando su trabajo es algo simple o un proyecto de juguete personal, será una solución rápida.
fuente
reset --hard
commit local a uno más antiguo y luego hice un par más. Entonces solo queríapush
pero el repositorio remoto no estaba preparado para dejarme. WarrenP en realidad podría ayudar a los aprendices de git siendo menos rúnicos. Quizás él no quiera.Algunos de ustedes pueden estar recibiendo este error porque Git no sabe qué rama está tratando de empujar.
Si su mensaje de error también incluye
entonces es posible que desee seguir los prácticos consejos de Jim Kubicek, Configurar Git para empujar solo la rama actual , para establecer la rama predeterminada en actual.
fuente
Esto funcionó para mí: el comando
git pull origin branch_name --rebase
extraerá los cambios desde nombre_de_ sucursal remoto al principio, luegorebase
la rama actual en la parte superior.fuente
Además de las respuestas anteriores, lo siguiente funcionó para mí:
Escenario
Solución
fuente
--all
bandera.Tuve el mismo problema, lo que hice fue presionarlo por primera vez usando este
Hice esto después de que confirme los archivos y recibí un error tal como lo obtuvo. Confirmó todos los archivos y los empujó. Luego, la próxima vez que estaba empujando al github. Hice lo que me pidió y estaba bien entonces. Espero que esto funcione para usted también :)
fuente
git push --set-upstream origin master --force
Mencioné esto en mi tutorial, Cómo usar GitHub: Un tutorial para principiantes .
Cuando crea un nuevo repositorio en GitHub, GitHub puede pedirle que cree un archivo Léame. Si crea un archivo Léame directamente en GitHub, primero deberá realizar una solicitud 'pull' antes de que la solicitud 'push' sea exitosa. Estos comandos 'extraerán' el repositorio remoto, lo fusionarán con sus archivos actuales y luego 'enviarán' todos los archivos nuevamente a GitHub:
fuente
Recibí el mensaje de error mencionado anteriormente cuando intenté impulsar mi rama actual
foobar
:Resulta que tenía dos sucursales locales que rastreaban la misma sucursal remota:
Me funcionó para impulsar mi rama actual usando:
... y para limpiar con
git branch -d
fuente
nombre de sucursal de origen git push -f
Use el comando anterior solo si está seguro de que no necesita un código de sucursal remoto; de lo contrario, combine primero y luego presione el código
fuente
Si no desea ingresar a su proyecto actual (y potencialmente enfrenta conflictos de fusión que no le interesa resolver) y no desea crear otra rama (Esto será tedioso para administrar otra rama), y no No quiero hacer ningún
force
comando git arriesgado y permanente (que incluso después de leer lo que hacen, a menudo me sorprenden las implicaciones de hacerlo).Solución : simplemente arrastre el contenido de su carpeta a otra carpeta, arrastre el proyecto a su carpeta ahora vacía, arrastre el contenido extraído a la papelera y luego arrastre el proyecto correcto nuevamente a la carpeta. Debe poder empujar correctamente y obtener los resultados deseados. Literalmente me lleva menos de 10 segundos hacer esto.
A las personas que me dirían que esto no es apropiado sin citar ninguna consecuencia, o las personas que me dicen que use un comando que me cause molestias futuras, les digo: "Este método literalmente me lleva menos de 10 segundos". Si encuentro un comando git que tarda menos de 10 segundos en implementarse y tiene exactamente el mismo efecto, lo adoptaré. Hasta entonces, estoy usando este método.
Una desventaja de este método es que su historial de confirmación aparecerá lineal cuando realmente se fusionó en una rama sin documentar la fusión. Este podría no ser el mejor método cuando se trabaja con grupos. ¡Trabaja en las ramas en esos casos!
fuente
Simplemente tuve el mismo problema, pero en mi caso escribí la rama incorrecta en el control remoto. Entonces, parece que esa es otra fuente de este problema ... verifique que esté presionando a la rama correcta.
fuente
Experimenté el mismo problema y resultó que estaba en una rama (local) diferente de lo que pensaba que estaba Y la rama local correcta estaba detrás en confirmaciones desde el control remoto.
Mi solución: pagar la rama correcta, seleccionar la confirmación de la otra rama local, git pull y git push
fuente
Tuve un problema similar y resultó que mi flujo de trabajo para mantener mi sucursal actualizada fue la culpa. Estaba haciendo lo siguiente:
En mi 'maestro' local
luego de vuelta en mi sucursal local
Esto funcionó bien para un flujo anterior de git pero no con github. El
git rebase
problema aquí era causar problemas con la sincronización (y admito que es algo que he tenido que aceptar sin comprenderlo completamente) y desafortunadamente me coloqué en una posición dondegit push -f
probablemente se convirtió en la opción más fácil. No está bien.Mi nuevo flujo es actualizar la rama directamente usando
git merge
lo siguiente:En mi sucursal local
Sin avance rápido, ya que habré realizado cambios, por supuesto, en la sucursal local.
Como probablemente pueda notar, no soy un experto en git, pero estoy informado de manera confiable de que este flujo de trabajo probablemente evitará los problemas específicos que tuve.
fuente
En mi caso, tuve "mybranch" desprotegido, y lo había hecho
git pull
, así que no podía entender por qué el empuje no estaba funcionando. Finalmente, me di cuenta de que estaba empujando la rama equivocada. Estaba escribiendo engit push origin master
lugar degit push origin mybranch
.Entonces, si ya lo ha hecho
git pull
y sigue recibiendo este mensaje, asegúrese de presionar la rama correcta.fuente
¿Es el nombre de su sucursal el mismo que el nombre de la sucursal remota?
De lo contrario, debe pagar una nueva sucursal con el mismo nombre que la sucursal remota e intentar presionarla nuevamente.
Suponga que la rama remota que desea empujar es [ prueba ] y su rama local se denomina [ prueba ].
Si no está en la rama de prueba , primero cambie a ella.
Luego abra una nueva sucursal y asígnele el nombre de prueba .
Ahora, es hora de empujarlo:
fuente
$git branch -M <new_name>
para cambiar el nombre de la sucursal local.He resuelto este problema en mi repositorio GIT. No es necesario
rebase
oforce
comprometerse en este caso. Utilice los pasos a continuación para resolver esto:Espero que ayude.
fuente
Otra solución es avanzar en la cabeza del control remoto haciendo otro commit si puedes. Después de que coloque esta cabeza avanzada en el subárbol local, podrá empujar nuevamente.
fuente
Recibí un error similar al enviar los últimos cambios a un repositorio Git desnudo que utilizo para gitweb . En mi caso, no hice ningún cambio en el repositorio simple, así que simplemente eliminé mi repositorio simple y cloné nuevamente:
fuente
Si está seguro de que nadie hizo cambios en su repositorio git y que está trabajando en la última versión,
git pull
no tiene sentido como una solución en su corazón ...Entonces esto es probablemente lo que sucedió, solías
git commit --amend
Tutorial ATLASSIAN: reescribiendo el historial
Sin embargo, no se recomienda realizarlo
git commit --amend
si ya ha enviado el commit a GitHub , esto se debe a que "la modificación no solo altera el commit más reciente, sino que lo reemplaza por completo. Para Git, se verá como un commit nuevo". lo que significa que para otros desarrolladores en su GitHub, el historial se ve como A-> B-> C pero para usted se parece a A-> B-> D, si GitHub lo permitepush
, todos los demás tendrán que corregir su historial manualmenteEsta es la razón por la que recibe el mensaje de error
! [rejected] master -> master (non-fast-forward)
, si sabe que nadie ha realizado su último cambio, puede hacerlogit push --force
, esto alterará el historial de git en su repositorio público . De lo contrario ... puede realizargit pull
, pero creo que esto tendrá el mismo resultado que no realizógit commit --amend
, creará una nueva confirmación (es decir: git history después de git pull: A-> B-> C-> D )para más detalles: cómo cambiar su último commit
fuente
Otra opción: cambiar el nombre local de su sucursal a algo nuevo.
Entonces podrá enviarlo al repositorio remoto, por ejemplo, si esa es su forma de mantener una copia (copia de seguridad) y asegurarse de que no se pierda nada.
Puede buscar la rama remota para tener una copia local y examinar las diferencias entre (i) lo que tenía el control remoto (con el nombre de la rama anterior) y (ii) lo que tiene (con el nuevo nombre de la rama), y decidir qué hacer . Como no estaba al tanto de las diferencias del control remoto en primer lugar (de ahí el problema), simplemente fusionar o forzar cambios en algún lugar es demasiado brutal.
Mire las diferencias, elija en qué rama desea trabajar, elija los cambios que desea de la otra rama o revierta los cambios que no desea en la rama que tiene, etc.
Entonces debería estar en condiciones de decidir si desea forzar su versión limpia en el control remoto, o agregar nuevos cambios, o lo que sea.
fuente
El problema con el comando push es que su repositorio local y remoto no coincide. SI inicializa el archivo Léame de forma predeterminada al crear un nuevo repositorio desde git hub, entonces, la rama maestra se crea automáticamente. Sin embargo, cuando intentas empujar eso no tiene ninguna rama. no puede presionar ... Por lo tanto, la mejor práctica es crear un repositorio sin inicialización de archivo Léame predeterminado.
fuente
Este problema generalmente es causado por la creación de un archivo readme.md, que se cuenta como una confirmación, no está sincronizado localmente en el sistema y falta detrás de la cabeza, por lo tanto, muestra una solicitud de extracción de git. Puede intentar evitar el archivo Léame y luego intentar confirmar. Funcionó en mi caso.
fuente
Otra causa de este problema (aparentemente no tan común) ...
Mi servidor estaba retrasado ~ 12 horas cuando hice un empuje
Configuré NTP en el servidor SYNC mi reloj.
Ejecuté un nuevo git push que condujo al error discutido en esta publicación.
fuente
Si por casualidad
git pull
imprimeAlready up-to-date
, es posible que desee comprobar el parámetro global de gitpush.default
(In~/.gitconfig
). Ajústelo asimple
si estaba dentromatching
. La siguiente respuesta explica por qué:Git: ¿cuál es la diferencia entre push.default "match" y "simple"
Además, vale la pena verificar si su sucursal local está desactualizada
git remote show origin
y hacer una extracción si es necesariofuente
use
git pull https://github.com/username/repository
Es porque los repositorios remotos y Github no están sincronizados. Sipull
usa el repositorio yPush
todo estará sincronizado, el error desaparecerá.``
fuente
git pull
impresiones yaup-to-date
solución:
es posible que se haya creado un repositorio / proyecto en remoto (servidor) y se haya agregado algún archivo allí. Luego, nuevamente se creó una Carpeta en su git local e inicializado
git init
; este es el error , no debe creargit init
en local, sino clonar el proyecto en su local utilizandogit clone
luego tirar
fuente