2011-12-15 2 views
64

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

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

ответ

90

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

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

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

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

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

+0

Эта первая команда отлично в «правильная ветка для каждой функции» (https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR) –

+1

Кажется, что я получаю, главным образом, фиксацию из этой ветви, но она все еще показывает фиксации, которые были вытащены от мастера. У нас так много филиалов, что исключение других было бы непрактичным. –

+0

@ChannelКатите, почему бы не переложить свою ветку на другую, тогда все коммиты будут в конце? –

3

Очень хак путь:

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

5

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

git cherry -v your-branch master 

представит вам список коммитов по сравнению с их исправлениями ID:

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

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

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

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

который покажет вам список коммитов сделано на «вашей ветви», которые еще не присутствуют на «хозяина»

Смежные вопросы