wake-up-neo.com

Wie sehe ich die Commit-Unterschiede zwischen Zweigen in Git?

Ich bin auf Branch-X und habe noch ein paar Commits hinzugefügt. Ich möchte alle Unterschiede zwischen MASTER und der Branche sehen, in der ich mich engagiere. Ich könnte einfach eine machen

git checkout master
git log

und dann a

git checkout branch-X
git log

und visuell unterscheiden diese, aber ich hoffe auf eine einfachere, weniger fehleranfällige Methode.

283
Avery

Sie können eine wirklich schöne visuelle Ausgabe davon erhalten, wie sich Ihre Zweige dadurch unterscheiden

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X
280
tom

Das geht ganz einfach mit

git log master..branch-X

Das zeigt, dass Branch-X Commits hat, Master jedoch nicht.

Ich denke, es ist eine Frage der Wahl und des Kontexts. Ich bevorzuge die Verwendung

git log Origin/master..Origin/develop --oneline --no-merges

Es werden Commits in Develop angezeigt, die sich nicht im Master-Zweig befinden.

Wenn Sie sehen möchten, welche Dateien tatsächlich geändert wurden, verwenden Sie

git diff --stat Origin/master..Origin/develop --no-merges

Wenn Sie keine Argumente angeben, wird der volle Diff angezeigt. Wenn Sie visuelle Unterschiede sehen möchten, installieren Sie meld unter Linux oder WinMerge unter Windows. Stellen Sie sicher, dass es sich um die Standard-Diffe-Tools handelt. Verwenden Sie dann so etwas wie

git difftool -y Origin/master..Origin/develop --no-merges

Für den Fall, dass Sie es mit der aktuellen Filiale vergleichen möchten. Es ist praktischer, HEAD anstelle des Zweignamens wie folgt zu verwenden:

git fetch
git log Origin/master..HEAD --oneline --no-merges

Es werden Ihnen alle Commits angezeigt, die gerade zusammengeführt werden

64
zainengineer

Unter Linux ist gitg eine sehr schnelle und grafische Methode.

Wenn Sie auf einer Befehlszeile bestehen, können Sie Folgendes verwenden:

git log --oneline --decorate

Um git log Standardmäßig zu optimieren, lege ich normalerweise die folgenden globalen Einstellungen fest:

git config --global log.decorate true
git config --global log.abbrevCommit true
14
mvp

Ich würde folgendes vorschlagen, um den Unterschied "in Commits" zu sehen. Für symmetrische Unterschiede wiederholen Sie den Befehl mit umgekehrten Argumenten:

git cherry -v master [your branch, or HEAD as default]
12
mmaruska

wenn du gitk benutzen willst:

gitk master..branch-X

es hat eine schöne alte Schule GUI

8
snowcamel

Nicht die perfekte Antwort, funktioniert aber besser für Benutzer von Github:

enter image description here

Gehe zu deinem Repo: Insights -> Network

4
AIon

Ich habe einige der Antworten verwendet und eine gefunden, die zu meinem Fall passt (stellen Sie sicher, dass sich alle Aufgaben im Release-Zweig befinden).

Andere Methoden funktionieren auch, aber ich habe festgestellt, dass sie möglicherweise Zeilen hinzufügen, die ich nicht benötige, z. B. Merge-Commits, die keinen Wert hinzufügen.

git fetch
git log Origin/master..Origin/release-1.1 --oneline --no-merges

oder Sie können Ihre aktuelle mit Master vergleichen

git fetch
git log Origin/master..HEAD --oneline --no-merges

git fetch ist da, um sicherzustellen, dass Sie aktualisierte Informationen verwenden.

Auf diese Weise befindet sich jeder Commit in einer Zeile, und Sie können diesen in einen Texteditor kopieren/einfügen und die Aufgaben mit den Commits vergleichen, die zusammengeführt werden.

0

Wenn Sie anhand der Festschreibungsmeldungen vergleichen möchten, können Sie folgende Aktionen ausführen:

git fetch
git log --oneline Origin/master | cut -d' ' -f2- > master_log
git log --oneline Origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)
0
Maroun
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

Dies liegt daran, dass a- und b-Protokolle visuell nebeneinander verteilt werden können, wenn Sie ein visuelles Diff-Tool haben. Ersetzen Sie den Befehl diff am Ende durch den Befehl zum Starten des visuellen Diff-Tools.

0
Kim Briggs