Советы по сохранению чистой истории коммитов git


Решение 1 :

Допустим, вы работаете над функцией и создали ветку F1, выбрав ее из master. В процессе работы над веткой F1 вы создали несколько промежуточных коммитов. Однако, когда вы проверяете историю коммитов, вы обнаруживаете, что некоторые из этих коммитов избыточны. В таком случае вы можете объединить эти коммиты, т.е. объединить несколько коммитов и сделать их одним коммитом.

Ниже приведена история коммитов функциональной ветви до и после удаления.

Команда для удаления последних X коммитов с помощью интерактивного rebase следующая:

git rebase -i HEAD~[X]
Войти в полноэкранный режим Выйти из полноэкранного режима

Сквоширование коммитов также полезно, когда вы хотите объединить вашу функциональную ветку с мастер-веткой. Так как при сквошировании все лишние коммиты могут быть удалены, и после объединения функциональной ветки с мастер-веткой история коммитов git будет чистой.

Преимущество сквошинга:

История git остается чистой

Недостаток сквошинга :

Детальная история ветки больше недоступна.

Прежде чем перейти ко второму решению, давайте разберемся в разнице между git merge и git rebase.

git merge VS git rebase

И git merge, и git rebase используются для слияния кода из ветки feature в основную ветку (master).

git merge

Когда мы используем команду git merge для слияния кода из ветки feature в master, то git возьмет все изменения из моей ветки feature и создаст специальный коммит поверх моего коммита, называемый merge commit, который содержит все изменения из моей ветки feature и поместит этот коммит merge commit поверх ветки master. Граф git-коммита будет выглядеть следующим образом


Команда для слияния ветки fetaure_branch с веткой master следующая:

git checkout master
git merge feature_branch
Войти в полноэкранный режим Выйти из полноэкранного режима

Давайте разберемся с git rebase с помощью решения 2

Решение 2 :

Для того чтобы сохранить чистую историю коммитов, вместо git merge сделайте git rebase. В результате rebase возьмет все коммиты из ветви feature и переместит их поверх коммитов master. Структура графа коммитов выглядит следующим образом


Команда для ребазирования ветки fetaure_branch с мастер-веткой следующая:

git checkout master
git rebase feature_branch
Войти в полноэкранный режим Выйти из полноэкранного режима

Преимущество git rebase :

Он сохраняет историю коммитов основной ветви чистой и, следовательно, её легко отслеживать

Недостаток git rebase :

Детальная история ветки больше недоступна.

Поэтому использование сминания коммитов и последующего ребазинга с master позволит сохранить историю коммитов чистой и отслеживаемой.

Оцените статью
Procodings.ru
Добавить комментарий