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ę.


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

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.


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


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

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]

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


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


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)

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.