Git: Wie überprüfe ich, ob ein lokales Repo aktuell ist?

85

Ich würde gerne wissen, ob mein lokales Repo auf dem neuesten Stand ist (und wenn nicht, würde ich im Idealfall die Änderungen sehen).

Wie könnte ich das überprüfen, ohne git fetchoder git pull?

Mischa Moroshko
quelle

Antworten:

94

Versuchen Sie git fetch --dry-run Das Handbuch ( git help fetch) sagt:

--dry-run
Show what would be done, without making any changes.
Philip Oakley
quelle
3
Vielen Dank! Aus der Ausgabe ist jedoch schwer zu ersehen, welche Dateien hinzugefügt / geändert / entfernt wurden.
Mischa Moroshko
1
Sie sehen, welche Tags aktualisiert werden und der Start-End-Commit-Bereich für die verschiedenen Zweige. Wenn dies nicht ausreicht, führen Sie dies als ordnungsgemäßes Abrufen (nicht Ziehen) durch, wodurch Sie eine ordnungsgemäße, separate, lokale Kopie der Fernbedienung erhalten, ohne Ihre eigene Zweigarbeit zu beeinträchtigen. Ein Pull würde versuchen, die beiden zusammenzuführen, was nicht das ist, was Sie wollen. Die Datenübertragung ist gleich, unabhängig davon, ob Sie - trocken ausführen oder nicht.
Philip Oakley
4
Warum git fetch --dry-runtaucht beim Laufen nichts auf?
Paramvir Singh Karwal
3
@ParamvirSinghKarwal Git ist spärlich in dem, was es berichtet. Wenn es nichts zu sagen gibt, sagt es nichts, als wäre nichts passiert. Vielleicht sind Sie für die Referenz Ihres regulären Abrufs auf dem neuesten Stand. Vielleicht hinzufügen --all?
Philip Oakley
1
@AaronBeall Wenn dies der Fall ist, bedeutet dies höchstwahrscheinlich, dass Sie diese Änderungen bereits lokal abgerufen haben (also nichts abzurufen), sie aber noch nicht in Ihrem Zweig zusammengeführt haben. git pullist ungefähr gleichbedeutend mit a git fetch && git merge. Wenn Sie den Abruf zu irgendeinem Zeitpunkt ohne das ausgeführt haben --dry-run, haben Sie die Dinge bereits lokal abgerufen.
DuckPuppy
34
git remote show origin

Ergebnis:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------
Jim Smith
quelle
Das listet alle Zweige auf. Wenn Sie ein Repository mit einem langen Verlauf haben, ist die Ausgabe ziemlich unübersichtlich.
Paulo Carvalho
git remote show origin | grep "your / branch"
Jim Smith
26

Verwenden git remote updateSie diese Option zuerst , um Ihre Remote-Refs auf den neuesten Stand zu bringen. Dann können Sie eines von mehreren Dingen tun, wie zum Beispiel:

  1. git status -unowird Ihnen sagen, ob der Zweig, den Sie verfolgen, vor, hinter oder divergiert ist. Wenn nichts gesagt wird, sind lokal und remote identisch. Beispielergebnis:

Auf Zweig DEV

Ihre Filiale liegt um 7 Commits hinter 'origin / DEV' und kann schnell weitergeleitet werden.

(Verwenden Sie "git pull", um Ihren lokalen Zweig zu aktualisieren.)

  1. git show-branch *master zeigt Ihnen die Commits in allen Zweigen, deren Namen auf 'master' enden (z. B. master und origin / master).

Wenn Sie -vmit git remote update ( git remote -v update) arbeiten, können Sie sehen, welche Zweige aktualisiert wurden, sodass Sie keine weiteren Befehle benötigen.

Piyush Agarwal
quelle
2
Warum ist das so weit unten? git remote update ; git status -unoIch habe es gelöst. git fetch --dry-rungab keine Ausgabe, selbst in Fällen, in denen sich das Lokal hinter der Fernbedienung befand.
Aaron Beall
1
git remote -v updateist die Antwort für mich.
Paulo Carvalho
17

Sie können git status -unodamit überprüfen, ob Ihre lokale Niederlassung mit der ursprünglichen Niederlassung auf dem neuesten Stand ist.

Flowdee
quelle
18
Es gibt nur den lokalen Status an, nicht die Überprüfung mit der Gegenstelle.
Ishan Liyanage
4
Gibt nur lokal, hat aber git remote update ; git status -unoden Trick gemacht! Das git fetch --dry-rungab keine Ausgabe, als ich es erwartet hatte (und git pullDinge ziehen würde).
Aaron Beall
1
Diese Antwort ist falsch und sollte gelöscht werden. So wie es ist, verewigt es einen sehr verbreiteten, aber falschen Mythos über die Funktionsweise von Git, der nur dann zerstreut wird, wenn jemand beschließt, die Kommentare dazu zu lesen.
Prometheus
8

Nicht wirklich - aber ich sehe nicht, wie git fetches wehtun würde, da es keine Ihrer lokalen Niederlassungen verändert.

Niclas Kirschmeier
quelle
Dem stimme ich voll und ganz zu. Git Pull kann schädlich sein und Dateien überschreiben. Mit git fetch werden jedoch nur die Metadaten abgerufen, sodass Befehle wie der git-Status Ihnen mitteilen können, ob Ihr lokales Repo auf dem neuesten Stand ist oder nicht, ohne dass Dateien überschrieben werden. Es beantwortet möglicherweise nicht den Buchstaben der Frage, aber es beantwortet den Geist der Frage und gibt Ihnen das gewünschte Werkzeug. Git-Abruf, dann sagt Ihnen der Git-Status, wo sich Ihr lokales Repo in Bezug auf die Fernbedienung befindet, ohne Dateien zu überschreiben.
merlit64
5

