Der Status sagt Ihnen, dass Sie hinter dem angerufenen Schiedsrichter stehen, origin/master
der ein lokaler Schiedsrichter in Ihrem lokalen Repo ist . In diesem Fall verfolgt diese Referenz einen Zweig in einer Fernbedienung, die aufgerufen wird origin
, aber der Status sagt nichts über den Zweig auf der Fernbedienung aus. Es handelt sich um die Referenz, bei der es sich lediglich um eine Festschreibungs-ID handelt, die in Ihrem lokalen Dateisystem gespeichert ist (in diesem Fall normalerweise in einer Datei, die .git/refs/remotes/origin/master
in Ihrem lokalen Repo aufgerufen wird ).
git pull
führt zwei Operationen aus; Zuerst wird eine git fetch
Aktualisierung der Commits im Remote-Repo durchgeführt (wodurch die origin/master
Referenz in Ihrem lokalen Repo aktualisiert wird ). Anschließend werden diese git merge
Commits in der aktuellen Verzweigung zusammengeführt.
Bis Sie den fetch
Schritt (entweder alleine oder über git pull
) ausführen, kann Ihr lokales Repo nicht erkennen, dass zusätzliche Commits vorgelagert sind, und betrachtet git status
nur Ihren lokalen origin/master
Ref.
Wenn git status
"aktuell" angezeigt wird, bedeutet dies "aktuell mit dem Zweig, den der aktuelle Zweig verfolgt", was in diesem Fall "aktuell mit dem aufgerufenen lokalen Verweis origin/master
" bedeutet. Dies entspricht nur "aktuell mit dem Upstream-Status, der beim letzten Mal abgerufen wurde fetch
", was nicht mit "aktuell mit dem neuesten Live-Status des Upstreams" identisch ist.
Warum funktioniert das so? Nun, der fetch
Schritt ist ein potenziell langsamer und teurer Netzwerkbetrieb. Das Design von Git (und anderen verteilten Versionskontrollsystemen ) dient dazu, Netzwerkoperationen zu vermeiden, wenn dies nicht erforderlich ist, und ist ein völlig anderes Modell als das typische Client-Server-System, an das viele Menschen gewöhnt sind (obwohl, wie in den Kommentaren unten ausgeführt, das Konzept von Git eines "Remote Tracking Branch", der hier Verwirrung stiftet, wird nicht von allen DVCSs geteilt). Es ist durchaus möglich, Git offline ohne Verbindung zu einem zentralen Server zu verwenden, und die Ausgabe von git status
spiegelt dies wider.
Das Erstellen und Wechseln von Zweigen (und das Überprüfen ihres Status) in Git soll einfach sein und nicht einen langsamen Netzwerkbetrieb für ein zentrales System ausführen. Die Annahme beim Entwerfen von Git und der git status
Ausgabe war, dass Benutzer dies verstehen (zu viele Git-Funktionen sind nur dann sinnvoll, wenn Sie bereits wissen, wie Git funktioniert). Mit der Einführung von Git durch viele, viele Benutzer, die mit DVCS nicht vertraut sind, ist diese Annahme nicht immer gültig.
Dies liegt daran, dass Ihr lokales Repo nicht bei den Upstream-Fernbedienungen eingecheckt hat. Damit diese Arbeit so funktioniert, wie Sie es erwarten,
git fetch
führen Sie agit status
erneut aus.quelle
Obwohl dies alles brauchbare Antworten sind, habe ich mich entschlossen zu prüfen, ob das lokale Repo mit der Fernbedienung übereinstimmt, ohne sie zu holen oder zu ziehen. Um zu sehen, wo meine Filialen sind, benutze ich einfach:
Es werden alle aktuell verfolgten Zweige und vor allem die Informationen zurückgegeben, ob sie aktuell sind, vor oder hinter den entfernten Ursprungszweigen. Nach dem obigen Befehl ist dies ein Beispiel für die Rückgabe:
Hoffe das hilft jemandem.
quelle
"Ursprung / Master" bezieht sich auf die Referenzposition für das HEAD-Commit des Zweigs "Ursprung / Master". Eine Referenz ist ein benutzerfreundlicher Aliasname für ein Git-Objekt, normalerweise ein Commit-Objekt. Die Referenz "Ursprung / Master" wird nur aktualisiert, wenn Sie
git push
auf Ihre Fernbedienung zugreifen ( http://git-scm.com/book/en/v2/Git-Internals-Git-References#Remotes ).Führen Sie im Stammverzeichnis Ihres Projekts Folgendes aus:
Vergleichen Sie die angezeigte Commit-ID mit:
Sie sollten gleich sein, und deshalb sagt Git, dass
master
sie auf dem neuesten Stand sindorigin/master
.Wenn du rennst
Dadurch werden neue Git-Objekte lokal im Ordner .git / properties abgerufen. Und Git aktualisiert .git / FETCH_HEAD so, dass es jetzt auf das neueste Commit des abgerufenen Zweigs verweist.
Um die Unterschiede zwischen Ihrem aktuellen lokalen Zweig und dem vom Upstream abgerufenen Zweig zu sehen, können Sie ihn ausführen
quelle
origin/master
Schiedsrichter nicht auch durch einen Abruf sowie einen Push aktualisiert?Schauen Sie sich ein Beispiel für ein Git-Repo an, um zu überprüfen, ob
your branch (master)
esup to date
mit istorigin/master
.Stellen Sie sicher, dass der lokale Master den Ursprung / Master verfolgt:
Weitere Informationen zur lokalen Hauptniederlassung:
Überprüfen Sie, ob sich Origin / Master auf demselben Commit befindet:
Wir können den gleichen Hash sehen und sicher sagen, dass der Zweig mit dem entfernten übereinstimmt, zumindest im aktuellen Git-Repo.
quelle
versuche es
git add .
vorher mitgit commit
quelle
Triviale Antwort, aber in einigen Fällen korrekt, wie die, die mich hierher gebracht hat. Ich habe in einem Repo gearbeitet, das für mich neu war, und ich habe eine Datei hinzugefügt, die vom Status nicht als neu angesehen wurde.
Am Ende stimmte die Datei mit einem Muster in der Gitignore-Datei überein.
quelle
In diesem Fall verwenden Sie git add und integrieren Sie alle ausstehenden Dateien. Verwenden Sie dann git commit und dann git push
git add - Integriere alle Pedent-Dateien
git commit - Speichern Sie das Commit
Git Push - Speichern im Repository
quelle