! maestro [rechazado] -> maestro (buscar primero)


102

¿Existe una buena manera de explicar cómo resolver " ! [rejected] master -> master (fetch first)'" en Git?

Cuando utilizo este comando $ git push origin master, muestra un mensaje de error.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

Respuestas:


133

La respuesta está ahí, git te dice que busques primero.

Probablemente alguien más ya haya presionado para dominar y tu compromiso está retrasado. Por lo tanto, debe buscar, fusionar el conjunto de cambios y luego podrá presionar nuevamente.

Si no lo hace (o peor aún, si lo fuerza usando la --forceopción), puede estropear el historial de confirmaciones.

EDITAR: Entro en más detalles sobre el último punto, ya que un tipo de aquí acaba de dar el Muy Mal Consejo de usar la --forceopción.

Como git es un DVCS, idealmente muchos otros desarrolladores están trabajando en el mismo proyecto que tú, usando el mismo repositorio (o una bifurcación). Si sobrescribe con fuerza con su conjunto de cambios, su repositorio no coincidirá con el de otras personas, porque "reescribió el historial". Harás infelices a otras personas y el repositorio sufrirá. Probablemente un gatito en el mundo también llorará.

TL; DR

  1. Si desea resolverlo, busque primero (y luego fusione).
  2. Si quieres hackear, usa la --forceopción.

Sin embargo, preguntaste por el primero. Opte por 1) siempre, incluso si siempre usará git solo, porque es una buena práctica.


5
¿No se pueden recuperar cambios importantes en archivos locales?
Leonardo Castro

2
No cambia después de una búsqueda
dhein

@dhein como escribí, la búsqueda debe ir seguida de una fusión; el punto es que tienes que "alinear" el árbol local con el árbol remoto (de ahí con la fusión), pero gracias, lo escribí en el TL; DR también
linuxbandit

88

tratar:

git fetch origin master
git merge origin master

Después de escribir este código, recibí otro error: (no avance rápido)

Escribo este código:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

Y resolvió mi problema


Lo mismo para mi. Eso resolvió mi problema. Hay un par de advertencias. Me equivoqué con un sub repositorio, pero lo resolví con esto: stackoverflow.com/questions/19584255/…
M. Beausoleil

1
@Aurelio A Su comando de combinación es incorrecto, debería serlo git merge master.
Mike

¿Por qué necesitamos usar git branch -D tmp?
Милош Вељковић

27

Deberías usar git pull, ese es el comando haz ay git fetchluego haz el git merge.

Si usa un git push origin master --forcecomando, es posible que tenga problemas en el futuro.


1
¿Es correcto que solo deba usar --force si es el único en el proyecto y se siente frustrado al intentar dar el primer impulso?
chrips

20

pull es siempre el enfoque correcto, pero una excepción podría ser cuando intentas convertir un sistema de archivos que no sea Git en un repositorio Github. Allí tendrías que forzar el primer compromiso.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

funciona para mí, comencé de nuevo un nuevo proyecto (mismo repositorio) y quería reemplazarlo.
ucotta

18

Prueba este comando git

git push origin master --force

o sin fuerza -f

git push origin master -f


2
Esto anula la restricción de git push. No recomendado para trabajo en equipo. De la documentación de git push: si alguien más construyó sobre su historial original mientras está reajustando, la punta de la rama en el control remoto puede avanzar con su confirmación, y presionar ciegamente con --force perderá su trabajo .
Casey

10

Como se indica en el mensaje de error, debe "buscar primero". Esto funcionó para mí. Usa el comando:

  1. git fetch origin master

Luego siga estos pasos para fusionar:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master

4

Pruebe este comando para resolverlo:

git push origin master --force

O

 git push origin master -f


3

Siga los pasos que se indican a continuación, ya que también tuve el mismo problema:

$ git pull origin master --allow-unrelated-histories 

(Para ver si la sucursal local se puede fusionar fácilmente con una remota)

$ git push -u origin master 

(Ahora envíe todo el contenido del repositorio de git local a su repositorio en línea)


2

Es probable que alguien más (por ejemplo, su colega) haya puesto confirmaciones origin/masterque no están en su mastersucursal local y usted está intentando enviar algunas confirmaciones desde su sucursal local al servidor. En el 99% de los casos, asumiendo que no desea borrar su trabajo deorigin , tiene dos opciones:

2) Combine sus cambios en su sucursal local y luego envíe el resultado combinado. git checkout master git pull # resolve conflicts here git push

(Tenga en cuenta que en este caso git pulles esencialmente una git fetchy una git merge).

1) Vuelva a basar su sucursal local, de modo que parezca que su colega hizo sus confirmaciones primero y luego usted hizo las suyas. Esto mantiene el historial de confirmaciones agradable y lineal, y evita una "confirmación de fusión". Sin embargo, si tiene conflictos con los cambios de su colega, es posible que deba resolver esos conflictos para cada una de sus confirmaciones (en lugar de solo una) en el peor de los casos. Esencialmente, esto es mejor para todos los demás, pero más esfuerzo para ti. git pull --rebase # resolve conflicts here git push

(Tenga en cuenta que git pull --rebasees esencialmente ay git fetcha git rebase origin/master.)



1

Su error puede deberse a la rama de combinación.
Solo sigue esto:

paso 1: git pull origin master(en caso de que reciba algún mensaje, ignórelo)
paso 2: git add .
paso 3: git commit -m 'your commit message'
paso 4:git push origin master


1

Primero, debes usar git pull, luego hacer un comando git fetchy luego hacer el git merge.

Si usa un git push origin master --forcecomando, es posible que tenga problemas en el futuro.


1

Superé esto comprobando una nueva rama como esta:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

Te quedan 2 ramas: Master y newbranch, que puedes fusionar más tarde.


0

Solo tiene que mencionar el nombre de su rama junto con su nombre remoto.

git fetch origin
git merge origin/master

0

La razón por la que sucedió en mi caso fue cuando creé el enlace de representante de GitHub, lo inicialicé con el archivo README

Mientras crea el control remoto de Git, no lo inicialice con el archivo README; de lo contrario, mostraría err

No hagas eso y definitivamente funcionará bien. En lugar de eso, inicialízalo con el archivo Léame si lo deseas después de presionar a la rama maestra.




0

ingrese la descripción de la imagen aquí

! [rechazado] maestro -> maestro (buscar primero) error: no se pudieron enviar algunas referencias a 'git@github.com:'

ingrese la descripción de la imagen aquí

Resolvió con éxito el problema usando el comando --force. entonces, debes usar
git push origin master --force



-1

este trabajo para mi

  1. git init

  2. git add --todos

3.git commit -m "nombre"

4.git push origin master --force


-1

Esto funcionó para mí:

$ git add .
$ git commit -m "commit"
$ git push origin master --force

-1

Es simple usar este comando:

git push -f maestro de origen

y hará tu trabajo


-1

Problema resuelto

Problema que tuve

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

También tuve el mismo problema. El problema es que sus commitsotros repositorios no se realizaron correctamente, pushedpor lo que debe ejecutar los siguientes comandos:

  1. git fetch origin master

    salida: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    salida: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    salida: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Muchas gracias

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.