Отображение коммитов, сделанных непосредственно в ветку, игнорируя слияния в Git

При использовании git, есть ли способ показать фиксации, сделанные ветке, игнорируя все коммиты, которые были внесены путем слияния?

Я пытаюсь просмотреть изменения кода, сделанные на ветке, игнорируя те, которые мы сделали в других ветвях, которые были объединены. Я знаю, что почти невозможно показать разницу в этом стиле, но я бы хотел узнайте, какие коммиты мне нужно пересмотреть.

Ответ 1

Оба родителя имеют одинаковый вес во многих контекстах в git. Если вы всегда были совместимы в слиянии других изменений, вы можете обнаружить, что это дает вам то, что вы хотите.

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

В противном случае вы можете исключить фиксации из других названных ветвей.

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

Если вы хотите просмотреть изменения, которые вы собираетесь объединить обратно в главный ветвь, то проще всего выполнить слияние на локальном клоне, а затем просто взглянуть на diff с первым родителем, прежде чем публиковать слияния.

Ответ 2

Вы можете использовать git cherry для этого, он найдет вам фиксации, которые еще не были объединены с восходящим потоком, или коммиты, которые находятся на одной ветки, а не на другой. Поэтому заданы две ветки с именем "ваша ветвь" и "мастер":

git cherry -v your-branch master

представит вам список коммитов по сравнению с их идентификатором патча:

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

Вы можете заметить, что фиксации с префиксом "-" - это те, которые появляются в обеих ветвях, тогда как префикс "+" доступен только в вашей ветке.

В качестве альтернативы вы можете использовать:

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

который покажет вам список коммитов, сделанных на "вашей ветке", которые еще не присутствуют на "master"

Ответ 3

Очень хакерский способ:

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