Was gibt es git remote -v show
zurück, wenn es um die Herkunft geht?
Wenn origin auf github zeigt, sollte der Status aktuell sein und nicht vor einem Remote-Repo. Zumindest mit dem Git1.6.5 verwende ich für einen schnellen Test.
Um dies zu vermeiden, definieren Sie das Remote-Repo des Hauptzweigs explizit:
$ git config branch.master.remote yourGitHubRepo.git
dann sollte a git pull origin master
, gefolgt von a git status
, einen sauberen Status zurückgeben (kein Voraus).
Warum? weil der get fetch origin master (im git pull origin master enthalten) nicht nur aktualisiert würde FETCH_HEAD
(wie Charles Bailey in seiner Antwort erklärt ), sondern auch den "remote master branch" in Ihrem lokalen Git-Repository.
In diesem Fall scheint Ihr lokaler Master dem Remote-Master nicht mehr "voraus" zu sein.
Ich kann dies mit einem git1.6.5 testen:
Zuerst erstelle ich ein 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"
Ich simuliere ein GitHub-Repo, indem ich ein nacktes Repo erstelle (eines, das von überall Push erhalten kann).
PS D:\git\tests\pullahead\workrepo> cd ..
PS D:\git\tests\pullahead> git clone --bare workrepo github
Ich füge meinem Arbeits-Repo ein Modif hinzu, das ich zum Github-Repo drücke (als Fernbedienung hinzugefügt).
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
Ich erstelle ein von GitHub geklontes Home-Repo, in dem ich einige Änderungen vornehme, die an GitHub gesendet werden:
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
Ich klone dann Workrepo für ein erstes Experiment
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(-)
In diesem Repo erwähnt der Git-Status das Master-Geing vor ' 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)
Aber das ist nur origin
kein 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)
Aber wenn ich die Sequenz in einem Repo wiederhole, das einen Ursprung für Github hat (oder überhaupt keinen Ursprung, nur einen entfernten 'Github' definiert), ist der Status sauber:
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)
Wenn ich nur origin
darauf zeigen würde github
, status
wäre sauber für git1.6.5.
Es kann mit einer "Voraus" -Warnung für frühere Git sein, aber auf jeden git config branch.master.remote yourGitHubRepo.git
Fall sollte eine explizit definierte in der Lage sein, dies auch mit frühen Versionen von Git zu erledigen.
git push
scheint es auch zu lösen (Berichterstattung "alles auf dem neuesten Stand").