Eine andere Alternative besteht darin, den Status des Remote-Zweigs anzuzeigen und git show-branch remote/branchihn als Vergleich git show-branch *branchzu verwenden, um den Zweig in allen Fernbedienungen sowie in Ihrem Repository zu sehen! Weitere Informationen finden Sie in dieser Antwort unter https://stackoverflow.com/a/3278427/2711378

Amanuel Nega
quelle
5

Sie müssen zwei Befehle eingeben:

  1. Git holen Ursprung
  2. Git-Status
user3695833
quelle
1
Dies funktioniert, aber die Frage sagt eindeutig ohne "holen". In vielen Fällen möchten Sie wissen, wie sich Ihr lokales Repo vom Remote-Repo unterscheidet, ohne die Änderungen tatsächlich abzurufen oder zusammenzuführen.
Pedram Bashiri
1
@pedrambashiri Ich bin wirklich neugierig, wie was? Meines Wissens kann ein Abruf allein niemals etwas schaden.
Prometheus
@Prometheus Als erstes wollte ich nur darauf hinweisen, dass wenn eine Frage eindeutig "ohne Abruf" lautet, Sie "Abrufen" einfach nicht in Ihrer Antwort verwenden können, wenn es keinen anderen Weg gibt, dies zu tun, oder keinen wirklichen Grund, dies ohne zu tun in der Antwort zu erklären. Um Ihre Frage zu beantworten, aktualisiert ein Abruf Ihre lokale Kopie des Remote-Repos. Schauen Sie sich das Diagramm in diesem Beitrag an blog.osteele.com/2008/05/my-git-workflow
pedram bashiri
4

Sie müssen ausgeführt werden, git fetchbevor Sie Ihr lokales Repository mit den Dateien auf Ihrem Remote-Server vergleichen können.

Dieser Befehl aktualisiert nur Ihre Remote-Tracking-Zweige und wirkt sich erst dann auf Ihren Arbeitsbaum aus, wenn Sie git mergeoder anrufen git pull.

Um den Unterschied zwischen Ihrem lokalen Zweig und Ihrem Remote-Tracking-Zweig nach dem Abrufen zu erkennen, können Sie git diff oder git cherry verwenden, wie hier erläutert.

Braitsch
quelle
2

Wenn du benutzt

git fetch --dry-run -v <link/to/remote/git/repo>

Sie erhalten Feedback, ob es aktuell ist. Im Grunde müssen Sie nur die Option "ausführlich" zu der zuvor gegebenen Antwort hinzufügen.

Don Davis
quelle
1

Dies ist ohne git fetchoder nicht möglich git pull. Wie können Sie feststellen, ob das Repository "aktuell" ist oder nicht, ohne zum Remote-Repository zu gehen, um zu sehen, was "aktuell" überhaupt bedeutet?

Jörg W Mittag
quelle
5
Bitte bestätigen Sie das! Du hast gerade geantwortet, was du denkst! Sie sollten vorsichtiger sein, da Neulinge damit stürzen werden!
Amanuel Nega
4
@AmanuelNega: Dies ist nur eine grundlegende Logik. Wenn Sie wissen möchten, ob sich Ihr lokales Repo im selben Status wie das Remote-Repo befindet, müssen Sie den Status des Remote-Repos kennen. Zeitraum. Wenn Sie den Status des Remote-Repos nicht kennen, können Sie möglicherweise nicht wissen, ob sich das lokale Repo im selben Status befindet. Beachten Sie, dass die am höchsten bewertete und akzeptierte Antwort verwendet wird git pull, was das OP in seiner Frage ausdrücklich verbietet.
Jörg W Mittag
2
Informiert werden! git status -unoDies funktioniert und man kann auch git show-branch *masterden Status aller Hauptzweige anzeigen! Wollen Sie immer noch sagen, dass es unmöglich ist? Sie können den Status jeder Filiale anzeigen, solange Sie Zugriff auf die Fernbedienung haben!
Amanuel Nega
2
@AmanuelNega: Zeigt git statusnur den Status Ihrer lokalen Refs an, nicht , ob Ihre lokalen Refs mit den Remote-Refs auf dem neuesten Stand sind. Nochmals: Es ist einfach logisch unmöglich zu wissen, wie der Status des Remote-Repos ist, ohne den Status des Remote-Repos zu erhalten. Zeitraum. Dies sind nur die Grundgesetze der Raumzeit.
Jörg W Mittag
6
Es ist nicht "logisch" unmöglich, da man offensichtlich jemanden in Ihrem Serverraum anrufen und sagen könnte: "Was ist der Hash Ihres HEAD in der Hauptniederlassung?" Ich habe diesen Hash nicht. Jetzt wissen Sie, dass sie nicht synchron sind.
James Robinson
1

Ich habe versucht, meine Antwort zu formatieren, konnte es aber nicht. Bitte stapeln Sie das Überlauf-Team, warum das Posten von Antworten so schwierig ist.

Trotzdem,

Antwort:
git fetch origin
git status (Sie sehen ein Ergebnis wie "Ihr Zweig liegt um 9 Commits hinter 'origin / master'")
, um auf Remote-Änderungen zu aktualisieren: git pull

adarsh
quelle