Commits seit Zweigstellenerstellung anzeigen

75

Gibt es eine Möglichkeit, mit git logoder einem anderen Befehl nur die Commits anzuzeigen, die nach der Zweigstellenerstellung hinzugefügt wurden?

usage: git log [<options>] [<since>..<until>] [[--] <path>...]
   or: git show [options] <object>...

    --quiet               suppress diff output
    --source              show source
    --decorate[=...]      decorate options
Lurscher
quelle

Antworten:

69

Die vollständige Dokumentation finden Sie hier: https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html

Angenommen, Sie haben ein Repo, das so aussieht:

base  -  A  -  B  -  C  -  D   (master)
                \
                 \-  X  -  Y  -  Z   (myBranch)

Überprüfen Sie den Repo-Status:

> git checkout master
Already on 'master'
> git status ; git log --oneline
On branch master
nothing to commit, working directory clean
d9addce D
110a9ab C
5f3f8db B
0f26e69 A
e764ffa base

und für myBranch:

> git checkout myBranch
> git status ; git log --oneline
On branch myBranch
nothing to commit, working directory clean
3bc0d40 Z
917ac8d Y
3e65f72 X
5f3f8db B
0f26e69 A
e764ffa base

Angenommen, Sie befinden sich auf myBranch und möchten nur SEIT Master ändern. Verwenden Sie die Zwei-Punkt-Version:

> git log --oneline master..myBranch
3bc0d40 Z
917ac8d Y
3e65f72 X

Die Dreipunktversion bietet alle Änderungen von der Spitze des Masters bis zur Spitze von myBranch. Beachten Sie jedoch, dass das gemeinsame Commit B nicht enthalten ist:

> git log --oneline master...myBranch
d9addce D
110a9ab C
3bc0d40 Z
917ac8d Y
3e65f72 X

Bitte beachten Sie : git logund git diffverhalten sich anders! Das Verhalten ist nicht genau umgekehrt, aber fast:

> git diff master..myBranch
diff --git a/rev.txt b/rev.txt
index 1784810..e900b1c 100644
--- a/rev.txt
+++ b/rev.txt
@@ -1 +1 @@
-D
+Z

> git diff master...myBranch
diff --git a/rev.txt b/rev.txt
index 223b783..e900b1c 100644
--- a/rev.txt
+++ b/rev.txt
@@ -1 +1 @@
-B
+Z

Die Zwei-Punkt-Version zeigt also den Unterschied von der Spitze des Masters (dh D) zur Spitze von myBranch (Z). Die Dreipunktversion zeigt den Unterschied zwischen der Basis von myBranch (dh B) und der Spitze von myBranch (Z).

Alan Thompson
quelle
Wenn du das tun würdest git log --oneline myBranch..master, würde dir das geben Dund C?
MiniGod
3
upvote für die Beschreibung des Unterschieds zwischen .. und ... und die Bereitstellung von Beispielen. Super Antwort!
Gui Lima
Vielen Dank für den Hinweis, dass sich log und diff unterschiedlich verhalten (fast gegensätzlich). Warum sollte das so sein?
nur
67

Ich war mit meiner ursprünglichen Antwort falsch. Sie möchten die doppelte Punktnotation:

git log master..<your_branch_name>

Ich habe andere Ergebnisse erhalten als erwartet, also habe ich einen Test mit der folgenden Repo-Struktur durchgeführt:

a - - c - e - - g - i   master
  \ b - d / \ f - h     test

Ich habe dann versucht git log master..test:

f - h

Und dann git log master...test:

  - g - i
  f - h

Der doppelte Punkt zeigt also die Commits in, testaber nicht in master( ^master temp) und der dreifache Punkt zeigt die Commits in masterAND, testaber nicht in beiden.

