Wie kann ich lokale Commits anzeigen, die ich vorgenommen habe und die noch nicht in das Remote-Repository übertragen wurden? Gelegentlich git status
wird ausgedruckt, dass mein Zweig X Commits voraus ist origin/master
, aber nicht immer.
Ist das ein Fehler bei meiner Installation von Git oder fehlt mir etwas?
git log @{push}..
. Sehen Sie diese neue Verknüpfung@{push}
(die auf dengit status --all
sollte im Jahr 2010 erschienen sein; odergit status -v
sollte tatsächlich die ausführliche Ausgabe bereitstellen, die die zusätzlichen Informationen enthält.Antworten:
Sie können das Diff auch mit derselben Syntax anzeigen
quelle
git config --global alias.ahead "log origin/master..HEAD --oneline"
dass ich schnell herausfinden kann, wo ich bin. Noch mehr Süßigkeiten:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
für ein wenig mehr Attraktivität@{u}
Syntax zum Zeitpunkt der Veröffentlichung dieser Antwort noch nicht verfügbar war und erst am 12. Februar 2010 verfügbar wurde . Funktioniert auch@{u}
nicht, wenn der lokale Zweig nicht mit einem Upstream konfiguriert ist. Schließlich@{u}
gibt es derzeit keine Unterstützung für die Tab-Vervollständigung. Die<remote>/<branch>
Tab-Vervollständigung bleibt eine der schnellsten Möglichkeiten, um diese Informationen abzurufen, und es funktioniert, ob ein Upstream konfiguriert ist oder nicht.Wenn Sie alle Commits in allen Zweigen anzeigen möchten, die noch nicht gepusht wurden, suchen Sie möglicherweise nach Folgendes:
Wenn Sie nur das aktuellste Commit für jeden Zweig und die Namen der Zweige anzeigen möchten, gehen Sie wie folgt vor:
quelle
git log master..HEAD
würde nicht funktionieren, da es mehrere Upstreams gibt. Dieser Beitrag hat mich dazu gebrachtgit log MyBranch --not --remotes
, alle Commits, die noch nicht in einem Upstream an einen Upstream gesendet wurden, anzuzeigen.--decorate
zeigt auch die Zweige.--graph
macht es noch offensichtlicher.Sie können alle Commits anzeigen, die Sie lokal, aber nicht vorgelagert haben
@{u}
oder bezeichnet@{upstream}
den Upstream-Zweig des aktuellen Zweigs (siehegit rev-parse --help
odergit help revisions
für Details).quelle
git log @{u}.. -p
Eine der nützlichsten Optionen ist -p , die die in jeder Bestätigung eingeführten Unterschiede anzeigt.Das hat bei mir funktioniert:
Wie bei Git angegeben: Alle nicht gepushten Commits oder Commits anzeigen, die sich nicht in einem anderen Zweig befinden .
quelle
Sie können dies tun mit
git log
:Angenommen, dies
origin
ist der Name Ihres Upstreams, lassen Sie nach der..
Implikation den Namen der Revision wegHEAD
, in dem die neuen Commits aufgelistet sind, die nicht übertragen wurden.quelle
git log
und "2-Punkte-nicht-3" sehe , erinnere ich mich immer an stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>
diese Option aus, um Upstream einzurichten, wenn Sie diesen Befehl verwenden möchten, um bereitgestellte Commits anzuzeigen.Alle anderen Antworten sprechen von "Upstream" (dem Zweig, aus dem Sie ziehen).
Aber eine lokale Niederlassung kann Push auf einen anderen Zweig als die von er zieht.
master
Möglicherweise wird nicht auf den Remote-Tracking-Zweig "origin/master
" verschoben .Der Upstream- Zweig für
master
könnte seinorigin/master
, aber er könnte auf den Remote-Tracking-Zweigorigin/xxx
oder sogar pushenanotherUpstreamRepo/yyy
.Diese werden
branch.*.pushremote
zusammen mit demglobal remote.pushDefault
Wert für den aktuellen Zweig festgelegt .Es ist dieser Remote-Tracking-Zweig, der bei der Suche nach nicht gepushten Commits zählt: derjenige, der verfolgt,
branch at the remote
wohin der lokale Zweig verschoben wird .Das
branch at the remote
kann wiederorigin/xxx
oder sogar seinanotherUpstreamRepo/yyy
.Git 2.5+ (Q2 2015) führt eine neue Verknüpfung dafür ein:
<branch>@{push}
Siehe 29bc885 begehen , begehen 3dbe9db , begehen adfe5d0 , begehen 48c5847 , begehen a1ad0eb , begehen e291c75 , begehen 979cb24 , begehen 1ca41a1 , begehen 3a429d0 , begehen a9f9f8c , begehen 8770e6f , begehen da66b27 , begehen f052154 , begehen 9e3751d , begehen ee2499f [alle vom 21. Mai 2015] und Commit e41bf35 [01. Mai 2015] von Jeff King (
peff
) .(Zusammengeführt von Junio C Hamano -
gitster
-in commit c4a8354 , 05. Juni 2015)Commit adfe5d0 erklärt:
Commit 29bc885 fügt hinzu:
Wenn Sie sehen möchten, wie viele Commits Ihre lokalen Niederlassungen im Vergleich zu der Niederlassung, auf die Sie drängen, voraus / hinterher sind:
quelle
Praktischer Git-Alias für die Suche nach nicht gepushten Commits in der aktuellen Branche:
Was dies im Grunde tut:
bestimmt aber auch den aktuellen Filialnamen.
quelle
git alias <alias-name> <command>
In diesem Fall sollte der Befehl von einfachen Anführungszeichen umgeben sein, um Sonderzeichen aus der Shell zu entfernen.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Du könntest es versuchen....
Ich weiß, dass es keine reine Befehlszeilenoption ist, aber wenn Sie es installiert haben und sich auf einem GUI-System befinden, ist es eine großartige Möglichkeit, genau zu sehen, wonach Sie suchen, und vieles mehr.
(Ich bin eigentlich etwas überrascht, dass es bisher niemand erwähnt hat.)
quelle
gitk --all
zur Ansicht aller Zweige.tig
ist die ncurses Alternative.gitk
ist super ! Ich wusste nie, dass es das gibt! Praktisch, um Änderungen in einer schönen Benutzeroberfläche zu durchsuchen.tig
ist am nützlichsten in einer "Nur-Terminal" -Situation, in der Sie keinen Zugriff auf die Desktop-GUI erhalten. Zum ersten Mal davon erfahren! INTERESSANT:tig
ist umgekehrtgit
!git branch -v
zeigt für jede lokale Niederlassung an, ob sie "voraus" ist oder nicht.quelle
devel
, wird die entsprechende Zeile angezeigt* devel 8a12fc0 [ahead 1] commit msg
(*
nur in der Zeile, die der ausgecheckten Verzweigung entspricht ).ahead 1
bedeutet "voraus durch ein Commit", dh es gibt ein nicht gedrücktes Commit.git branch -vv
? Vgl. docs: "Wenn zweimal angegeben, drucken Sie auch den Namen des Upstream-Zweigs aus (siehe auch git remote show <remote>)."behind
und / oderahead
für jeden lokalen Zweig, was ausreicht, um das Problem des OP zu lösen (Erkennen nicht gepusherer Commits).git branch -v
ist genug dafür, gerade nochmal mit Git 2.16.2 getestet :)Ich hatte zuvor ein Commit durchgeführt, das weder an eine Zweigstelle noch an eine entfernte oder lokale Stelle gesendet wurde. Nur das Commit. Nichts von anderen Antworten hat für mich funktioniert, aber mit:
Dort habe ich mein Commit gefunden.
quelle
Ich verwende den folgenden Alias, um nur die Liste der Dateien (und den Status) abzurufen, die festgeschrieben, aber nicht gepusht wurden (für den aktuellen Zweig).
dann mach einfach:
quelle
Ich glaube, der typischste Weg, dies zu tun, besteht darin, etwas auszuführen wie:
Ich persönlich laufe jedoch lieber:
Hier werden die Commits aller Zweige angezeigt, die nicht stromaufwärts zusammengeführt wurden, sowie das letzte Commit im Upstream (das als Stammknoten für alle anderen Commits angezeigt wird). Ich benutze es so oft, dass ich einen Alias
noup
dafür erstellt habe.quelle
Ich schlage vor, Sie sehen sich das Skript https://github.com/badele/gitcheck an . Ich habe dieses Skript zum Einchecken aller Ihrer Git-Repositorys in einem Durchgang codiert und es zeigt, wer nicht festgeschrieben und wer nicht gedrückt / gezogen hat.
Hier ein Beispielergebnis
quelle
Dadurch wird Ihr lokaler Kommentarverlauf (noch nicht gepusht) mit der entsprechenden Nachricht aufgelistet
quelle
Es ist kein Fehler. Was Sie wahrscheinlich sehen, ist der Git-Status nach einer fehlgeschlagenen automatischen Zusammenführung, bei der die Änderungen von der Fernbedienung abgerufen, aber noch nicht zusammengeführt werden.
Gehen Sie folgendermaßen vor, um die Commits zwischen lokalem Repo und Remote anzuzeigen.
Dies ist 100% sicher und wird Ihre Arbeitskopie nicht verspotten. Wenn es Änderungen gab, werden sie
git status
angezeigtX commits ahead of origin/master
.Sie können jetzt das Protokoll der Commits anzeigen, die sich auf der Remote, aber nicht auf der lokalen Ebene befinden:
quelle
Das hat bei mir besser funktioniert:
oder:
quelle
@{upstream}
ist es wörtlich (upstream
ist ein Zauberwort), währendremotebranch
es nur der Name Ihres Zweigs ist.Es gibt ein Tool namens unpushed , das alle Git- , Mercurial- und Subversion-Repos im angegebenen Arbeitsverzeichnis scannt und eine Liste der nicht festgeschriebenen Dateien und nicht gepushten Commits anzeigt. Die Installation ist unter Linux einfach:
oder
systemweit installieren.
Die Verwendung ist auch einfach:
Siehe
unpushed --help
oder offizielle Beschreibung für weitere Informationen. Es gibt auch ein Cronjob-Skriptunpushed-notify
für die Benachrichtigung auf dem Bildschirm über nicht festgeschriebene und nicht gepuschte Änderungen.quelle
Mit diesem Befehl können Sie alle nicht gepussten Festschreibungen in allen Zweigen einfach auflisten :
quelle
Ähnlich: So zeigen Sie nicht zusammengeführte Zweige an:
Diese können verdächtig sein, aber ich empfehle die Antwort von cxreg
quelle
Wenn die Anzahl der Commits, die nicht ausgegeben wurden, eine einstellige Zahl ist, was häufig der Fall ist, ist der einfachste Weg:
git antwortet, indem er Ihnen sagt, dass Sie in Bezug auf Ihre Herkunft "voraus N Commits" sind. Denken Sie jetzt beim Anzeigen von Protokollen an diese Nummer. Wenn Sie "3 Commits voraus" sind, sind die Top 3 Commits in der Geschichte immer noch privat.
quelle
Eine Möglichkeit besteht darin, Commits aufzulisten, die in einem Zweig verfügbar sind, in einem anderen jedoch nicht.
quelle
Wie oben gesagt:
Git Diff Herkunft / Master .. HEAD
Aber wenn Sie Git Gui verwenden
Wählen Sie nach dem Öffnen der GUI-Oberfläche "Repository" -> Unter "Verlauf visualisieren ".
Hinweis: Einige Benutzer verwenden gerne CMD Prompt / Terminal, während andere die Git-GUI verwenden (der Einfachheit halber).
quelle
Hier ist meine tragbare Lösung (Shell-Skript, das auch unter Windows ohne zusätzliche Installation funktioniert), die die Unterschiede zum Ursprung für alle Zweige zeigt: git-fetch-log
Eine Beispielausgabe:
Für das Protokoll übergebene Parameter, z. B.
--oneline
oder--patch
können verwendet werden.quelle
zeigt alle Unterschiede in Ihren lokalen Commits an.
zeigt die lokale Commit-ID und den Namen des Commits an.
quelle
git show
Zeigt nur das letzte Commit an, unabhängig davon, ob es auf die Fernbedienung übertragen wurde oder nicht. Es werden nicht alle nicht gedrückten Commits angezeigt.Angenommen, Ihr Zweig ist so eingerichtet, dass er den Ursprung verfolgt, dann sollte dies Ihnen die Unterschiede zeigen.
Gibt Ihnen eine Zusammenfassung der Commits.
quelle
git log origin
zeigt Ihnen Commits an, die bereits gepusht wurden , aber es werden keine Commits angezeigt, die nicht gepusht wurden , was eher dem entspricht, wonach das Originalplakat gefragt hat.