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.
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
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
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
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]
wenn du gitk benutzen willst:
gitk master..branch-X
es hat eine schöne alte Schule GUI
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.
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)
#! /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.