Die andere ausgezeichnete Antwort in dieser Frage hat es zuerst richtig gemacht und hat eine bessere Erklärung ( https://stackoverflow.com/a/24769534/1185838 ); Es sollte wahrscheinlich als Antwort anstelle von meiner markiert werden. Sie können auch auf diese Antwort verweisen ( https://stackoverflow.com/a/463027/1185838 ), die mir geholfen hat, den Unterschied zwischen Doppelpunkt- und Dreifachpunktnotation besser zu verstehen.

Entschuldigung für die falsche Antwort!


Alte Antwort - Falsch

Verwenden Sie drei Punkte, um auf das Commit zu verweisen, bei dem der zweite Zweig vom ersten abweicht, oder in diesem Fall, wenn Ihr Zweig vom Master abweicht:

git log master...<your_branch_name>

Stellen Sie sicher, dass Sie für diesen Fall drei Perioden verwenden.

Randnotiz: Sie können Ihren Filialnamen auch weglassen, da git in diesem Fall automatisch auf den HEAD-Zeiger verweist, zum Beispiel:

git log master...

entspricht meinem vorherigen Beispiel. Dies funktioniert überall dort, wo ein Commit-Vergleich verfügbar ist.

Matt Meng
quelle
1
git log master...hat bei mir NICHT funktioniert, hat nur git log master..funktioniert. Beachten Sie die zwei Punkte statt drei
NecipAllef
Ich bin froh, dass es bei dir funktioniert hat. Double for ist offensichtlich die richtige Syntax. Aber sei vorsichtig, die Punkte sind wichtig. In der Antwort von Alan Thompson finden Sie eine detaillierte Erklärung des Unterschieds zwischen der Doppel- und Dreifachpunktnotation.
Matt Meng
Dies gibt mir seltsame Ergebnisse ... Während master..mybranches 1 gibt (und es gibt tatsächlich nur ein Commit seit der Zweigerstellung), gibt mir Ihre Version mit drei Punkten 35. Woher diese 35 kommt, ist unklar. Es sieht so aus, als würde es alle Commits zählen, die masterseit der Erstellung des Zweigs aufgetreten sind. Oder vielleicht sowohl auf dem Ast als auch auf dem Meister ...
Alexander Amelkin
13

Wenn Sie sich in dem von Ihnen erstellten Zweig befinden:

git log master..
Shaun Luttin
quelle
4

Ja, es ist möglich, Ihren "neuen" Zweig mit dem Hauptzweig zu vergleichen (allgemein als "Master" bezeichnet):

git log master..<your_branch_name>

Natürlich ersetzen <your_branch_name>.

Sandro Munda
quelle
5
Dies zeigt nur die Commits an, seit Sie das letzte Mal vom Master gezogen haben, oder umgekehrt. Dies ist nicht dasselbe wie das Anzeigen der Commits seit dem Erstellen des Zweigs.
Spiffytech
0

Ich könnte mich irren, aber ich glaube nicht, dass eine der Antworten genau im OP angefordert wurde, deshalb wollte ich eine neue Antwort hinzufügen. Ich glaube, dass dies genau die gleiche Frage ist, die ich hatte, da dies in anderen Versionsverwaltungssystemen sehr einfach ist.

Ich habe folgendes in MASTER:

'entwickeln' | -> 'GP603'

In ORIGIN (meinem lokalen System) habe ich:

'GP603' [Vom Remote / GP603-Zweig geklont]

Ich habe dann 2 verschiedene Commits durchgeführt. Erste Festschreibungsänderung Datei X. Zweite Festschreibungsänderung Datei X und Datei Y. Einige Tage später wollte ich nur meine Annahme des Status des lokalen Zweigs ORIGIN / GP603 überprüfen. Dies ist, was ich getan habe, um zu bestätigen, dass es nur die 2 Commits gab, an die ich mich erinnere (die in Wirklichkeit die einzigen 2 Commits in der Branche waren).

$ git log origin / GP.603 ...

(Commit 2) Commit b0ed4b95a14bb1c4438c8b48a31db7a0e9f5c940 (HEAD -> GP.603) Autor: xxxxxxx Datum: Mi xxxxx -0400

1. Fixed defect where the format of the file names and paths were being added to HashTable in such a way that they would never be matched in any comparison.  This was an
defect causing older failed files to never be moved to the correct directory (WindowsServiceApplication.cs)

2. Removing worthless and contextless message as it does nothing but clog the log with garbage making it harder to read (DinoutFileHandler.cs)

(Commit 1) Commit 2c4541ca73eacd4b2e20d89f018d2e3f70332e7e Autor: xxxxxxx Datum: Di Okt xxxxx -0400

In ProcessFile() function need to perform a .ToLower() on the file path string when adding it o the failedFiles collection.
Ethan Hodys
quelle
0

Dieser Befehl hat bei mir gut funktioniert. Es war interessant, nur die Namen der Dateien zu sehen, die sich im Delta der Commits zwischen einem Anfangs- und einem Endreferenz geändert haben.

 git log --no-merges --pretty=oneline --name-only <begin ref>..<end ref>

was eine Ausgabe wie diese ergibt,

<commit hash> <commit subject line>
foo.txtr
bar.txt
Jose Quijada
quelle
-1

Ich gerate oft in die Art von oh, lieber Gott, was ich getan habe . Die eindringliche Angst betrifft insbesondere die jüngsten Veränderungen in der aktuellen Branche. Es ist schön, das Schuldspiel der Commits zu sehen, das ich wie folgt mache. (Angenommen, Sie befinden sich im aktuellen Interessenszweig und haben ihn von dev heraus verzweigt .)

git log --oneline dev ..

Es gibt mir die Liste der Verpflichtungen, die ich eingegangen bin, um zu dem Ort zurückzukehren, an dem Chaos, Sodom und Gomorra nicht die Realität sind. Es ist auch hilfreich, wenn Sie sich wie ein ADHS-Affe auf LSD zwanghaft festlegen. Sobald ich meine Lagerliste habe, kann ich sie eingrenzen und analysieren, wie in diesem Artikel dokumentiert . Unten finden Sie einen Abschnitt zur Begrenzung der Ausgabe.

Konrad Viltersten
quelle