Git: Jak wyświetlić zmiany w tej gałęzi, ale nie z połączonych gałęzi

90

Załóżmy, że historia zatwierdzeń git wygląda następująco:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

Czy jest możliwe, aby lista gitów zawierała tylko commity na master, AF? Innymi słowy, jeśli zatwierdzenie znajdowało się w dołączonej gałęzi, nie chcę, aby było widoczne.

wch
źródło
2
Więc skąd miałoby wiedzieć, która z połączonych gałęzi Di Zbyła częścią?
Romain
2
Po scaleniu z wzorcem poprzednie zatwierdzenia główne są pierwszymi rodzicami w scalaniu. git logpozwala wyświetlać tylko te zatwierdzenia z --first-parent, więc otrzymujesz właściwe rzeczy
CharlesB

Odpowiedzi:

133

git logma opcję --first-parent, więc nie otrzymasz topichistorii.

Po połączeniu z master, mastercommits są pierwszymi rodzicami w scalaniu. Dziennik Git pozwala na wyświetlanie tylko tych zatwierdzeń z opcją --first-parent, więc otrzymujesz właściwe rzeczy.

Charles B.
źródło
25
+1 --first-parentrobi to :) w połączeniu z --no-mergestobą możesz ukryć zatwierdzenie połączenia
c00kiemon5ter
Głosowałem za, ale nadal wydaje się to przesadne w porównaniu z moją odpowiedzią
UpAndAdam
22

TLDR : git log origin/master --no-mergesda ci dziennik master i wykluczy wszelkie scalone zatwierdzenia (w tym przypadku x, y, z)

Oryginalne punkty

Jest jeszcze jeden ogólny sposób rozwiązania tego --first-parentproblemu , który nie polega na tym, który będzie pomocny w pewnych sytuacjach .. używanie filtrów wykluczania gałęzi

git log origin/topic ^origin/master To da ci dziennik origin/topicz origin/masterusuniętymi wszystkimi zatwierdzeniami.

możesz także dodać, w --no-mergesktórym ukryjesz zatwierdzenia scalania, których możesz lub nie chcesz.

Inną przydatną wskazówką jest użycie shortlogzamiast tego, logktóre daje bardziej skrócone podsumowanie, które może być przydatne w przypadku informacji o wydaniu lub komunikacji o tym, co jest w gałęzi.

Aktualizacja
Po ponownym przeczytaniu tego, faktycznie chciałbyś być prawie odwrotnością tego, co opublikowałem; jednak skończyłoby się na wykluczeniu wszystkiego, co jest na master i foo ( git log origin/master ^origin/foo). Jednak możesz również uzyskać to, o co prosisz (ukryj wszystkie zatwierdzenia, które są częścią scaleń) za pomocągit log origin/master --no-merges

UpAndAdam
źródło
0

Odpowiedź Charlesa działa dla mnie.

git log has option --first-parent --no-merges, so you won't get topic history.

Ale jeśli używasz dowolnego graficznego interfejsu użytkownika do swoich działań Git, takich jak rozszerzenie Git, SourceTree, Tortoise Git,

Następnie dostępne są bezpośrednie opcje sprawdzenia pierwszego rodzica w twoich narzędziach. Pomyślałem o dodaniu tej odpowiedzi do listy, ponieważ większość ludzi uważa interfejs graficzny za łatwy. W razie potrzeby możesz bezpośrednio wybrać wszystkie zatwierdzenia z tej gałęzi z narzędzia.

Załączam przykład dwóch narzędzi, Byłoby podobnie również dla innych narzędzi: [Zamazałem nazwę użytkownika, nazwę repozytorium git ponieważ jest to repozytorium prywatne, ale nadal możesz dowiedzieć się, jak używać pierwszego rodzica z narzędzi ]

  1. Rozszerzenie Git
    • Otwórz rozszerzenie Git -> Sprawdź gałąź funkcji, w której chcesz zobaczyć zmiany, istnieje opcja wyboru pierwszych zatwierdzeń, jak pokazano na obrazku:

wprowadź opis obrazu tutaj

  1. Tortoise Git
    • Otwórz folder repozytorium -> Kliknij Pokaż logi z Tortoise Git -> Pobierz gałąź i wybierz pierwsze zatwierdzenia, jak pokazano na obrazku

wprowadź opis obrazu tutaj

KushalSeth
źródło
-3

Czy to nie działa?

git log master
git log --stat master
Stefan Kendall
źródło
Nie, te nie działają. Zatwierdzenie scalające ma dwoje rodziców; wszystko, co pochodzi od obojga rodziców, znajduje się w gałęzi „master”.
GoZoner