GIT merge --no-ff

В этом посте я попытаюсь объяснить, как git merge --no-ff может помочь нам. Я прочитал здесь http://nvie.com/posts/a-successful-git-branching-model/ (который я лично считаю действительно хорошим постом), в котором git merge --no-ff: "Это позволяет избежать потери информации об историческом существовании ветви элемента и группирует все коммиты, которые вместе добавили функцию ". Поэтому я нашел это действительно полезным и проведу несколько экспериментов.

Проблема в том, как мы можем узнать из данных журнала git, какие коммиты принадлежат каждой функции. Для этого я сделал следующий эксперимент. Предположим, два пользователя разрабатывают в программном проекте две разные и независимые функции (чтобы избежать конфликтов слияния). С последней стабильной версии мы продолжим так:

git init touch AAA.txt git add AAA.txt git commit -m "My stable software version" //this will simulate our project repository

Таким образом, с этого момента два пользователя (имя Алиса и Боб) создают две разные ветви и начинают работать над функциями:

git branch feature1_Alice git branch feature2_Bob И теперь Алиса и Боб начинают работать и взаимодействовать одновременно. Мы могли бы смоделировать его как:

git checkout feature1_Alice touch f1_A1.txt git add f1_A2.txt git commit -m "Solving little bug on feature 1" Боб делает два коммита после временной шкалы после того, как Алиса сделает это:

git checkout feature2_Bob touch f2_B1.txt git add f2_B1.txt git commit -m "Starting feature 2" touch f2_B2.txt git add f2_B2.txt git commit -m "feature 2: implementing new functionality" Затем Алиса заканчивает особенность:

git checkout feature1_Alice touch f2_A3.txt git add f2_A3.txt git commit -m "Feature 1 finished"

Затем Боб заканчивает Feature2:

git checkout feature2_Bob touch f1_A3.txt git add f1_A3.txt git commit -m "Feature 2 finished"

Теперь мы объединяем новую функцию с основной веткой:

git checkout master git log Выход:

commit c58dd35054f83c089292d090781438f37feeffa3

Автор: Хуан

Дата: вторник, 25 апреля 10:30:01 2017 +0200

My stable software version

git merge --no-ff feature1_Alice //We put a message on the created commit

Теперь выводим git log:

commit 50c5d1570fe0c047f72200bd57ef6cef6fa9077e Слияние: c58dd35 c136a23 Автор: juan Дата: вт 25 апр. 10:48:12 2017 +0200

Merging feature 1 to main
Merge branch 'feature1_Alice'

commit c136a23c49c546e5f48d9d0634e9bc51d67370cd Автор: juan Дата: Вторник, 25 апреля 10:41:49 2017 +0200

Feature 1 finished

commit c9dbb1b49444555fca528f562d3a38143fd521e9 Автор: juan Дата: Вторник, 25 апреля 10:35:24 2017 +0200

Solving little buf on feature 1

commit 58afad2b46565e614a99d94d1e1aa1c8520f9f2b Автор: juan Дата: вт 25 апр. 10:35:01 2017 +0200

Starting feature 1

commit c58dd35054f83c089292d090781438f37feeffa3 Автор: juan Дата: Вт 25 апр. 10:30:01 2017 +0200

My stable software version

И, наконец, объединить функцию 2:

git merge --no-ff feature2_Bob git log commit 3f27f78fefb30080ace629e561a242a4f8dbca56 Слияние: 50c5d15 2eee0c1 Автор: juan Дата: вт 25 апр. 10:54:20 2017 +0200

Merging feature 2 to master
Merge branch 'feature2_Bob'

commit 50c5d1570fe0c047f72200bd57ef6cef6fa9077e Слияние: c58dd35 c136a23 Автор: juan Дата: вт 25 апр. 10:48:12 2017 +0200

Merging feature 1 to main
Merge branch 'feature1_Alice'

commit 2eee0c1bb732443ae7d6f4893d651abfd558d55a Автор: juan Дата: Вторник, 25 апреля 10:43:14 2017 +0200

Feature 2 finished

commit c136a23c49c546e5f48d9d0634e9bc51d67370cd Автор: juan Дата: Вторник, 25 апреля 10:41:49 2017 +0200

Feature 1 finished

commit cd3bee2906e02df22866ba710891d21eaebb8013 Автор: juan Дата: вт 25 апр. 10:40:12 2017 +0200

feature 2: implementing new functionality

commit c6fdf092b2645f7d4088f9f439e820a9a820b891 Автор: juan Дата: вт 25 апр. 10:37:39 2017 +0200

Starting feature 2

commit c9dbb1b49444555fca528f562d3a38143fd521e9 Автор: juan Дата: Вторник, 25 апреля 10:35:24 2017 +0200

Solving little buf on feature 1

commit 58afad2b46565e614a99d94d1e1aa1c8520f9f2b Автор: juan Дата: вт 25 апр. 10:35:01 2017 +0200

Starting feature 1

commit c58dd35054f83c089292d090781438f37feeffa3 Автор: juan Дата: Вт 25 апр. 10:30:01 2017 +0200

My stable software version

Может ли кто-нибудь сказать, как я могу видеть из истории коммитов и коммит слияния, которые фиксируют влияние на каждую функцию? Я не вижу преимущества, прокомментированного в этой сети, когда мы вставляем альтернативные коммиты из разных функций (или из функции и мастера) во времени.

Единственное отличие в использовании --no-ff состоит в том, что коммит слияния имеет информацию о том, какие коммиты были слиты, но это бесполезно для отслеживания истории коммитов.

Заранее спасибо.

1 ответ

Решение

Вы можете взглянуть на свой график хранилища с git log --graph --oneline --decorate --all или просто позвоните gitk визуализировать вашу историю. Линейная текстовая версия, представленная простым git log не будет отображать информацию, которую вы ищете.

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

Другие вопросы по тегам