Frage

Hier sind zwei verschiedene Fragen, aber ich denke, dass Sie verwandt sind.

  1. Bei der Verwendung von Git, wie finde ich die änderungen, die ich begangen habe lokal, aber noch nicht geschoben, um einen remote-Zweig?Ich bin auf der Suche nach etwas ähnlich wie die Mercurial-Befehl hg outgoing.

  2. Bei der Verwendung von Git, wie finde ich was verpasst einen remote-Zweig hat vor ein ziehen?Ich bin auf der Suche nach etwas ähnlich wie die Mercurial-Befehl hg incoming.

Für die zweite:gibt es eine Möglichkeit zu sehen, was verfügbar ist und dann cherry-pick die änderungen, die ich ziehen will?

War es hilfreich?

Lösung

Git kann nicht senden, dass Art von Informationen über das Netzwerk, wie Hg.Aber man kann laufen git fetch (die mehr wie hg pull als hg fetch) fetch commits von Ihrem remote-Server.

Also, wenn Sie einen Zweig namens master und eine remote-genannt origin, nach der Ausführung von git fetch, sollten Sie auch ein Zweig namens origin/master.Sie können dann die git log alle commits, die master muss eine Obermenge von origin/master by doing git log master..origin/master.Invertieren diese beiden zu bekommen, im Gegenteil.

Ein Freund von mir, David Dollar, hat ein paar git-shell-Skripte zu simulieren hg incoming/outgoing.Sie finden diese unter http://github.com/ddollar/git-utils.

Andere Tipps

Beginnend mit Git 1.7.0, gibt es eine spezielle syntax, die ermöglicht Sie zu allgemein finden Sie den upstream-Zweig: @{u} oder @{upstream}.

Nachahmen hg incoming:

git log ..@{u}

Nachahmen hg outgoing:

git log @{u}..

Ich verwende den folgenden incoming und outgoing Aliase, um die oben genannten einfacher zu verwenden:

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

Keine vollständige Antwort, aber git fetch wird, ziehen Sie das remote-repo und nicht Zusammenführen.Sie können dann einen

git diff master origin/master

  1. Verwenden Sie "git log origin KOPF.."

  2. Verwenden Sie "git fetch", gefolgt von "git log HEAD..origin".Sie können cherry-pick die einzelnen commits, die Verwendung der aufgeführten commit-ids.

Die oben genannten geht, ist natürlich, dass "origin" ist der name der remote-tracking-Zweig (was es ist, wenn Sie verwendet haben-Klon mit Standardoptionen).

Es gibt auch dieses für einen Vergleich aller Niederlassungen:

git log --branches --not --remotes=origin

Dies ist, was die git-log-man-page sagt zu diesem:

Zeigt alle commits, die sind in jedem lokale Niederlassungen aber nicht in jedem remote-tracking branches origin (was, Sie haben diesen Ursprung nicht).

Die oben ist für outgoing.Für incoming, tauschen Sie Sie einfach:

git log --remotes=origin --not --branches

Ich würde tun

$ git fetch --dry-run

für hg incoming und

$ git push --dry-run

für hg outgoing.

git-out ist ein Skript, das emuliert hg outgoing ganz genau.Es analysiert auf "push -n", output, so produziert es genaue Ausgang, wenn müssen Sie zusätzliche Argumente angeben zu schieben.

git eingehende

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

git ausgehende

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

Wenn die "git log" und @{u} Antworten gab zunächst mir "unknown revision" Fehler, ich habe versucht, aus Chris/romkyns Vorschlag git push --dry-run.

Sie erhalten eine Ausgabe wie "5905..4878 master->master".5905 ist das neueste commit, der die Fernbedienung hat, und verpflichtet sich durch (und einschließlich) 4878 wird angewendet, um die Fernbedienung.

Sie können dann 5905..4878 als Argumente für mehrere andere git-Befehle, um mehr details zu erhalten:

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

Wenn Sie git fetch, alle die Inhalt (einschließlich die Zweige,tags ( refs) gespeichert werden temporär in .git/FETCH_HEAD, deren Inhalt angezeigt werden kann mit dem Befehl:git log FETCH_HEAD Wenn Sie nicht mit suffix -a-mit git fetch dann standardmäßig FETCH_HEAD Inhalt wird überschrieben durch neue Inhalte.Von diesen eigenen Inhalten sind, können Sie die anzeigen und entscheiden, zu welchem Zweig Sie Zusammenführen möchten, wenn Sie Sie zu tun, oder Sie können einfach cherry-pick, wenn Sie wollen nur ein paar commits aus, was mitgebracht wurde von fetch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top