Як уникнути злиття-вчинення пекла на GitHub / BitBucket


101

Ми закінчуємо багато речей, подібних до цього у нашому репо:

Merge branch 'master' of bitbucket.org:user/repo

Це відбувається кожного разу, коли розробник синхронізує свою локальну вилку з репо-версією верхнього рівня.

Чи все-таки є можливість уникнути цього пекла злиття, не захаращуючи весь журнал репо? Чи можна їх уникати, коли якимось чином ініціювати запити?

Я знаю, що я можу зробити git rebase, якщо це зроблено лише в моїй локальній машині VM, чи є еквівалентність у інтерфейсі GitHub / BitBucket?

Як ви це робите?

Відповіді:


136

Побазуйте гілки функцій перед об'єднанням

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

git checkout master
git checkout -b feature/foo

# make some commits

git rebase master
git checkout master
git merge --ff-only feature/foo

У Rebase також є безліч прапорів, включаючи інтерактивне звільнення з -iпрапором, але це може вам не знадобитися, якщо ви зберігаєте речі максимально просто і хочете зберегти всю історію вашої філії на злитті.

Використовуйте --ff-onlyпрапор

Окрім перебазування, використання --ff-onlyпрапора гарантуватиме, що дозволені лише перемотування вперед. Зобов’язання не буде здійснено, якщо це буде замість нього об'єднання. На сторінці керівництва git-merge (1) написано:

--ffff-only

Відмовтеся від злиття та виходу з ненульовим статусом, якщо поточна HEAD вже оновлена ​​або злиття не може бути вирішено як швидкий вперед.


1
Це чудова відповідь. Я використовую rebase якомога частіше. Я не знав про --ff-прапор, хоча. Дуже здорово!
Лев Кореа

3
Дякуємо за оновлення та поради --ff-only. Однак, як сказано в моєму запитанні, як я можу це зробити в інтерфейсі GitHub / BitBucket?
Niklas9

3
@Niklas Я впевнений, що вам потрібно буде вдатися до CLI, щоб зробити те, що ви хочете. GitHub не розкриває всю потужність Git; лише підмножина його функцій, а також додаткові графічні та соціальні мережі. Удачі!
Тодд А. Джейкобс

3
Одне, на що слід звернути увагу під час цього процесу, полягає в тому, що перед об’єднанням гілки теми (feature / foo) назад у master, краще git pull origin master (якщо використовується віддалений), щоб переконатися, що гілка master є актуальною . Якщо були знайдені оновлення, переконайтеся, що ще раз перезавантажте майстер на гілку теми, перш ніж об’єднати її назад у головну.
chikamichi

19
@CodeGnome не називає це "вдаванням" до CLI ... насправді вам слід попередити про "звернення" до інтерфейсу користувача!
Droogans

9

Концепція "Тодд А. Джейкобс" вже згадувала "перезавантаження". Це лише більш детальний спосіб робити речі.

Скажімо, ви на головній гілці

$ git branch
  * master

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

$ git checkout -b fixbranch

Можливо, ви б пропрацювали пару днів на цій гілці і мали б пару комітетів.

Дня, коли ви хотіли підштовхнути свої зобов'язання до центрального майстер-репо! Оформити замовлення майстра та отримати останні зміни від центрального майстер-репо

$ git checkout master
$ git pull origin master

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

$ git checkout fixbranch
$ git rebase master

Тепер fixbranch оновлений до центрального майстра, дозвольте мені об'єднати fixbranch у головну гілку

 $ git checkout master
 $ git merge fixbranch

Я все! дозвольте мені підштовхнути місцевого господаря до центрального майстра

$ git push origin master

https://git-scm.com/book/en/v2/Git-Branching-Rebasing


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