Ich bin ein Git-Neuling. Ich habe kürzlich ein Rails-Projekt von Subversion auf Git verschoben. Ich habe das Tutorial hier verfolgt: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
Ich verwende auch unfuddle.com, um meinen Code zu speichern. Ich nehme Änderungen an meinem Mac-Laptop im Zug zur / von der Arbeit vor und schiebe sie dann mit dem folgenden Befehl zum Entwirren, wenn ich eine Netzwerkverbindung habe:
git push unfuddle master
Ich verwende Capistrano für Bereitstellungen und ziehe Code mithilfe des Hauptzweigs aus dem Unfuddle-Repository.
In letzter Zeit ist mir die folgende Meldung aufgefallen, wenn ich auf meinem Laptop "git status" ausführe:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
Und ich bin verwirrt warum. Ich dachte, mein Laptop wäre der Ursprung ... aber ich weiß nicht, ob die Tatsache, dass ich ursprünglich von Subversion gezogen oder auf Unfuddle verschoben habe, dazu führt, dass die Nachricht angezeigt wird. Wie kann ich:
- Finden Sie heraus, wo Git 'origin / master' denkt?
- Wenn es woanders ist, wie verwandle ich meinen Laptop in den "Ursprung / Master"?
- Holen Sie sich diese Nachricht zu verschwinden. Ich denke, Git ist über etwas unglücklich.
Auf meinem Mac wird Git Version 1.6.0.1 ausgeführt.
Wenn ich git remote show origin
wie von dbr vorgeschlagen laufe, erhalte ich Folgendes:
~/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
Wenn ich git remote -v
wie von Aristoteles Pagaltzis vorgeschlagen laufe, erhalte ich Folgendes:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
Interessanterweise arbeite ich jetzt an meinem Projekt im geekfor
Verzeichnis, aber es besagt, dass mein Ursprung mein lokaler Computer im gf
Verzeichnis ist. Ich glaube, es gf
war das temporäre Verzeichnis, das ich beim Konvertieren meines Projekts von Subversion zu Git verwendet habe, und wahrscheinlich das, von dem aus ich mich zum Entwirren gedrängt habe. Dann glaube ich, dass ich eine neue Kopie von Unfuddle in das geekfor
Verzeichnis ausgecheckt habe .
Es sieht also so aus, als ob ich dem Rat von dbr folgen und Folgendes tun sollte:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
quelle
origin
Repository pusht (obwohl er nicht weiß, wie das in Git-Begriffen funktioniert) - das Entfernen der Fernbedienung wäre für ihn kaum eine nützliche Sache.Ich bin auf diese Frage gekommen und habe nach einer Erklärung gesucht, was die Nachricht "Ihr Zweig ist voraus ..." im allgemeinen Schema von git bedeutet. Hier gab es keine Antwort darauf, aber da diese Frage derzeit oben in Google angezeigt wird, wenn Sie nach dem Ausdruck "Ihre Filiale ist vor" Ursprung / Master "" suchen, habe ich seitdem herausgefunden, was die Nachricht wirklich bedeutet Ich dachte, ich würde die Informationen hier posten.
Als Git-Neuling kann ich sehen, dass die Antwort, die ich brauchte, eine ausgesprochen neue Antwort war. Konkret bedeutet der Ausdruck "Ihr Zweig ist voraus ...", dass Sie Dateien hinzugefügt und in Ihr lokales Repository übernommen haben, diese jedoch nie an den Ursprung verschoben haben. Die Absicht dieser Nachricht wird weiter durch die Tatsache verschleiert, dass "git diff", zumindest für mich, keine Unterschiede zeigte. Erst als ich "git diff origin / master" ausführte, wurde mir gesagt, dass es Unterschiede zwischen meinem lokalen Repository und dem Remote-Master gibt.
Also, um klar zu sein:
"Ihre Niederlassung ist um ..." => Sie müssen zum Remote-Master pushen. Führen Sie "git diff origin / master" aus, um festzustellen, welche Unterschiede zwischen Ihrem lokalen Repository und dem Remote-Master-Repository bestehen.
Hoffe das hilft anderen Neulingen.
(Ich erkenne auch, dass es Konfigurations-Feinheiten gibt, die diese Lösung teilweise ungültig machen können, z. B. die Tatsache, dass der Master möglicherweise nicht "remote" ist und dass "origin" ein rekonfigurierbarer Name ist, der von Konventionen usw. verwendet wird. Neulinge tun dies jedoch Wir wollen einfache, unkomplizierte Antworten. Wir können später über die Feinheiten lesen, sobald wir das dringende Problem gelöst haben.)
Graf
quelle
git diff --cached origin/master
bessere Anweisung, da dort angegeben wird, was das Ergebnis des nächsten Pushs sein würde ? Der hervorgehobene Befehl, den Sie oben haben, zeigt auch nicht festgeschriebene und nicht bereitgestellte Dateien (ich denke, ich bin auch ein Git-Neuling)git fetch
wenn Sie diesen Fehler nach a erhaltengit pull remote branch
. Ihre Refs sind möglicherweise veraltet.git fetch
behebt das.origin/master
Teilmaster
Zweig imorigin
Repo?# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
aber Git Diff Origin / Master zeigt nichts an (und die Option --cached ändert dies nicht). Und Git-Abruf ändert dies nicht, Git-Pull ändert dies nicht, Git-Reset - Hard ändert dies nicht. Um dies zu ändern, brauchte ich: git reset --hard origin / master Und ich wähle diese Route, weil andere Leute mit mir in diesem Repository arbeiten und ich ihre Tests nicht ungültig machen wollte und weil ich nicht herausfinden konnte, was diese Commits sind sind.git checkout master
die Nachricht bekomme, was bedeutet, dass ichgit pull origin master
vor der Arbeit sollte. aber ich finde es sehr verwirrend, weil der Wortlaut der Nachricht das Gegenteil nahelegtIch hatte ein ähnliches Problem wie mein Arbeitsverzeichnis,
ahead of origin by X commits
aber dasgit pull
führte dazuEverything up-to-date
. Ich habe es geschafft, das Problem zu beheben, indem ich diesen Rat befolgt habe . Ich poste dies hier, falls es jemand anderem mit einem ähnlichen Problem hilft.Die grundlegende Lösung lautet wie folgt:
Wo die Wörter in Klammern durch Ihren Remote-Namen, Ihren lokalen Filialnamen und Ihren Remote-Filialnamen ersetzt werden sollen. z.B
quelle
git diff
habe nichts gezeigt, und nachdem ich das getan habe, was du beschrieben hast, bekomme ich diese verwirrende und nervige Nachricht nicht mehr.Manchmal gibt es einen Unterschied zwischen der lokal zwischengespeicherten Version des Ursprungsmasters (Ursprung / Master) und dem wahren Ursprungsmaster.
Wenn Sie
git remote update
dies ausführen, wird der Ursprungsmaster mit dem Ursprung / Master neu synchronisiertsiehe die akzeptierte Antwort auf diese Frage
Unterschiede zwischen Git Pull Origin Master und Git Pull Origin / Master
quelle
Das ist irgendwie unsinnig:
origin
bezieht sich auf das Standard-Remote-Repository - das, aus dem Sie normalerweise die Änderungen anderer Personen abrufen / abrufen.git remote -v
wird dir zeigen, wasorigin
ist;origin/master
ist Ihr "Lesezeichen" für den letzten bekannten Status desmaster
Zweigs desorigin
Repositorys, und Ihr eigenermaster
ist ein Verfolgungszweig fürorigin/master
. Das ist alles so wie es sein sollte .Das tust du nicht. Zumindest macht es keinen Sinn, dass ein Repository das Standard-Remote-Repository für sich selbst ist.
Ist es nicht. Es wird Ihnen lediglich mitgeteilt, dass Sie lokal so und so viele Commits durchgeführt haben, die sich nicht im Remote-Repository befinden (gemäß dem letzten bekannten Status dieses Repositorys).
quelle
origin
lokal auf den Laptop zu verweisen, da Offline- oder Netzwerkwechsel ein sehr häufiger Fall für tragbare Geräte wie Laptops sind. Auf diese Weise Sie verwenden könnengit push
undgit pull
jederzeit, über keine Notwendigkeit zu denken , wenn Sie sich gerade an der richtigen Netzwerk verbunden sind. Diese lokaleorigin
Verbindung kann abhängig vom aktuellen Roaming-Status automatisch mit den realen Fernbedienungen synchronisiert werden, wenn eine Netzwerkverbindung verfügbar ist. Der problematische Teil ist, wann welche Synchronisierung ausgeführt werden soll, im Vergleich dazu ist der GIT-Teil recht einfach.origin
auf ein anderes Repository auf Ihrem Laptop ist natürlich absolut sinnvoll. Das Zeigenorigin
des Repository an sich aber nicht: es würde keinen Unterschied machen wird , ob Sie laufengit push
odergit pull
, da ein Repository immer genau synchron mit sich selbst sowieso. Es ist ähm, irgendwie tautologisch.[Lösung]
^ das hat es für mich gelöst. Was es getan hat, es hat meinen Master (auf dem Laptop) mit "origin" synchronisiert, der sich auf dem Remote-Server befindet.
quelle
Ich habe mit diesem Problem zu kämpfen und keine der vorherigen Antworten befasst sich mit der Frage, wie ich sie sehe. Ich habe das Problem auf die Grundlagen reduziert, um zu sehen, ob ich mein Problem klarstellen kann.
Ich erstelle ein neues Repository (rep1), lege eine Datei hinein und schreibe es fest.
Ich erstelle einen Klon von rep1 und nenne ihn rep2. Ich schaue in rep2 und sehe, dass die Datei korrekt ist.
In rep1 nehme ich eine einzelne Änderung an der Datei vor und schreibe sie fest. Dann erstelle ich in rep1 eine Fernbedienung, die auf rep2 zeigt und die Änderungen überträgt.
Wenn ich jetzt in rep2 gehe und einen 'Git-Status' mache, wird mir gesagt, dass ich dem Ursprung voraus bin.
README in rep2 ist wie ursprünglich vor dem zweiten Commit. Die einzigen Änderungen, die ich vorgenommen habe, sind rep1 und alles, was ich tun wollte, war, sie an rep2 zu senden. Was begreife ich nicht?
quelle
Es wartet darauf, dass Sie "pushen". Versuchen:
$ git push
quelle
Ich hatte dieses Problem kürzlich und dachte, es lag daran, dass ich einige Dateien gelöscht hatte, die ich nicht mehr brauchte. Das Problem ist, dass git nicht weiß, dass die Dateien gelöscht wurden und es sieht, dass der Server sie noch hat. (Server = Ursprung)
Also rannte ich
Und dann lief ein Commit und Push.
Das hat das Problem gelöst.
quelle
Ich bin auch ein Idiot. Ich hatte das gleiche Problem mit den Nachrichten "Ihr Zweig ist durch N Commits vor dem Ursprung / Master". Das Ausführen des vorgeschlagenen 'git diff origin / master' zeigte einige Unterschiede, die ich nicht behalten wollte. So ...
Da mein Git-Klon für das Hosting vorgesehen war und ich eine genaue Kopie des Master-Repos wollte und keine lokalen Änderungen vornehmen wollte, beschloss ich, mein gesamtes Repo zu speichern und ein neues zu erstellen:
(auf dem Hosting-Computer)
Aus Gründen der Zweckmäßigkeit habe ich Änderungen am Klon auf meinem Hosting-Computer vorgenommen. Nicht mehr. Ich werde diese Änderungen am Master vornehmen, dort ein Git-Commit durchführen und einen Git-Pull durchführen. Hoffentlich sollte dies meinen Git-Klon auf dem Hosting-Computer vollständig synchron halten.
/ Nara
quelle
Ich habe mich das Gleiche über mein Repo gefragt. In meinem Fall hatte ich eine alte Fernbedienung, auf die ich nicht mehr drückte, also musste ich sie entfernen.
Liste der Fernbedienungen abrufen:
Entfernen Sie die nicht benötigte
quelle
Es ist möglich, auf ein bestimmtes Commit zurückzusetzen, bevor Ihre eigenen Commits stattfinden.
Verwenden
git log
Sie diese Option, um herauszufinden, welches Commit das Commit war, das Sie vor den lokalen Änderungen hatten.Beachten Sie die lokalen Commits und setzen Sie sie direkt auf das vorherige Commit zurück:
quelle
Ich hatte das Problem "Ihre Filiale liegt bei nn Commits vor 'origin / master'." als ich zu einem Remote-Repository pushe mit:
Als ich feststellte, dass sich meine Remote-Adresse in der Datei .git / FETCH_HEAD befand und verwendet wurde:
Das Problem verschwand.
quelle