! [rejeitado] mestre -> mestre (buscar primeiro)

100

Existe uma boa maneira de explicar como resolver " ! [rejected] master -> master (fetch first)'" no Git?

Quando eu uso este comando, $ git push origin masterele exibe uma mensagem de erro.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to '[email protected]:zapnaa/abcappp.git'
Symfony
fonte

Respostas:

129

A resposta está lá, git está dizendo para você buscar primeiro.

Provavelmente alguém já empurrou para masterizar, e seu commit está atrasado. Portanto, você deve buscar, mesclar o conjunto de alterações e, então, será capaz de enviar por push novamente.

Se você não fizer isso (ou pior ainda, se você forçar usando a --forceopção), você pode bagunçar o histórico de commits.

EDIT: Eu entro em mais detalhes sobre o último ponto, já que um cara aqui acabou de dar o conselho muito ruim de usar a --forceopção.

Como git é um DVCS, idealmente muitos outros desenvolvedores estão trabalhando no mesmo projeto que você, usando o mesmo repositório (ou um fork dele). Se você sobrescrever forçosamente com seu changeset, seu repositório não combinará com outras pessoas, porque "você reescreveu o histórico". Você deixará outras pessoas infelizes e o repositório sofrerá. Provavelmente um gatinho no mundo também chorará.

TL; DR

  1. Se quiser resolver, primeiro busque (e depois mescle).
  2. Se você quiser hackear, use a --forceopção.

Você pediu o primeiro, no entanto. Vá para 1) sempre, mesmo que você sempre use o git sozinho, porque é uma boa prática.

linuxbandit
fonte
5
Não é possível buscar excluir alterações importantes em arquivos locais?
Leonardo Castro
2
Não muda após uma busca
dhein de
@dhein como escrevi, a busca deve ser seguida por uma mesclagem - o ponto é que você tem que "alinhar" a árvore local com a árvore remota (portanto, com a mesclagem) - mas obrigado, eu escrevi isso no TL; DR também
linuxbandit
84

experimentar:

git fetch origin master
git merge origin master

Depois de escrever este código, recebi outro erro: (non-fast-forward)

Eu escrevo este código:

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

E resolveu meu problema

Aurelio A
fonte
O mesmo para mim. Isso resolveu meu problema. Existem alguns avisos. Eu baguncei um sub-repositório, mas resolvi com o seguinte: stackoverflow.com/questions/19584255/…
M. Beausoleil
1
@Aurelio A Seu comando merge está incorreto, deveria estar git merge master.
mike
Por que precisamos usar git branch -D tmp?
Милош Вељковић
Solução muito útil (+1)
HuserB1989
25

Você deve usar git pull, esse comando faça ae em git fetchseguida faça o git merge.

Se você usar um git push origin master --forcecomando, poderá ter problemas no futuro.

Unai Sainz de la Maza
fonte
1
É correto que você só deva usar --force se for o único no projeto e estiver ficando frustrado ao tentar fazer seu primeiro push?
notas de
20

pull é sempre a abordagem certa, mas uma exceção pode ser quando você está tentando converter um sistema de arquivos sem Git em um repositório Github. Lá você teria que forçar o primeiro commit.

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
fonte
funciona para mim, comecei novamente um novo projeto (mesmo repo) e queria substituí-lo.
ucotta
17

Tente este comando git

git push origin master --force

ou com falta de força -f

git push origin master -f


fonte
2
Isso substitui a restrição do git push. Não recomendado para trabalho em equipe. Da documentação do git push: Se outra pessoa construiu sobre o seu histórico original enquanto você está rebasing, a ponta do branch no remoto pode avançar com o commit dela, e empurrar cegamente com --force perderá o trabalho dela .
Casey
10

Conforme indicado na mensagem de erro, você deve "buscar primeiro". Isso funcionou para mim. Use o comando:

  1. git fetch origin master

Em seguida, siga estas etapas para mesclar:

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

Tente este comando para resolver -

git push origin master --force

Ou

 git push origin master -f
Mahfujur Rahman
fonte
3

Você pode usar o seguinte comando: Primeiro clone uma nova cópia de seu repo, usando a sinalização --mirror:

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

