Wie führe ich ein Git-Protokoll aus, um Änderungen nur für einen bestimmten Zweig anzuzeigen?


395

Ich habe einen lokalen Zweig, der den Remote- / Master-Zweig verfolgt. Nach dem Rennengit-pull und git-logwerden im Protokoll alle Commits im Remote-Tracking-Zweig sowie im aktuellen Zweig angezeigt. Da jedoch so viele Änderungen an der Remote-Zweigstelle vorgenommen wurden, muss ich nur die Commits sehen, die an der aktuellen lokalen Zweigstelle vorgenommen wurden.

Mit welchem ​​Git-Befehl werden nur Commits für einen bestimmten Zweig angezeigt?

Anmerkungen:

Konfigurationsinformationen:

[branch "my-branch"]
  remote = origin
  merge = refs/heads/master

Antworten:


526

Angenommen, Ihr Zweig wurde aus erstellt master, und dann, während Sie sich im Zweig befinden (dh, Sie haben den Zweig ausgecheckt):

git cherry -v master

oder

git log master..

Wenn Sie sich nicht in der Verzweigung befinden, können Sie den Verzweigungsnamen wie folgt zum Befehl "git log" hinzufügen:

git log master..branchname

Wenn Ihr Zweig aus gemacht wurde origin/master, dann sagen Sie origin/masterstatt master.


100
Perfekt! git log --no-merges master..war genau das, was ich brauchte.
Autobahn des Lebens

3
@HighwayofLife: Es --no-mergesscheint, dass nur Commits von einem bestimmten Zweig angezeigt werden, aber es werden wirklich nur Commits
angezeigt

5
Wie wäre es mit einer Möglichkeit, bei der ich den übergeordneten Zweig nicht eingeben / kennen muss? :)
ELLIOTTCABLE

1
Um ein Gefühl für die Änderungsrate zu bekommen, habe ich die folgende Beschwörung verwendet :), die ein einzeiliges Protokollformat mit dem zuerst angezeigten Namen des Autors und dem relativen Alter des Commits erzeugt:git log --no-merges --pretty='%C(yellow)%h%d %Creset%an %Cgreen%ar:%Creset %s' --graph master..
Noah Sussman

2
sollte nicht nicht lesen? git log master .. <Ihre Filiale> --oneline --no-merges
Alex Nolasco

104

Verwenden:

git log --graph --abbrev-commit --decorate  --first-parent <branch_name>

Es ist nur für den Zielzweig (natürlich --graph, --abbrev-commit --decorate sind polierender).

Die Schlüsseloption lautet --first-parent: "Folgen Sie nur dem ersten übergeordneten Commit, wenn ein Merge-Commit angezeigt wird" ( https://git-scm.com/docs/git-log ).

Es verhindert, dass die Festschreibgabeln angezeigt werden.


25
--first-parent <branch_name>ist die Option. funktioniert!
Parasrish

3
Wo ist der Filialname was, der Zweig, dessen Geschichte ich nur sehen möchte? Auf einem Zweig mit nur 3 Änderungen zeigt mir dies Hunderte.
Ed Randall

1
--first-parent <branch_name>hat auch für mich gearbeitet! Am Ende hatte ich einen Alias ​​für git log --first-parent $current_branch_name --no-merges. In Antwort auf @EdRandall werden die Commits in der Verzweigung + diejenigen angezeigt, von denen aus die Verzweigung erfolgt ist. Zum Beispiel:
Rachel

2
Hoppla, ich habe es in Kürze eingereicht. Hier ist das Beispiel: Sie haben A und B für den Master festgeschrieben. Sie verzweigen new_featurevom Meister. Sie fügen Commits C und D hinzu. Dann fügen Sie E und F zum Master hinzu. Sie führen dann Master zu zusammen new_feature. Mit git logon sehen new_featureSie "Merge Master", F, E, D, C, A, B. Mit git log --first-parent new_feature --no-mergeswird D, C, A, B
angezeigt

24

Wenn Sie nur die Commits möchten, die Sie in einem bestimmten Zweig ausführen, verwenden Sie den folgenden Befehl.

git log branch_name --author='Dyaniyal'

13

Das Problem, das ich hatte und das meiner Meinung nach ähnlich ist, ist, dass der Meister meinem Verzweigungspunkt zu weit voraus war, als dass die Geschichte nützlich wäre. (Das Navigieren zum Verzweigungspunkt würde zu lange dauern.)

Nach einigem Ausprobieren gab mir dies ungefähr das, was ich wollte:

git log --graph --decorate --oneline --all ^master^!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.