2010-12-28 19 views
8

Ich habe zwei Commits, von denen einer der Vorfahre eines anderen ist. (Sie sind der Anfangs- und der Endpunkt eines Zweiges. Ich glaube nicht, dass das wichtig ist, aber ich werde es einbeziehen, wenn es das tut).Nicht merge Unterschiede für zwei Commits in Git zeigen

Ich möchte den Unterschied zwischen den beiden Commits sehen, aber ohne Änderungen während Merge Commits (das heißt, alle mit mehr als einem Elternteil commits), die zwischen den beiden Commits gemacht wurden. (Grundsätzlich möchte ich jede "echte" Festschreibung, die an die Branche gemacht wurde, ausgenommen die Zusammenführungen.)

Ist das möglich? Wenn ja, wie bewerkstelligen Sie dies?

Bei Bedarf wird davon ausgegangen, dass während der Zusammenführungs-Commits keine Konflikte gelöst werden, sondern Bonuspunkte für eine Lösung, die elegant mit ihnen umgehen kann.

+0

Bitte klarstellen: Möchten Sie ein individuelles Diff für jedes Commit, das kein Merge-Commit ist, oder erwarten Sie etwas anderes? –

+0

@Autocracy: Ich habe es bearbeitet und hoffentlich geklärt, wonach ich suche. Lass es mich wissen, wenn es immer noch keinen Sinn ergibt. –

Antwort

7

Ihre Frage ist ein wenig mehrdeutig, aber ich denke, dass Sie das wollen.

git log --no-merges -p branch-start..branch-end 
+0

Sie könnten stattdessen auch '--first-parent' bevorzugen. –

+1

-p ist das Ticket, wenn es mit --no-merges kombiniert wird. Vielen Dank! –

+0

Es ist eine Schande, dass Sie das nicht tun können (erstellen Sie einen Bereich) gegen cached/current (nicht commited) ... Sie können das gesamte diff mit 'git diff $ (git merge-base branchA currentbranch)' bekommen. Schmollen! –

2

Ich wusste nicht, die --no-Merges -o Optionen, aber hier eine andere Lösung (ich nehme an, dass Verschmelzungen von Meister getan haben):

git checkout -b temp 
git rebase --onto master branch-start branch-end 
git diff master 
2

Wenn Ihr verschmilzt von allen kam die gleiche Verzweigung (zB master) oder alle in einer anderen Verzweigung enthalten sind, können Sie die solution von this question verwenden.

Angenommen, Sie haben ein Baum wie folgt aus:

  x---y-+-z-+-branch 
     / //
---a---b---c-+-d-+-e---master 

und die beiden Commits Sie möchten, sind vergleichen b und branch. Dann statt den Vergleich der beiden Commits direkt, laufen

git diff master...branch 

werden alle Änderungen auf dem Zweig getan zeigen (x,y,z) ohne alles, was auch auf master (c,d,e, die verschmilzt). Beachten Sie, dass dadurch auch Änderungen am Master ignoriert werden, die noch nicht in der Verzweigung sind.

Aus der Dokumentation:

git diff [--options] begehen ... commit [-] [...]

Diese Form ist die Änderungen auf dem Zweig anzuzeigen enthält, und bis zum zweiten Commit, beginnend mit einem gemeinsamen Vorfahren von beiden commits. "git diff A ... B" entspricht "git diff $ (git-merge-base A B) B".

Verwandte Themen