Qu'est-ce que les git remote -v show
retours en termes d'origine?
Si l'origine pointe vers github, le statut doit être à jour et ne doit pas être antérieur à un dépôt distant. Au moins, avec le Git1.6.5, j'utilise pour un test rapide.
Quoi qu'il en soit, pour éviter cela, définissez explicitement le dépôt distant de la branche principale:
$ git config branch.master.remote yourGitHubRepo.git
puis a git pull origin master
, suivi d'un git status
devrait retourner un statut propre (pas d'avance).
Pourquoi? parce que le maître d'origine get fetch (inclus dans le maître d'origine git pull) ne ferait pas que mettre à jour FETCH_HEAD
(comme l' explique Charles Bailey dans sa réponse ), mais il mettrait également à jour la "branche principale distante" dans votre dépôt Git local.
Dans ce cas, votre maître local ne semble plus être "en avance" sur le maître distant.
Je peux tester cela, avec un git1.6.5:
Je crée d'abord un 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"
Je simule un dépôt GitHub en créant un dépôt nu (qui peut recevoir des push de n'importe où)
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
J'ajoute un modif à mon repo de travail, que je pousse vers le repo github (ajouté en tant que télécommande)
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
Je crée un repo home, cloné de GitHub, dans lequel j'apporte quelques modifications, poussé vers 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
Je clone ensuite workrepo pour une première expérience
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(-)
Dans ce dépôt, git status mentionne le master geing avant ' 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)
Mais ce n'est origin
pas 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)
Mais si je répète la séquence dans un dépôt qui a une origine vers github (ou aucune origine du tout, juste un 'github' distant défini), le statut est propre:
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)
Si je n'avais que origin
pointer sur github
, status
serait propre pour git1.6.5.
Cela peut être avec un avertissement 'avant' pour git antérieur, mais de toute façon, un git config branch.master.remote yourGitHubRepo.git
défini explicitement devrait être capable de s'en occuper, même avec les premières versions de Git.
git push
semblera également le résoudre (rapporter «tout à jour»).