Git push não fará nada (tudo atualizado)


100

Estou tentando atualizar um repositório Git no GitHub. Fiz um monte de mudanças, adicionei-as, enviei commit e tentei fazer a git push. A resposta me diz que tudo está atualizado, mas claramente não está.

git remote show origin

responde com o repositório que eu esperava.

Por que o Git está me dizendo que o repositório está atualizado quando há commits locais que não são visíveis no repositório?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

Respostas:


142

git pushnão envia todos os seus branches locais: como ele saberia para quais branches remotos enviá-los? Ele apenas envia por push os branches locais que foram configurados para enviar para um branch remoto específico.

Na minha versão do Git (1.6.5.3), quando eu o executo, git remote show originele realmente imprime quais branches estão configurados para push:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q. Mas eu poderia continuar mastersem me preocupar com tudo isso!

Quando você git clone, por padrão, ele configura seu masterbranch local para enviar para o masterbranch remoto (conhecido localmente como origin/master), então se você apenas se compromete master, então um simples git pushsempre enviará suas alterações de volta.

No entanto, a partir do snippet de saída que você postou, você está em um branch chamado develop, que eu acho que não foi configurado para enviar para nada. Então, git pushsem argumentos, não enviaremos commits naquele branch.

Quando diz "Tudo atualizado", significa "todos os branches que você me disse como empurrar estão atualizados".

Q. Então, como posso enviar meus commits?

Se o que você deseja fazer é colocar suas alterações de developem origin/master, provavelmente deve mesclá-las em seu local mastere enviar:

git checkout master
git merge develop
git push             # will push 'master'

Se o que você deseja é criar um developbranch remoto, separar de mastere fornecer argumentos para git push:

git push origin develop

Isso irá: criar um novo branch no remoto chamado develop; e atualize essa filial com sua developfilial local ; e definido developcomo push to origin/developpara que, no futuro, o push git pushsem argumentos seja feitodevelop automaticamente

Se quiser enviar seu local developpara um branch remoto chamado de algo diferente develop , você pode dizer:

git push origin develop:something-else

No entanto, esse formulário não será configurado developpara enviar sempre origin/something-elseno futuro; é uma operação de um único tiro.


Muito obrigado, sua origem do git push se desenvolve: algo-else respondeu à pergunta que eu não conseguia obter por um tempo.
Antroid

1
No meu caso git push origin xainda não estava configurando o branch x para ser empurrado no futuro. Era devido a um pushspec específico na .gitconfig [remote "origin"]seção que estava causando o comportamento do git.
Raman

27

Isso aconteceu comigo quando meu aplicativo SourceTree travou durante o teste. E na linha de comando, parecia que o anterior git addhavia sido corrompido. Se for esse o caso, tente:

git init
git add -A
git commit -m 'Fix bad repo'
git push

No último comando, você pode precisar definir a ramificação.

git push --all origin master

Lembre-se de que isso é o suficiente se você não tiver feito nenhuma ramificação ou algo desse tipo. Nesse caso, certifique-se de enviar para o branch correto like git push origin develop.


15

Experimentar:

git push --all origin

isso empurra os commits para branches separados no repo, não de um branch para o master.
Sreedevi J

13

Por favor, tente ir para o último commit e então faça git push origin HEAD:master.


1
Isso realmente funcionou. Você gostaria de explicar por que funcionou?
René Nyffenegger

Textualmente dos documentos:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

Funcionou para mim também
Jerad Rutnam

Eu comparei como meu repo está configurado e todas as ramificações pareciam iguais. No entanto, em um ramo que eu não poderia simplesmente usar git push: / Isso funcionou para mim assim: git push origin HEAD:my_branch_name.
iaforek de

6

Para o meu caso, nenhuma das outras soluções funcionou. Tive que fazer um backup dos novos arquivos modificados (mostrado com git status) e executar a git reset --hard. Isso me permitiu realinhar com o servidor remoto. Adicionando novos arquivos modificados e executando

