Основна причина того, що я бачу, полягає в наступному:
- Користувацький інтерфейс GitHub для об'єднання запитів на тягу (жовтень 2015) не дозволяє редагувати перший рядок повідомлення про фіксацію, примушуючи його бути
Merge pull request #123 from joebloggs/fix-snafoo
- Користувацький інтерфейс GitHub для перегляду історії комісій на даний момент не дозволяє переглядати історію гілки з
--first-parent
точки зору
- Інтерфейс GitHub за перегляд вини у файлі на даний момент не дозволяє переглядати провину файлу з
--first-parent
точки зору (зауважте, що це було виправлено лише у Git 2.6.2, тому ми могли пробачити GitHub за те, що він не мав цього доступно)
Таким чином, коли ви поєднаєте всі три вищезгадані ситуації, у вас з'являється ситуація, коли об'єднання неочищених комірок виглядає некрасиво з інтерфейсу GitHub.
Ваша історія зі стисканими комітами виглядатиме приблизно так
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... Hotfix for android display issue
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... Implemented pop-up to select language
Тоді як без обрізаних комісій історія виглядатиме приблизно так
1256556316... Merge pull request #423 from jrandom/add-slideshows
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... Merge pull request #324 from ahacker/fix-android-display
787g8fgf78... hotfix for #5849564648
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Якщо у вас є багато комісій у пошуку PR, де відбулася зміна, може стати трохи кошмаром, якщо ви обмежитеся користуванням інтерфейсом GitHub .
Наприклад, ви виявляєте, що нульовий покажчик де-посилається десь у файлі ... тож ви кажете "хто це зробив, і коли? На які версії релізів це впливає?". Потім ви переходите до винного виду в інтерфейсі GitHub і бачите, що рядок змінено789fdfffdf
... "о, але зачекайте секунду, у цьому рядку просто змінився відступ, щоб він відповідав решті коду", тому тепер вам потрібно перейти до стану дерева для цього файлу в батьківській комісії та повторно відвідати сторінка звинувачення ... врешті-решт, ви виявите похиту ... це зобов’язання з 6 місяців тому ... "о ****, це може вплинути на користувачів протягом 6 місяців", ви кажете ... ах, але зачекайте, що здійснити насправді був у запиті на виклик, і лише вчора було об'єднано, і ніхто ще не вирізав реліз ... "Чорт за вас, люди за об'єднання комісій без історії розкочування", - це крик, який зазвичай можна почути приблизно через 2 або 3 експедиції археології коду через Користувацький інтерфейс GitHub
Тепер давайте розглянемо, як це працює, якщо ви використовуєте командний рядок Git (і супер-приголомшливий 2.6.2, який має виправлення git blame --first-parent
)
- Якщо ви використовували командний рядок Git, ви змогли б повністю контролювати повідомлення про фіксацію злиття, і, таким чином, фіксація злиття може мати гарний підсумковий рядок.
Так виглядала б наша історія вчинення
$ git log
1256556316... #423 Added new slideshow feature
7hgf8978g9... Added new slideshow feature, JIRA # 848394839
85493g2458... Fixed slideshow display issue in ie
gh354354gh... wip, done for the week
789fdfffdf... minor alignment issue
56556316ad... #324 Hotfix for android display issue
787g8fgf78... hotfix for #5849564648
f56556316e... #28 Implemented pop-up to select language
9080gf6567... implemented feature # 65896859
gh34839843... minor fix (typo) for 3rd test
Але ми також можемо зробити
$ git log --first-parent
1256556316... #423 Added new slideshow feature
56556316ad... #324 Hotfix for android display issue
f56556316e... #28 Implemented pop-up to select language
(Іншими словами: Git CLI дозволяє вам мати торт і їсти його теж)
Тепер, коли ми стикаємося з проблемою нульового вказівника ... ну ми просто використовуємо, git blame --first-parent -w dodgy-file.c
і ми негайно даємо точну фіксацію, де де-посилання нульового вказівника було введено в головну гілку ігноруючи прості зміни білого простору.
Звичайно, якщо ви робите злиття за допомогою інтерфейсу GitHub, то git log --first-parent
це справді хитро, завдяки GitHub примушуючи перший рядок повідомлення про злиття:
1256556316... Merge pull request #423 from jrandom/add-slideshows
56556316ad... Merge pull request #324 from ahacker/fix-android-display
f56556316e... Merge pull request #28 from somwhere/select-lang-popup
Отже, коротко кажучи:
У користувальницькому інтерфейсі GitHub (жовтень 2015 р.) Є ряд недоліків у тому, як він об'єднує запити на витяг, як він подає історію фіксації та як присвоює інформацію про звинувачення. Найкращий на даний момент спосіб зламати ці дефекти в інтерфейсі GitHub - це попросити людей збити їхні зобов’язання перед об'єднанням.
У Git CLI немає цих проблем, і ви можете легко вибрати, який саме вид ви хочете бачити, щоб ви могли виявити причину того, чому певна зміна була внесена таким чином (переглянувши історію нерозбірливих комісій), а також перегляньте ефективно стиснуті коміти.
Пост сценарію
Кінцева причина, яку часто цитують для скоєння комбінезонів, полягає в тому, щоб зробити репортаж простішим ... якщо у вас є лише одна фіксація на зворотний порт (тобто прихильне посідання), то вибирати вишеньку легко ...
Добре, якщо ви переглядаєте історію git з git log --first-parent
тоді, ви можете просто вибрати вишневий вибір об'єднань. Більшість людей плутають вибір вибору злиття, оскільки ви повинні вказати -m N
варіант, але якщо ви отримали зобов’язання з того git log --first-parent
часу, ви знаєте, що це перший батько, якого ви хочете виконати, так що це будеgit cherry-pick -m 1 ...