Відображаються коміти, зроблені безпосередньо до гілки, ігноруючи злиття в Git


86

Коли використовується git, чи є спосіб показати коміти, зроблені до гілки, ігноруючи всі коміти, які були введені шляхом злиття?

Я намагаюся переглянути зміни коду, зроблені у гілці, ігноруючи зміни, внесені в інші гілки, які були об’єднані. Я знаю, що майже неможливо показати різницю таким чином, але я хотів би мати можливість з’ясуйте, які комітети мені потрібно переглянути.

Відповіді:


123

--no-merges

Обидва батьки мають однакову вагу у багатьох контекстах git. Якщо ви завжди були послідовними в об'єднанні інших змін, тоді ви можете виявити, що це дає вам те, що ви хочете.

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

В іншому випадку ви можете виключити коміти з інших названих гілок.

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

Якщо ви хочете переглянути зміни, які ви збираєтеся об'єднати назад у основну гілку, то найпростіше зробити це злиття на локальному клоні, а потім просто подивитися на різницю з першим батьком перед публікацією злиття.


Ця перша команда чудова у "правильній гілці за функцію" ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Адам Димітрук,

1
Здається, ніби я отримую переважно коміти з цієї гілки, але все ще відображаються коміти, витягнуті з майстра. У нас так багато відділень, що виключати інші було б недоцільно.
Channel Cat

@ChannelCat, чому б не перебазувати свою гілку на іншу, тоді всі коміти будуть в кінці?
Марк Інграм

7

Ви можете використовувати git cherryдля цього, він знайде вам коміти, які ще не були об’єднані з вищестоящим, або коміти, які знаходяться на одній гілці, але не на іншій. Отже, дано дві гілки з іменами "your-branch" і "master":

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"


Оскільки мою спробу відредагувати вашу відповідь було відхилено, я розміщу її тут: у вашому останньому рядку git між іменами гілок має бути три, а не дві крапки.
Ось так

@vedranm Вам не потрібні 3 крапки, лише дві ... хоча 3 працюють так само, як працюють 2.
Zzzach ...

4

Дуже хакерський спосіб:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.