Git - просунуте злиття

просунуте злиття

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

Однак, іноді все ж будуть виникати складні конфлікти. На відміну від інших систем керування версіями, Git не намагається бути занадто розумним при вирішенні конфліктів злиття. Філософія Git полягає в тому, щоб бути розумним, коли злиття дозволяється однозначно, але якщо виникає конфлікт, він не намагається змудрував і дозволити його автоматично. Тому, якщо ви занадто довго відкладаєте злиття двох швидкозростаючих гілок, ви можете зіткнутися з деякими проблемами.

У цьому розділі ми розглянемо деякі з можливих проблем і інструменти, які надає Git, щоб допомогти вам впоратися з цими більш складними ситуаціями. Ми також розглянемо деякі інші нестандартні типи злиття, які ви можете виконувати, і ви дізнаєтеся як можна відкотити вже виконані злиття.

конфлікти злиття

Ми розповіли деякі основи вирішення конфліктів злиття в Основні конфлікти злиття. для роботи з більш складними конфліктами Git надає кілька інструментів, які допоможуть вам зрозуміти, що сталося і як краще обійтися з конфліктом.

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

Давайте розглянемо дуже простий приклад. Припустимо, у нас є файл з вихідними кодами на Ruby, які виводять на екран рядок hello world.

У нашому репозиторії, ми створимо нову гілку на ім'я whitespace і виконаємо заміну всіх закінчень рядків в стилі Unix на закінчення рядків у стилі DOS. Фактично, зміни будуть внесені в кожен рядок, але зміняться тільки пробільні символи. Потім ми замінимо рядок "hello world" на "hello mundo".

Тепер ми перемкнемося назад на гілку master і додамо до функції деяку документацію.