Git

Git Merge -no-ff Опция

Git Merge -no-ff Опция

Разбиране на опцията Git Merge no-ff

Възможността за лесно сливане на git е една от силните му страни. По време на сливане, git използва пренасочване напред, когато забележи, че HEAD на текущия клон е предшественик на коммита, който се опитвате да обедините. При бързо превъртане напред няма нов ангажимент. Git просто премества показалеца. Ако това поведение не е желателно, можете да използвате флага no-ff, за да създадете нов ангажимент за сливането.

Как изглежда сливането със и без бързо напред

След пренасочване напред, вашата история на git ще изглежда така:

C0 -> C1 -> C2-> C3

За същия брой фиксирания ето история на обединяването без бързо превъртане напред:

В първия случай няма индикации, че е имало разклонения. Във втория случай историята показва ангажимент C4, за да посочи къде е настъпило сливането.

Преминаване през пример

Ще създадете git хранилище, ще създадете клон и след това ще опитате обединяването със и без бързо превъртане напред.

Раздел 1: Настройка

Първо, можете да създадете хранилището на git със следните стъпки:

$ mkdir my_project
$ cd my_project
$ git init
$ докосване a.текст
$ git add -A
$ git commit -m "C0: Добавяне на a.текст"

Сега нека създадем клон, наречен функции и да извършим няколко промени:

$ git характеристики на клона
$ git checkout функции
$ докосване b.текст
$ git add -A
$ git commit -m "C1: Добавяне на b.текст"
$ докосване c.текст
$ git add -A
$ git commit -m "C2: Добавяне на c.текст"
$ touch d.текст
$ git add -A
$ git commit -m "C3: Добавяне на d.текст"

Раздел 2: Обединяване с бързо пренасочване

Да се ​​върнем към главния клон и да обединим разклоненията в него:

$ git checkout master
$ git функции за сливане

Изход:

Актуализиране на 08076fb… 9ee88eb
Превъртане напред
б.txt | 0
° С.txt | 0
д.txt | 0
3 файла са променени, 0 вмъквания (+), 0 изтривания (-)
режим на създаване 100644 b.текст
режим на създаване 100644 c.текст
режим на създаване 100644 d.текст

Ако проверите историята, ще видите:

$ git log --oneline
9ee88eb C3: Добавяне на d.текст
c72b92c C2: Добавяне на c.текст
2e4039e C1: Добавяне на b.текст
08076fb C0: Добавяне на a.текст

И така, всички обвързвания от клон на функции са в главния клон сега. Ако продължите да правите промени в master, няма начин да разберете кога клонът на функциите е бил обединен в него.

Раздел 3: Без бързо препращане

Повторете раздел 1 за нова папка.

След това опитайте сливане без бързо пренасочване:

$ git checkout master
$ git merge - функция no-ff

Той ще отвори следното в текстовия редактор по подразбиране на вашия git:

Обединяване на клон „функции“
# Моля, въведете съобщение за ангажиране, за да обясните защо е необходимо това сливане,
# особено ако обединява актуализиран нагоре поток в клон на тема.
#
# Редове, започващи с '#', ще бъдат игнорирани и празно съобщение ще се прекъсне
# ангажирането.

Променете коментарите. В този случай можете просто да добавите „C4:“ преди „Обединяване на разклонения„ функции ““. Резултатът трябва да изглежда така:

Обединяване, направено от "рекурсивната" стратегия.
б.txt | 0
° С.txt | 0
д.txt | 0
3 файла са променени, 0 вмъквания (+), 0 изтривания (-)
режим на създаване 100644 b.текст
режим на създаване 100644 c.текст
режим на създаване 100644 d.текст

Сега, ако проверите историята, тя трябва да изглежда по следния начин:

$ git log --oneline
e071527 C4: Обединяване на клон „функции“
bb79c25 C3: Добавяне на d.текст
692bd8c C2: Добавяне на c.текст
a0df62a C1: Добавяне на b.текст
7575971 C0: Добавяне на a.текст

Можете да видите, че въпреки че имате точно същите промени, тази версия на сливането има допълнителния C4 ангажимент, който означава сливането на клон на функции в главен.

Заключение

Флагът git merge no-ff помага да се създаде по-четлива история. Позволява ви да поставяте тагове, които ясно показват къде е настъпило сливането. Това може да ви спести време и усилия по време на отстраняване на грешки.

Допълнително проучване:

Препратки:
Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...
Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...
Как да изтеглите и пуснете Civilization VI на Сид Майер на Linux
Въведение в играта Civilization 6 е модерен поглед върху класическата концепция, въведена в поредицата от игрите Age of Empires. Идеята беше доста про...