Jak widzę różnice w zatwierdzaniu między gałęziami w git?

341

Jestem na gałęzi X i dodałem jeszcze kilka zatwierdzeń. Chcę zobaczyć wszystkie różnice między MASTER a oddziałem, w którym jestem, pod względem zatwierdzania. Mógłbym po prostu zrobić

git checkout master
git log

a następnie a

git checkout branch-X
git log

i wizualnie je różnią, ale mam nadzieję na łatwiejszą, mniej podatną na błędy metodę.

Avery
źródło

Odpowiedzi:

324

Możesz uzyskać naprawdę ładny, wizualny efekt tego, jak różnią się Twoje gałęzie

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X
Tomek
źródło
13
To jednak nie pokaże różnic między gałęziami, o co się pyta.
Pablo Fernandez heelhook
48
git log --oneline --graph --all --decorate --abbrev-commitda podobne wyniki w krótszym / bardziej czytelnym poleceniu
Pablo Fernandez heelhook,
4
Lubię to:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery,
6
Niezwykle skomplikowane.
Shawn Erquhart
12
git log --oneline --graph --all --decoratewystarczy, --abbrev-commitnie jest wymagany, --onelinejest skrótem--pretty=oneline --abbrev-commit
avmohan
720

Możesz to łatwo zrobić za pomocą

git log master..branch-X

To pokaże, że zatwierdza to gałąź-X, ale master nie.

Haczyk na pięty Pablo Fernandez
źródło
9
Czy istnieje opcja, jeśli obie gałęzie zawierają zatwierdzenia, których nie ma druga? W tej chwili musisz przerzucić argumenty i uruchomić je w obie strony, aby zobaczyć zatwierdzenia, których nie zawiera druga gałąź.
Elliott Slaughter
38
Jeśli już się przełączyłeś branch-X, możesz użyćgit log master..
Dave
8
@ElliottSlaughter: Jeśli chcesz znaleźć zatwierdzenie, które są albo w master, albo w gałęzi X, ale nie w obu, możesz użyć git log master...branch-X(trzy kropki zamiast dwóch). Zobacz man gitrevisionswięcej informacji.
Xavier T.,
3
To naprawdę tylko połowa odpowiedzi. Żadne zatwierdzenia w trybie master, które powodują rozchodzenie się gałęzi, nie pojawią się
jterm
9
Jeśli zatwierdzenia zostały wybrane z gałęzi X do opanowania, to ich nie odfiltruje. Nadal będą znajdować się na liście zatwierdzeń „W gałęzi X, ale nie nadrzędnej”, mimo że tak naprawdę są w obu…
Tuffwer 12.12.17
88

Myślę, że to kwestia wyboru i kontekstu. Wolę używać

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

Wyświetli zatwierdzenia w fazie rozwoju, które nie znajdują się w gałęzi master.

Jeśli chcesz zobaczyć, które pliki są faktycznie modyfikowane, użyj

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

Jeśli nie podasz argumentów, wyświetli się pełna różnica. Jeśli chcesz zobaczyć różnicę wizualną, zainstaluj meldna systemie Linux lub WinMergeWindows. Upewnij się, że są to domyślne difftools. Następnie użyj czegoś takiego

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

W przypadku, gdy chcesz porównać go z bieżącym oddziałem. Bardziej wygodne jest użycie HEAD zamiast nazwy oddziału, np. Use:

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

Pokaże wszystkie zobowiązania, które mają zostać scalone

zainengineer
źródło
1
Jeśli porównasz gałąź wydania, która mogła ulec scaleniu. Możesz --no-mergesgit log origin/master..HEAD --oneline --no-merges
chcieć
15

Jeśli korzystasz z Linuksa, gitgmożesz to zrobić bardzo szybko i graficznie.

Jeśli nalegasz na linię poleceń, możesz użyć:

git log --oneline --decorate

Aby git logdomyślnie było ładniej, zazwyczaj ustawiam te globalne preferencje:

git config --global log.decorate true
git config --global log.abbrevCommit true
mvp
źródło
14

Sugerowałbym następujące, aby zobaczyć różnicę „w zatwierdzeniach”. Aby uzyskać różnicę symetryczną, powtórz polecenie z odwróconymi argumentami:

git cherry -v master [your branch, or HEAD as default]
mmaruska
źródło
Czy różni się to od git master..branch-X?
ilmirons
2
Jasne, „git cherry” jest sprytny: przekłada się z „commits” na „patche / diffs” i może uniknąć zgłaszania „łatki”, która jest na obu gałęziach, ale stosowana w innej kolejności.
mmaruska
8

jeśli chcesz użyć gitk:

gitk master..branch-X

ma ładne GUI starej szkoły

snowcamel
źródło
4

Nie jest to idealna odpowiedź, ale działa lepiej dla osób korzystających z Github:

wprowadź opis zdjęcia tutaj

Przejdź do swojego repozytorium: Insights -> Network

AIon
źródło
Również utworzenie żądania ściągnięcia pokaże różnice między gałęziami.
pkamb
OMG Chcę cię przytulić.
esseara
@esseara Też jestem wielkim huggerem :)) Nie ma za co: D
AIon
2

Jeśli chcesz porównać na podstawie komunikatów zatwierdzenia, możesz wykonać następujące czynności:

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)
Maroun
źródło
1
Zamiast używania --onelinei cutgit log --format='%s'
przesyłania
0
#! /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

Przyczynia się to, ponieważ pozwala wizualnie różnicować dzienniki aib, jeśli masz wizualne narzędzie do porównywania. Zastąp polecenie diff na końcu poleceniem, aby uruchomić wizualne narzędzie do porównywania.

Kim Briggs
źródło
0

Użyłem niektórych odpowiedzi i znalazłem jedną, która pasuje do mojej sprawy (upewnij się, że wszystkie zadania znajdują się w gałęzi wydania).

Inne metody również działają, ale stwierdziłem, że mogą dodawać niepotrzebne wiersze, np. Zatwierdzenia scalania, które nie dodają żadnej wartości.

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

lub możesz porównać swój prąd z mistrzem

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

git fetch jest tam, aby upewnić się, że używasz zaktualizowanych informacji.

W ten sposób każde zatwierdzenie będzie w linii i możesz skopiować / wkleić to do edytora tekstowego i rozpocząć porównywanie zadań z zatwierdzeniami, które zostaną scalone.

claudiu.f.marginean
źródło