Em seguida, siga os códigos de acordo:

Adicionar um projeto existente ao GitHub usando a linha de comando

Mesmo que isso não funcione, você pode simplesmente codificar:

$ git push origin master --force 

ou

$ git push origin master -f
Tanuj Chakraborty
fonte
3

Siga as etapas abaixo, pois também tive o mesmo problema:

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

(Para ver se a filial local pode ser facilmente mesclada com uma remota)

$ git push -u origin master 

(Agora envie todo o conteúdo do repositório git local para o seu repositório online)

Bhavdeep Kaur
fonte
2

É provável que outra pessoa (por exemplo, seu colega) tenha colocado commits origin/masterque não estão em seu masterbranch local , e você está tentando enviar alguns commits de seu branch local para o servidor. Em 99% dos casos, supondo que você não queira apagar o trabalho deles origin, você tem duas opções:

2) Mesclar suas alterações em seu branch local e, em seguida, enviar o resultado mesclado. git checkout master git pull # resolve conflicts here git push

(Observe que git pullé essencialmente apenas um git fetche git mergeneste caso.)

1) Rebase seu branch local, de forma que pareça que seu colega fez seus commits primeiro, e então você fez seus commits. Isso mantém o histórico de commits bom e linear - e evita um "commit de mesclagem". No entanto, se você tiver conflitos com as mudanças do seu colega, você pode ter que resolver esses conflitos para cada um de seus commits (ao invés de apenas uma vez) no pior caso. Essencialmente, isso é mais agradável para todos, mas mais esforço para você. git pull --rebase # resolve conflicts here git push

(Observe que git pull --rebaseé essencialmente ae git fetcha git rebase origin/master.)

Chrispher
fonte
2

Às vezes isso acontece quando você duplica arquivos, normalmente tipo README.

Jarosław Cichoń
fonte
1

Seu erro pode ser devido ao branch de mesclagem.
Basta seguir isto:

etapa 1: git pull origin master(caso você receba alguma mensagem, ignore-a)
etapa 2: git add .
etapa 3: git commit -m 'your commit message'
etapa 4:git push origin master

divyang hirpara
fonte
1

Primeiro, você deve usar git pull, depois o comando do a git fetche em seguida fazer o git merge.

Se você usar um git push origin master --forcecomando, poderá ter problemas no futuro.

imkanaram
fonte
1

Eu superei isso fazendo check-out de um novo branch como este:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

Você fica com 2 ramos: Master e newbranch, que você pode gerenciar para fundir mais tarde.

user3826395
fonte
0

Problema resolvido

Problema que tive

! [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.

Eu também tive o mesmo problema. O problema é que seus commitsoutros repositórios não foram bem pushed- sucedidos, então você precisa executar os seguintes comandos:

  1. git fetch origin master

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

  2. git merge origin master

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

  3. git push

    resultado: 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

Muito obrigado

Marshal D. Teach
fonte
0

Você apenas tem que mencionar o nome do seu ramo junto com o nome remoto.

git fetch origin
git merge origin/master
Amit Kharel
fonte
0

No meu caso, isso aconteceu ao criar o link representante do GitHub, inicializei-o com o arquivo README

Ao criar o Git remoto, não o inicialize com o arquivo README, caso contrário, ele mostraria err

Não faça isso & definitivamente funcionará bem. Em vez disso, inicialize-o com o arquivo leia-me se desejar depois de enviar para o branch master

Arijit Kundu
fonte
0

Isso funcionou para mim, uma vez que nenhuma das outras soluções funcionou para mim. NEM MESMO FORÇA!

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line

Só tive que passar pelo Git Bash

cd REPOSITORY-NAME
git add .
git commit -m "Resolved merge conflict by incorporating both suggestions."

Então, de volta ao meu cmd e eu poderia: o git push heroku masterque no meu caso era o problema.

ChrisLee
fonte
-1

este trabalho para mim

  1. git init

  2. git add --all

3.git commit -m "nome"

4.git push origin master --force

Mizanur Rahman
fonte
-1

Isso funcionou para mim:

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

É simples usar este comando:

git push -f origin master

e fará seu trabalho

rajat prakash
fonte