Отображение коммитов, сделанных непосредственно в ветку, игнорируя слияния в 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 '^\*'