Hier sind zwei verschiedene Fragen, aber ich denke, sie hängen zusammen.
Wie finde ich bei der Verwendung von Git heraus, welche Änderungen ich lokal festgeschrieben, aber noch nicht in einen Remote-Zweig verschoben habe? Ich suche etwas Ähnliches wie das Mercurial-Kommando
hg outgoing
.Wie finde ich bei der Verwendung von Git heraus, welche Änderungen ein Remote-Zweig vor einem Pull vorgenommen hat? Ich suche etwas Ähnliches wie das Mercurial-Kommando
hg incoming
.
Zum zweiten: Gibt es eine Möglichkeit, zu sehen, was verfügbar ist, und dann die Änderungen auszuwählen, die ich übernehmen möchte?
hg incoming
und washg outgoing
tatsächlich zu tun ist. Das nächste Git-Äquivalent, das ich gefunden habe, ist die--dry-run
Option. Nurgit pull --dry-run
und Sie sehen eine Liste aller Dinge, die passieren müssen.Antworten:
Git kann diese Art von Informationen nicht wie Hg über das Netzwerk senden. Sie können jedoch ausführen
git fetch
(was eher so isthg pull
alshg fetch
), um neue Commits von Ihren Remoteservern abzurufen.Wenn Sie also einen Zweig aufgerufen
master
und eine Fernbedienung aufgerufen habenorigin
, sollten Sie nach dem Ausführengit fetch
auch einen Zweig anrufenorigin/master
. Sie können danngit log
alle Commitsmaster
abrufen, die eine Obermenge sein müssen,origin/master
indem Sie dies tungit log master..origin/master
. Invertieren Sie diese beiden, um das Gegenteil zu erreichen.Ein Freund von mir, David Dollar, hat ein paar Git-Shell-Skripte erstellt, um sie zu simulieren
hg incoming/outgoing
. Sie finden sie unter http://github.com/ddollar/git-utils .quelle
Ab Git 1.7.0 gibt es eine spezielle Syntax, mit der Sie generisch auf den Upstream-Zweig verweisen können:
@{u}
oder@{upstream}
.Nachahmen
hg incoming
:Nachahmen
hg outgoing
:Ich verwende Folgendes
incoming
undoutgoing
Aliase, um die Verwendung des oben genannten zu vereinfachen:quelle
git branch --set-upstream foo origin/foo
.git log @{u}..
listet jede einzelne Änderung im Repo für mich auf. Auf keinen Fall existieren sie noch nicht.git rev-parse --symbolic-full-name @{u}
, dass die entsprechende Fernreferenz gedruckt wird. Außerdemgit log @{u}..
zeigt die Festschreibungen , die nicht erreichbar mit dem stromaufwärtigen Zweig sind, die Festschreibungen, die bereits in dem entfernten Repository enthalten kann (wenn sie von einer anderen Referenz erreichbar sind). Dies geschieht direkt nach dem Zusammenführen in einem bereits verschobenen Zweig.checkout <somebranch>
und gemacht habemerge <otherbranch>
. Zu diesem Zeitpunkt habe ich das getanlog @{u}..
und jede Änderung aufgelistet gesehen.Keine vollständige Antwort, aber Git Fetch zieht das Remote-Repo und führt keine Zusammenführung durch. Sie können dann eine
quelle
git diff origin/master master
Verwenden Sie "git log origin..HEAD"
Verwenden Sie "git fetch" gefolgt von "git log HEAD..origin". Mit den aufgelisteten Commit-IDs können Sie einzelne Commits auswählen.
Das oben Gesagte setzt natürlich voraus, dass "Ursprung" der Name Ihres Remote-Tracking-Zweigs ist (was der Fall ist, wenn Sie einen Klon mit Standardoptionen verwendet haben).
quelle
Es gibt auch Folgendes, um alle Zweige zu vergleichen:
Dies ist, was die Git Log Manpage dazu sagt:
Das obige ist für
outgoing
. Fürincoming
, einfach tauschen:quelle
Ich würde es tun
für
hg incoming
undfür
hg outgoing
.quelle
git-out ist ein Skript, das
hg outgoing
ziemlich genau emuliert . Es analysiert die Ausgabe "push-n", sodass eine genaue Ausgabe erstellt wird, wenn Sie zusätzliche Argumente für die Push-Angabe angeben müssen.quelle
Git eingehend
git ausgehend
quelle
Als die Antworten "git log" und @ {u} mir anfänglich "unbekannte Revisions" -Fehler gaben, probierte ich Chris / romkyns Vorschlag aus
git push --dry-run
.Sie erhalten eine Ausgabe wie "5905..4878 master-> master". 5905 ist das letzte Commit, das die Fernbedienung hat, und Commits über (und einschließlich) 4878 werden auf die Fernbedienung angewendet.
Sie können dann 5905..4878 als Argumente für mehrere andere Git-Befehle verwenden, um weitere Details zu erhalten:
quelle
Wenn Sie git fetch ausführen, werden alle Inhalte einschließlich Zweigen und Tags (refs) vorübergehend in .git / FETCH_HEAD gespeichert, deren Inhalt mit dem folgenden Befehl angezeigt werden kann: git log FETCH_HEAD Wenn Sie bei git fetch kein Suffix -a verwenden, verwenden Sie standardmäßig Die Inhalte von FETCH_HEAD werden durch neue Inhalte überschrieben. Aus diesen Inhalten können Sie anzeigen und entscheiden, zu welchem Zweig Sie sie zusammenführen möchten, wenn Sie dies tun, oder Sie können einfach eine Auswahl treffen, wenn Sie nur wenige Commits von dem möchten, was durch Abrufen gebracht wurde.
quelle