Frage

Was ist der beste Weg, um ein Protokoll der änderungen auf dem Zweig, da die Zeit verzweigt wurde aus dem current-Zweig?Meine Lösung bisher:

git log $(git merge-base HEAD branch)..branch

Die Dokumentation für git-diff zeigt an, dass git diff A...B ist äquivalent zu git diff $(git-merge-base A B) B.Auf der anderen Seite, die die Dokumentation für git-rev-parse zeigt an, dass r1...r2 ist definiert als r1 r2 --not $(git merge-base --all r1 r2).

Warum sind diese unterschiedlich?Beachten Sie, dass git diff HEAD...branch gibt mir die diffs, die ich will, aber das entsprechende git log-Befehl gibt mir mehr als das, was ich will.

In Bildern, nehme dieses:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

Ich möchte einen Protokoll mit commits x, y, z.

  • git diff HEAD...branch diese verpflichtet
  • jedoch, git log HEAD...branch gibt die x -, y -, z -, c -, d -, e.
War es hilfreich?

Lösung

Im Rahmen einer Revisionsliste, A...B ist wie git-rev-parse es definiert. git-log nimmt eine Revisionsliste. git-diff keine Liste der Überarbeitungen - es dauert eine oder zwei Revisionen und hat die A...B Syntax definiert, gemeint ist, wie es in der git-diff manpage definiert ist. Wenn git-diff nicht explizit A...B definiert haben, dann wäre das Syntax ungültig. Beachten Sie, dass der git-rev-parse manpage A...B im „Angeben Bereiche“ Abschnitt beschreibt, und alles, was in diesem Abschnitt ist nur gültig in Situationen, in denen ein Revisionsbereich gültig ist (das heißt, wenn eine Revisionsliste gewünscht wird).

Um ein Protokoll zu erhalten enthält nur x, y und z, versucht git log HEAD..branch (zwei Punkte, nicht drei). Dies ist identisch mit git log branch --not HEAD, und bedeutet, dass alle Commits auf Zweig, die nicht auf HEAD ist.

Andere Tipps

git cherry branch [newbranch]

tut genau das, was Sie fordern, wenn Sie in der master Zweig sind.

Ich bin auch sehr gern:

git diff --name-status branch [newbranch]

Was ist nicht genau das, was Sie fragen, aber immer noch sehr nützlich in diesem Zusammenhang ist.

Was Sie sehen wollen, ist die Liste der abgehenden Commits. Sie können dies mit

git log master..branchName 

oder

git log master..branchName --oneline

Wo Ich gehe davon aus, dass „branch“ als Tracking-Zweig des „Master“ erstellt.

In ähnlicher Weise, um die eingehenden Änderungen sehen Sie verwenden können:

git log branchName..master

Dies ist vergleichbar mit der Antwort, die ich geschrieben an: Vorschau eines Git Push

Schau

diese Funktionen in Ihre Bash Profil:

  • gbout - git branch abgehend
  • gbin - git branch eingehend

Sie können diese wie verwenden:

  • Wenn auf Master: gbin branch1 <- diese zeigen Ihnen, was in branch1 ist und nicht in Master
  • Wenn auf Master: gbout branch1 <- dies wird Ihnen zeigen, was ist in Master, der nicht in Zweig 1

Dies wird mit jeder Filiale arbeiten.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

Ähnlich wie mehrere Antworten wie Alex V und NDavis, aber keiner von ihnen sind ziemlich gleich.

Wenn bereits in der Branche in Frage

Mit:

git diff master...

Welche vereint mehrere Funktionen:

  • es ist super kurz
  • zeigt die tatsächlichen Änderungen

Update:

Dies sollte wahrscheinlich git diff master, wird aber auch dies zeigt die diff, nicht die Commits wie die Frage angegeben.

-p Einwurf dort einige Dateiänderungen sehen

git log -p master..branch

Machen Sie einige Aliase:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

Ein Zweiges einzigartigen Commits finden:

gbl

Um das Protokoll des aktuellen Zweiges zu sehen, da Master abzweig:

git log master...

Wenn Sie derzeit auf Master sind, das Protokoll von einem anderen Zweig zu sehen, da es Master abgezweigt:

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3dots), aber manchmal zeigt es '+' statt '='

Ich fand

git diff <branch_with_changes> <branch_to_compare_to>

mehr sinnvoll, da Sie nicht nur über die Nachrichten begehen bekommen, sondern die ganze diff. Wenn Sie bereits auf dem Zweig sind, wollen Sie die Änderungen von und (zum Beispiel) sehen wollen, um zu sehen, was an den Master geändert hat, können Sie:

git diff HEAD master
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top