! 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 '[email protected]:zapnaa/abcappp.git'
Symfony
fuente

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.

linuxbandit
fuente
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

Aurelio A
fuente
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.

usainzg
fuente
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
JD
fuente
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


fuente
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
Amila Weerasinghe
fuente
4

Pruebe este comando para resolverlo:

git push origin master --force

O

 git push origin master -f
Mahfujur Rahman
fuente
3

Puede usar el siguiente comando: Primero clone una copia nueva de su repositorio, usando el indicador --mirror:

$ git clone --mirror git://example.com/some-big-repo.git

Luego siga los códigos en consecuencia:

Agregar un proyecto existente a GitHub usando la línea de comando

Incluso si eso no funciona, simplemente puede codificar:

$ git push origin master --force 

o

$ git push origin master -f
Tanuj Chakraborty
fuente
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)

Bhavdeep Kaur
fuente
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.)

Chrispher
fuente
2

A veces sucede cuando duplica archivos, típicamente README.

Jarosław Cichoń
fuente
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

divyang hirpara
fuente
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.

imkanaram
fuente
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.

user3826395
fuente
0

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

git fetch origin
git merge origin/master
Amit Kharel
fuente
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.

Arijit Kundu
fuente
0

--force La opción funcionó para mí, usé git push origin master --force

Ayush Kushwaha
fuente
0

ingrese la descripción de la imagen aquí

! [rechazado] maestro -> maestro (buscar primero) error: no se pudieron enviar algunas referencias a '[email protected]:'

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

Ranushka Lakmal Sankalpa
fuente
0

Utilice este comando:

git push -f origin master --force
Adil Shehzad
fuente
-1

este trabajo para mi

  1. git init

  2. git add --todos

3.git commit -m "nombre"

4.git push origin master --force

Mizanur Rahman
fuente
-1

Esto funcionó para mí:

$ git add .
$ git commit -m "commit"
$ git push origin master --force
Yamuna Bangaru
fuente
-1

Es simple usar este comando:

git push -f maestro de origen

y hará tu trabajo

rajat prakash
fuente
-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

Marshal D. Teach
fuente