git add .
git commit -am "my comment"
git push

Fez o truque. Espero que isso ajude alguém, como uma solução de "última chance".


4

Agora, parece que você está no branch de desenvolvimento. Você tem um ramo de desenvolvimento na sua origem? Se não, tente git push origin develop. git pushfuncionará assim que souber sobre um branch de desenvolvimento em sua origem.

Como leitura adicional, eu daria uma olhada nas páginas de manual do git-push , em particular, a seção de exemplos.


3

Para ser específico, se você deseja mesclar algo para dominar, você pode seguir os passos abaixo.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

É uma prática comum no modelo de solicitação pull criar em uma nova ramificação local e, em seguida, enviar essa ramificação para remoto. Para isso, você precisa mencionar onde deseja enviar suas alterações remotamente. Você pode fazer isso mencionando remoto no momento do envio.

git push origin develop // It will create a remote branch with name "develop".

Se você deseja criar um branch diferente do seu nome de branch local, você pode fazer isso com o seguinte comando.

git push origin develop:some-other-name

2

Graças a Sam Stokes. De acordo com a resposta dele você pode resolver o problema de maneira diferente (usei dessa forma). Depois de atualizar seu diretório de desenvolvimento, você deve reinicializá-lo

git init

Então você pode enviar e enviar atualizações para o mestre


1
Obrigado! No meu caso, digite: git inite abra uma nova guia de comando, digite:git push origin branch_name
s7ven

2

Isso aconteceu comigo quando eu estava ^Cno meio de uma visita git pushao GitHub. O GitHub não mostrou que as alterações foram feitas, no entanto.

Para consertar, fiz uma alteração em minha árvore de trabalho, confirmei e empurrei novamente. Funcionou perfeitamente bem.


2

Isso aconteceu comigo. Acabei de comprometer novamente as alterações e, em seguida, enviei.


2

Eu tentei muitos métodos, inclusive os definidos aqui. O que eu tenho é,

  • Certifique-se de que o nome do repositório é válido. A melhor maneira é copiar o link do site do repositório e colar no git bash.

  • Certifique-se de ter confirmado os arquivos selecionados.

    git commit -m "Your commit here"
    
  • Se ambas as etapas não funcionarem, tente

    git push -u -f origin master


1

Em vez disso, você pode tentar o seguinte. Você não tem que ir master; você pode forçar diretamente o envio das alterações de seu próprio branch.

Conforme explicado acima, quando você faz um rebase, está alterando o histórico em seu branch. Como resultado, se você tentar fazer um normal git pushapós um rebase, o Git irá rejeitá-lo porque não há um caminho direto do commit no servidor para o commit no seu branch. Em vez disso, você precisará usar o sinalizador -fou --forcepara dizer ao Git que sim, você realmente sabe o que está fazendo. Ao fazer push push, é altamente recomendado que você defina sua push.defaultconfiguração como simples, que é o padrão no Git 2.0. Para certificar-se de que sua configuração está correta, execute:

$ git config --global push.default simple

Assim que estiver correto, você pode simplesmente executar:

$ git push -f

E verifique sua solicitação de pull. Deve ser atualizado!

Vá para a parte inferior de Como fazer o rebase de uma solicitação pull para obter mais detalhes.


0

Certifique-se também de que está empurrando para o branch correto.


0

Isso aconteceu comigo quando tentei empurrar de um novo branch e usei em seu git push origin masterlugar. Você deve:

  • Use: git push origin your_new_branchse quiser que este branch também ocorra no repo remoto.
  • Caso contrário, verifique as coisas de mesclagem do branch master e depois empurre de master para git repo com git merge origin master.

Recapitulando: o ponto aqui é que você deve verificar onde você oferece o segundo parâmetro para git merge. Portanto, se você estiver no master, use master como o segundo parâmetro, se você estiver no new_branch, use-o como o segundo parâmetro se quiser manter este branch no repositório remoto, caso contrário, opte pela segunda opção acima.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.