O que git remote -v show
retorna quando se trata de origem?
Se a origem apontar para o github, o status deve ser atualizado e não antes de qualquer repo remoto. Pelo menos, com o Git1.6.5 estou usando para um teste rápido.
De qualquer forma, para evitar isso, defina explicitamente o repo remoto do branch master:
$ git config branch.master.remote yourGitHubRepo.git
em seguida git pull origin master
, a , seguido por a, git status
deve retornar um status limpo (sem à frente).
Por quê? porque o get fetch origin master (incluído no git pull origin master) não apenas atualizaria FETCH_HEAD
(como Charles Bailey explica em sua resposta ), mas também atualizaria o "branch master remoto" dentro do seu repositório Git local.
Nesse caso, seu mestre local não pareceria mais estar "à frente" do mestre remoto.
Posso testar isso, com um git1.6.5:
Primeiro eu crio um workrepo:
PS D:\git\tests> cd pullahead
PS D:\git\tests\pullahead> git init workrepo
Initialized empty Git repository in D:/git/tests/pullahead/workrepo/.git/
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo firstContent > afile.txt
PS D:\git\tests\pullahead\workrepo> git add -A
PS D:\git\tests\pullahead\workrepo> git commit -m "first commit"
Eu simulo um repositório GitHub criando um repositório simples (que pode receber push de qualquer lugar)
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
Eu adiciono um modif ao meu repo de trabalho, que empurro para o repo do github (adicionado como um remoto)
PS D:\git\tests\pullahead> cd workrepo
PS D:\git\tests\pullahead\workrepo> echo aModif >> afile.txt
PS D:\git\tests\pullahead\workrepo> git ci -a -m "a modif to send to github"
PS D:\git\tests\pullahead\workrepo> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo> git push github
Eu crio um repositório doméstico, clonado do GitHub, no qual faço algumas modificações, enviadas ao GitHub:
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone github homerepo
PS D:\git\tests\pullahead> cd homerepo
PS D:\git\tests\pullahead\homerepo> type afile.txt
firstContent
aModif
PS D:\git\tests\pullahead\homerepo> echo aHomeModif1 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a first home modif"
PS D:\git\tests\pullahead\homerepo> echo aHomeModif2 >> afile.txt
PS D:\git\tests\pullahead\homerepo> git ci -a -m "a second home modif"
PS D:\git\tests\pullahead\homerepo> git push github
Eu então clono o workrepo para um primeiro experimento
PS D:\git\tests\pullahead\workrepo4> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo2
Initialized empty Git repository in D:/git/tests/pullahead/workrepo2/.git/
PS D:\git\tests\pullahead> cd workrepo2
PS D:\git\tests\pullahead\workrepo2> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo2> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
Nesse repo, git status menciona master geing antes de ' origin
':
PS D:\git\tests\pullahead\workrepo5> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
Mas isso só origin
não é github:
PS D:\git\tests\pullahead\workrepo2> git remote -v show
github d:/git/tests/pullahead/github (fetch)
github d:/git/tests/pullahead/github (push)
origin D:/git/tests/pullahead/workrepo (fetch)
origin D:/git/tests/pullahead/workrepo (push)
Mas se eu repetir a sequência em um repo que tem uma origem no github (ou nenhuma origem, apenas um 'github' remoto definido), o status é limpo:
PS D:\git\tests\pullahead\workrepo2> cd ..
PS D:\git\tests\pullahead> git clone workrepo workrepo4
PS D:\git\tests\pullahead> cd workrepo4
PS D:\git\tests\pullahead\workrepo4> git remote rm origin
PS D:\git\tests\pullahead\workrepo4> git remote add github d:/git/tests/pullahead/github
PS D:\git\tests\pullahead\workrepo4> git pull github master
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From d:/git/tests/pullahead/github
* branch master -> FETCH_HEAD
Updating c2763f2..75ad279
Fast forward
afile.txt | Bin 46 -> 98 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
PS D:\git\tests\pullahead\workrepo4> git status
# On branch master
nothing to commit (working directory clean)
Se eu tivesse apenas origin
apontando github
, status
estaria limpo para git1.6.5.
Pode ser com um aviso 'à frente' para o git anterior, mas de qualquer maneira, um git config branch.master.remote yourGitHubRepo.git
definido explicitamente deve ser capaz de cuidar disso, mesmo com as primeiras versões do Git.
git push
também parecerá resolvê-lo (relatando "tudo atualizado").