Pokazywanie zatwierdzeń wykonanych bezpośrednio w gałęzi, ignorowanie scaleń w Git

86

Czy podczas korzystania z git istnieje sposób na pokazanie zatwierdzeń wykonanych w gałęzi, z pominięciem wszystkich zatwierdzeń, które zostały wprowadzone przez scalenie?

Próbuję przejrzeć zmiany w kodzie dokonane w gałęzi, ignorując te, które wprowadziliśmy w innych gałęziach, które zostały scalone. Wiem, że pokazanie różnicy w ten sposób jest prawie niemożliwe, ale chciałbym móc dowiedz się, które zobowiązania muszę przejrzeć.

Kanał Cat
źródło

Odpowiedzi:

123

--no-merges

Oboje rodzice mają taką samą wagę w wielu kontekstach w git. Jeśli zawsze byłeś konsekwentny w scalaniu innych zmian, może się okazać, że to daje ci to, czego chcesz.

git log --no-merges --first-parent

W przeciwnym razie możesz wykluczyć zmiany z innych nazwanych gałęzi.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Jeśli chcesz przejrzeć zmiany, które zamierzasz ponownie scalić z główną gałęzią, najłatwiej jest wykonać scalenie na klonie lokalnym, a następnie po prostu spojrzeć na różnicę z pierwszym rodzicem przed opublikowaniem scalania.

CB Bailey
źródło
To pierwsze polecenie doskonale
sprawdza się
1
Wygląda na to, że otrzymuję głównie commity z tej gałęzi, ale nadal pokazuje zmiany, które zostały wyciągnięte z mastera. Mamy tak wiele gałęzi, że wykluczenie innych byłoby niepraktyczne.
Channel Cat
@ChannelCat dlaczego nie przełożyć swojej gałęzi na drugą, a wtedy wszystkie zatwierdzenia będą na końcu?
Mark Ingram,
7

Możesz użyć git cherrydo tego, znajdzie zatwierdzenia, które nie zostały jeszcze scalone z nadrzędnym kanałem lub zatwierdzenia, które są w jednej gałęzi, ale nie w drugiej. Mając więc dwie gałęzie nazwane „twoja-gałąź” i „główna”:

git cherry -v your-branch master

przedstawi listę zatwierdzeń w porównaniu z ich identyfikatorem poprawki:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Możesz zauważyć, że zatwierdzenia poprzedzone znakiem „-” to te, które pojawiają się w obu gałęziach, podczas gdy te z prefiksem „+” są dostępne tylko w Twojej gałęzi.

Alternatywnie możesz użyć:

git log --pretty=format:"%h %s" your-branch..master --no-merges

który pokaże listę zatwierdzeń wykonanych na "twojej-gałęzi", których jeszcze nie ma na "master"

jbochniak
źródło
Ponieważ moja próba edycji twojej odpowiedzi została odrzucona, opublikuję ją tutaj: w twojej ostatniej linii gita powinny być trzy kropki, a nie dwie, między nazwami gałęzi. W ten sposób: twoja-gałąź ... mistrz
vedranm
@vedranm Nie potrzebujesz 3 kropek, tylko dwie ... chociaż 3 działają tak samo, jak 2.
Zzzach ...
4

Bardzo hakerski sposób:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
źródło