Eu sou um novato no Git. Recentemente, mudei um projeto Rails do Subversion para o Git. Segui o tutorial aqui: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
Também estou usando unfuddle.com para armazenar meu código. Eu faço alterações no meu laptop Mac no trem para / do trabalho e as empurro para que eu não se mexa quando tiver uma conexão de rede usando o seguinte comando:
git push unfuddle master
Eu uso o Capistrano para implantações e recebo o código do repositório unfuddle usando a ramificação principal.
Ultimamente, tenho notado a seguinte mensagem quando executo o "status git" no meu laptop:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
E eu estou confuso sobre o porquê. Eu pensei que meu laptop era a origem ... mas não sei se o fato de eu ter originalmente retirado do Subversion ou enviado para o Unfuddle é o que está causando a mensagem aparecer. Como posso:
- Descubra onde o Git pensa 'origem / mestre'?
- Se estiver em outro lugar, como transformar meu laptop na 'origem / mestre'?
- Faça com que esta mensagem desapareça. Isso me faz pensar que Git está infeliz com alguma coisa.
Meu mac está executando o Git versão 1.6.0.1.
Quando executo git remote show origin
conforme sugerido pelo dbr, obtenho o seguinte:
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
Quando corro git remote -v
conforme sugerido por Aristóteles Pagaltzis, obtenho o seguinte:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
Agora, curiosamente, estou trabalhando no meu projeto no geekfor
diretório, mas ele diz que minha origem é minha máquina local no gf
diretório. Eu acredito que gf
foi o diretório temporário que eu usei ao converter meu projeto do Subversion para o Git e provavelmente de onde trabalhei para me desfazer. Então, creio que fiz check-out de uma nova cópia do unfuddle para o geekfor
diretório.
Parece que devo seguir os conselhos da dbr e fazer:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
fonte
origin
repositório (apesar de não estar ciente de como isso funciona em termos de git) - remover o controle remoto dificilmente seria uma coisa útil a fazer por ele.Cheguei a essa pergunta procurando uma explicação sobre o significado da mensagem "seu ramo está à frente de ...", no esquema geral do git. Não há resposta para isso aqui, mas como essa pergunta aparece no topo do Google no momento em que você pesquisa a frase "Sua filial está à frente de 'origem / mestre'", e desde então eu descobri o que realmente significa a mensagem , Pensei em publicar as informações aqui.
Então, sendo um novato no Git, posso ver que a resposta que eu precisava era claramente uma resposta para o novato. Especificamente, o que a frase "seu ramo está adiantado por ..." significa que existem arquivos que você adicionou e confirmou ao seu repositório local, mas que nunca foram enviados à origem. A intenção desta mensagem é ainda mais ofuscada pelo fato de que "git diff", pelo menos para mim, não mostrou diferenças. Não foi até eu executar o "git diff origin / master" que me disseram que havia diferenças entre meu repositório local e o mestre remoto.
Então, para ficar claro:
"sua ramificação está adiantada em ..." => Você precisa enviar para o mestre remoto. Execute "git diff origin / master" para ver quais são as diferenças entre o repositório local e o repositório principal remoto.
Espero que isso ajude outros iniciantes.
(Além disso, reconheço que existem sutilezas de configuração que podem invalidar parcialmente essa solução, como o fato de o mestre não ser realmente "remoto" e que "origem" é um nome reconfigurável usado por convenção etc. Mas os novatos fazem isso. não nos importamos com esse tipo de coisa. Queremos respostas simples e diretas. Podemos ler sobre as sutilezas mais tarde, depois de resolver o problema premente.)
Conde
fonte
git diff --cached origin/master
seria uma instrução melhor aqui, pois afirma qual seria o resultado do próximo impulso? O comando destacado você tem acima mostra também arquivos não confirmadas & unstaged (eu penso, eu sou um novato git também)git fetch
se estiver recebendo esse erro após agit pull remote branch
. Seus árbitros podem estar desatualizados.git fetch
corrige isso.origin/master
parte significamaster
ramificação noorigin
repositório?# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
Mas a origem / mestre do git diff não mostra nada (e a opção --cached não altera isso). E, o git fetch não muda isso, o git pull não muda isso, o git reset --hard não altera isso. Para mudar isso, eu precisava: git reset --hard origin / master E eu escolhi essa rota porque outras pessoas estão trabalhando comigo neste repositório e eu não queria invalidar seus testes e porque não conseguia descobrir o que essas confirmações estão.git checkout master
receber a mensagem, o que significa que devogit pull origin master
antes de trabalhar. mas acho que é muito confuso, porque o texto da mensagem sugere o opostoEu tive um problema semelhante a este onde meu diretório de trabalho estava,
ahead of origin by X commits
masgit pull
estava resultandoEverything up-to-date
. Consegui corrigi-lo seguindo este conselho . Estou postando isso aqui, caso ajude alguém com um problema semelhante.A correção básica é a seguinte:
Onde as palavras entre colchetes devem ser substituídas por seu nome remoto, seu nome de filial local e seu nome de filial remota. por exemplo
fonte
git diff
não mostrou nada e, depois de fazer o que você descreveu, não recebo mais essa mensagem confusa e irritante.às vezes há uma diferença entre a versão em cache local do mestre de origem (origem / mestre) e o verdadeiro mestre de origem.
Se você executar,
git remote update
isso sincronizará novamente o mestre de origem com o mestre de origem /veja a resposta aceita para esta pergunta
Diferenças entre git pull origin master e git pull origin master /
fonte
Isso é meio absurdo:
origin
refere-se ao repositório remoto padrão - aquele em que você geralmente busca / extrai as alterações de outras pessoas.git remote -v
irá mostrar o queorigin
é;origin/master
é o seu "marcador" para o último estado conhecido damaster
ramificação doorigin
repositório e o seu própriomaster
é uma ramificação de rastreamento paraorigin/master
. Isto é tudo como deveria ser .Você não Pelo menos, não faz sentido que um repositório seja o repositório remoto padrão para si.
Não é. É apenas dizer que você fez tantos e muitos commits localmente que não estão no repositório remoto (de acordo com o último estado conhecido desse repositório).
fonte
origin
apontar para o laptop localmente, pois estar offline ou trocar de rede é um caso muito comum para dispositivos portáteis como laptops. Dessa forma, você pode usargit push
e agit pull
qualquer momento, não há necessidade de pensar se você está conectado à rede certa no momento. Esse localorigin
pode ser sincronizado com os controles remotos reais automaticamente quando um link de rede estiver disponível, dependendo do status de roaming atual. A parte problemática é quando executar qual sincronização, em comparação com a parte GIT, é bastante fácil.origin
para outro repositório no seu laptop faz todo o sentido, com certeza. Apontar oorigin
repositório para si mesmo, no entanto, não faz: não faria diferença se você executagit push
ougit pull
, já que um repositório está sempre exatamente sincronizado consigo mesmo. É errado, meio tautológico.[Solução]
^ isso resolveu para mim. O que ele fez, sincronizou meu mestre (no laptop) com a "origem" que está no servidor remoto.
fonte
Estou lutando com esse problema e nenhuma das respostas anteriores aborda a questão da maneira que eu a vejo. Eu reduzi o problema de volta ao básico para ver se posso esclarecer meu problema.
Eu crio um novo repositório (rep1), coloco um arquivo nele e o comprometo.
Eu crio um clone de rep1 e chamo de rep2. Olho dentro do rep2 e vejo o arquivo está correto.
No rep1, faço uma única alteração no arquivo e o confirmo. Em seguida, no rep1, crio um controle remoto para apontar para rep2 e enviar as alterações.
Agora, quando entro no rep2 e faço um 'status git', me dizem que estou à frente da origem.
README no rep2 é como era originalmente, antes do segundo commit. As únicas modificações que fiz foram rep1 e tudo que eu queria fazer foi enviá-las para rep2. O que é que eu não estou entendendo?
fonte
Está esperando você "empurrar". Experimentar:
$ git push
fonte
Eu tive esse problema recentemente e achei que era porque havia excluído alguns arquivos dos quais não precisava mais. O problema é que o git não sabe que os arquivos foram excluídos e vê que o servidor ainda os possui. (servidor = origem)
Então eu corri
E, em seguida, executou um commit e push.
Isso resolveu o problema.
fonte
Eu sou um novato git também. Eu tive o mesmo problema com as mensagens 'sua filial está à frente da origem / mestre por N confirma'. Fazer o sugerido 'git diff origin / master' mostrou algumas diferenças que eu não queria manter. Assim ...
Como meu clone git era para hospedagem, e eu queria uma cópia exata do repositório principal e não queria manter nenhuma alteração local, decidi salvar todo o repositório e criar um novo:
(na máquina de hospedagem)
Por conveniência, eu costumava fazer alterações no clone na minha máquina de hospedagem. Não mais. Farei essas alterações no mestre, git commit lá e executarei um git pull. Felizmente, isso deve manter meu clone do git na máquina de hospedagem em completa sincronização.
/ Nara
fonte
Eu queria saber a mesma coisa sobre o meu repo. No meu caso, eu tinha um controle remoto antigo que não estava mais pressionando, então precisava removê-lo.
Obter lista de controles remotos:
Remova o que você não precisa
fonte
É possível redefinir para um commit específico antes que seus próprios commits ocorram.
Use
git log
para encontrar qual confirmação era a confirmação que você tinha antes das alterações locais.Anote as confirmações locais e redefina diretamente para a confirmação anterior:
fonte
Eu tive o problema "Sua ramificação está à frente de 'origin / master' por nn commits." quando enviei para um repositório remoto com:
Quando descobri que meu endereço remoto estava no arquivo .git / FETCH_HEAD e usei:
o problema desapareceu.
fonte