Wie kommt das eigentlich zustande?
Ich arbeite momentan alleine in einem Repo, also ist dies mein Workflow:
- Dateien ändern
- Verpflichten
- Wiederholen Sie 1-2 bis zufrieden
- Zum Master drücken
Wenn ich dann eine mache git status
, wird mir mitgeteilt, dass mein Zweig um X Commits voraus ist (vermutlich die gleiche Anzahl von Commits, die ich gemacht habe). Liegt es daran, dass beim Pushen des Codes Ihre lokal zwischengespeicherten Dateien (in den .git-Ordnern) nicht aktualisiert werden? git pull
scheint diese seltsame Nachricht zu "reparieren", aber ich bin immer noch neugierig, warum es passiert, vielleicht verwende ich Git falsch?
einschließlich des Zweigs, der in der Nachricht gedruckt wird
Meine lokale Niederlassung ist dem Meister voraus
Wo drückst / ziehst du den aktuellen Zweig?
Ich drücke auf GitHub und ziehe auf den Computer, an dem ich gerade arbeite. Meine lokale Kopie ist immer auf dem neuesten Stand, da ich der einzige bin, der daran arbeitet.
Das Remote-Repo wird nicht überprüft
Das dachte ich mir, ich dachte mir, ich würde sicherstellen, dass ich es richtig verstehe.
Übergeben Sie einige zusätzliche Argumente?
Keine, die ich sehen kann, vielleicht läuft an meinem Ende eine lustige Konfiguration?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
quelle
push
und was sind deine Remote- und Branch-Konfigurationseinstellungen?git status
Überprüft zwar nicht das Remote-Repository,git pull
tut es aber. Wenn Sie einen Tracking-Zweig für ein Repository haben, an das Sie einen Push senden,git push
wird Ihr lokaler Tracking-Zweig aktualisiert, um den neuen Status des Remote-Zweigs widerzuspiegeln, wenn Ihr Push erfolgreich ist. Aus diesem Grund habe ich nach der Konfiguration des Fragestellers gefragt, da bei einem nicht korrekten Vorgang wahrscheinlich ein Konfigurationsfehler vorliegt.git status
? Ja wirklich? Meinergit status
sagt mir nie, wie weit mein Zweig voraus ist. Geben Sie ihm einige zusätzliche Argumente?git status
nicht zum Remote-Repository, um zu überprüfen, ob der Remote-Zweig aktualisiert wurde. Hier erfahren Sie, wie weit Ihre lokale Niederlassung im Vergleich zu Ihrer lokal gespeicherten Remote-Tracking-Niederlassung voraus ist . Das Problem ist, dass ein Normalergit push
(sowie Abrufen und Ziehen) den Remote-Tracking-Zweig aktualisieren sollte und für den Fragesteller dies anscheinend nicht funktioniert. Um zu sehen, warum wir sowohl die genaue Form dergit push
verwendeten als auch die Konfiguration des lokalen Repositorys sehen müssen, kann ich dies derzeit nicht sehen, da der Fragesteller bereits eine Antwort akzeptiert hat.Antworten:
Wenn Sie diese Meldung nach a erhalten
git pull remote branch
, versuchen Sie, sie mit a zu verfolgengit fetch
. (Optional können Siegit fetch -p
gelöschte Zweige aus dem Repo entfernen.)Fetch scheint die lokale Darstellung des Remote-Zweigs zu aktualisieren, was nicht unbedingt der Fall ist, wenn Sie a ausführen
git pull remote branch
.quelle
Verwenden
Die Option --rebase bedeutet, dass git Ihr lokales Commit beiseite schiebt, mit der Fernbedienung synchronisiert und dann versucht, Ihre Commits aus dem neuen Status anzuwenden.
quelle
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
, und schreiben Sie den Verlauf niemals sinnlos neu!Verwenden Sie diese 3 einfachen Befehle
Schritt 1 :
git checkout <branch_name>
Schritt 2 :
git pull -s recursive -X theirs
Schritt 3 :
git reset --hard origin/<branch_name>
Weitere Details: https://stackoverflow.com/a/39698570/2439715
Genießen.
quelle
git reset --hard origin/master
es für mich geklärt.Ich denke, Sie verstehen die Nachricht falsch - Ihre Niederlassung ist nicht voraus
master
, das ist siemaster
. Es ist vororigin/master
, die eine ist Remote - Tracking - Zweig , der den Status des Remote - Repository von Ihrem letzten aufzeichnetpush
,pull
oderfetch
. Es sagt dir genau, was du getan hast; Sie sind der Fernbedienung vorausgegangen und es erinnert Sie daran, zu drücken.quelle
Jemand sagte, Sie könnten Ihre Nachricht falsch lesen, das sind Sie nicht. Dieses Problem hat tatsächlich mit Ihrer
<project>/.git/config
Datei zu tun . Darin wird ein ähnlicher Abschnitt sein:Wenn Sie die Abrufzeile aus der .git / config-Datei Ihres Projekts entfernen, wird die Meldung "Ihr Zweig liegt durch
N
Commits vor 'origin / master'" gestoppt . Ärger vom Auftreten.Zumindest hoffe ich. :) :)
quelle
ahead by x commits
Nachricht sehe . Ich habe die Nachricht eine Weile nicht gesehen.Ich hatte dieses Problem auf meinem Bühnenserver, wo ich nur ziehe. Und ein Hard-Reset hat mir geholfen, HEAD auf die gleiche Weise wie Remote zu reinigen.
Also jetzt habe ich wieder:
quelle
Das hat bei mir funktioniert
git reset --hard origin/master
Die Ausgabe muss so aussehen
On branch dev HEAD is now at ae1xc41z Last commit message
quelle
In meinem Fall lag es daran, dass ich mit Master auf Master umgestiegen bin
Nur um die neue Version davon statt zu ziehen
Der erste Befehl setzt den Master-Kopf auf meine letzten Commits zurück
ich benutzte
Um das zu beheben
quelle
Ich habe jede Lösung auf dieser Seite durchgesehen und zum Glück hat @ anatolii-pazhyn einen Kommentar abgegeben, weil seine Lösung funktioniert hat. Leider habe ich nicht genug Ruf , um ihn zu bewerten, aber ich empfehle, zuerst seine Lösung auszuprobieren:
Welches gab mir:
Ich empfehle auch:
Sie können auch verwenden:
Viel Glück
quelle
Ich hatte das gleiche Problem auf einem Windows-Computer. Wenn ich einen
git pull origin master
Befehl ausführte, erhielt ich die Warnung "Vor 'Ursprung / Master' durch X-Commits". Ich stellte fest, dass ichgit pull origin
die Warnung nicht mehr erhalten würde , wenn ich stattdessen ausgeführt und den Zweig NICHT angegeben hätte.quelle
git fetch
hinter den Kulissen geschieht .Es erinnert Sie nur an die Unterschiede zwischen dem aktuellen Zweig und dem Zweig, der die aktuelle Spur erstellt. Bitte geben Sie weitere Informationen an, einschließlich des Zweigs, der in der Nachricht gedruckt ist, und wo Sie den aktuellen Zweig drücken / ziehen.
quelle
Obwohl diese Frage etwas alt ist ... Ich war in einer ähnlichen Situation und meine Antwort hier half mir, ein ähnliches Problem zu beheben, das ich hatte
Versuchen Sie es zuerst mit
push -f
oder erzwingen Sie die OptionWenn dies nicht funktioniert hat, werden möglicherweise (wie in meinem Fall) die Remote-Repositorys (oder vielmehr die Verweise auf Remote-Repositorys, die angezeigt werden
git remote -v
) möglicherweise nicht aktualisiert.Das Ergebnis davon ist, dass Ihr Push Ihren lokalen Zweig / Zweig mit Ihrem Remote / Zweig synchronisiert hat. Der Cache in Ihrem lokalen Repo zeigt jedoch weiterhin das vorherige Commit (von lokal / Zweig ... vorausgesetzt, es wurde nur ein einziges Commit gepusht) als HEAD an.
Um dies zu bestätigen, klonen Sie das Repo an einem anderen Ort und versuchen Sie, den lokalen / Zweig-HEAD und den Remote / Zweig-HEAD zu vergleichen. Wenn beide gleich sind, stehen Sie wahrscheinlich vor dem Problem, das ich gemacht habe.
Lösung:
Gehen Sie nun
push -f
wie folgt vorgit push -f github master
### Beachten Sie, dass Ihr Befehl nichtorigin
mehr hat!Mach
git pull
jetzt eingit pull github master
auf
git status
empfangen# On branch master
nothing to commit (working directory clean)
Ich hoffe, dass dies für jemanden nützlich ist, da die Anzahl der Aufrufe so hoch ist, dass bei der Suche nach diesem Fehler dieser Thread fast immer ganz oben aufgeführt wird
Siehe auch gitref für Details
quelle
Ich hatte dies tatsächlich, als ich mit TortiseGIT einen Wechsel / Checkout durchführte.
Mein Problem war, dass ich den Zweig basierend auf einem anderen lokalen Zweig erstellt hatte. Es wurde ein "Zusammenführungs" -Eintrag erstellt
/.git/config
, der ungefähr so aussah:Wo immer ich zum "Web" -Zweig wechselte, sagte es mir, dass ich mehr als 100 Commits vor der Entwicklung hatte. Nun, ich habe mich nicht mehr verpflichtet, mich zu entwickeln, also stimmte das. Ich konnte diesen Eintrag einfach entfernen und er scheint wie erwartet zu funktionieren. Es wird ordnungsgemäß mit dem Remote-Ref verfolgt, anstatt sich darüber zu beschweren, dass es sich hinter dem Entwicklungszweig befindet.
Wie Vikram sagte, ist dieser Stapelüberlauf-Thread das beste Ergebnis in Google bei der Suche nach diesem Problem, daher dachte ich, ich würde meine Situation und Lösung teilen.
quelle
Ich möchte das gleiche wiederholen, wie es von @Marian Zburlia oben erwähnt wurde. Es hat bei mir funktioniert und würde es auch anderen empfehlen.
git pull origin develop
sollte gefolgt werden von
$ git pull --rebase
.Dadurch werden die Kommentare entfernt, die
$ git status
nach dem letzten Pull angezeigt werden.quelle
git fetch
wird dies für Sie lösenWenn mein Verständnis korrekt ist, ist Ihre lokale (zwischengespeicherte)
origin/master
veraltet. Dieser Befehl aktualisiert den Repository-Status vom Server.quelle
Meine Erfahrung ist in einer Teamumgebung mit vielen Niederlassungen. Wir arbeiten in unseren eigenen Feature-Zweigen (in lokalen Klonen) und es war einer von denen, die
git status
zeigten, dass ich 11 Commits voraus war. Meine Arbeitsannahme war, wie der Autor der Frage, dass +11 von meinen eigenen Verpflichtungen stammt .Es stellte sich heraus, dass ich
develop
viele Wochen zuvor Änderungen aus dem allgemeinen Zweig in meinen Feature-Zweig übernommen hatte - aber vergessen! Als ich heute meinen lokalen Feature-Zweig erneut besuchte und einen machte,git pull origin develop
sprang die Zahl auf +41 Commits voraus. Es wurde viel Arbeit geleistet,develop
und so war mein lokaler Feature-Zweig dem Feature-Zweig imorigin
Repository noch weiter voraus .Wenn Sie diese Nachricht erhalten, denken Sie an alle Pulls / Merges zurück, die Sie möglicherweise von anderen Zweigen (von Ihnen selbst oder von anderen) durchgeführt haben, auf die Sie Zugriff haben. Die Nachricht signalisiert nur, dass Sie
git push
diesepull
Änderungenorigin
von Ihrem lokalen Repo zurück zum Repo ('Tracking Branch') benötigen, um die Synchronisierung durchzuführen.quelle
Die Antworten, die vorschlagen
git pull
odergit fetch
richtig sind.Die Nachricht wird generiert, wenn
git status
ein Unterschied zwischen.git/FETCH_HEAD
und.git/refs/remotes/<repository>/<branch>
(z.git/refs/remotes/origin/master
. B. ) festgestellt wird .Die letztere Datei zeichnet den HEAD vom letzten Abruf (für das Repository / den Zweig) auf. Dadurch werden
git fetch
beide Dateien auf den aktuellen HEAD des Zweigs aktualisiert.Wenn es nichts zu holen gibt (weil das lokale Repository bereits auf dem neuesten Stand ist),
.git/FETCH_HEAD
ändert sich dies natürlich nicht.quelle
.git/FETCH_HEAD
enthält9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
und.git/refs/remotes/origin/master
enthält9f7336c873ccffc772168bf49807e23ff74014d3
, aber ich erhalte die Nachricht immer noch und löse sie wedergit pull
nochgit fetch
löse sieWenn Sie diese Meldung nach einem Commit erhalten, um die Verfolgung der Datei in der Verzweigung aufzuheben, versuchen Sie, Änderungen an einer beliebigen Datei vorzunehmen, und führen Sie ein Commit durch. Anscheinend können Sie kein einzelnes Commit durchführen, das nur das Aufspüren der zuvor verfolgten Datei umfasst. Schließlich half mir dieser Beitrag, das ganze Problem zu lösen: https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Ich musste nur die Datei aus dem Repository-Verlauf entfernen.
quelle