gitlab squash commits что это

Squash and merge

With squash and merge you can combine all your merge request’s commits into one and retain a clean history.

Squashing lets you tidy up the commit history of a branch when accepting a merge request. It applies all of the changes in the merge request as a single commit, and then merges that commit using the merge method set for the project.

In other words, squashing a merge request turns a long list of commits:

Into a single commit on merge:

The squashed commit’s default commit message is taken from the merge request title. You can edit the default message for squash commits.

It can also be customized before merging a merge request.

Squashing also works with the fast-forward merge strategy, see squashing and fast-forward merge for more details.

Use cases

When working on a feature branch, you sometimes want to commit your current progress, but don’t really care about the commit messages. Those ‘work in progress commits’ don’t necessarily contain important information and as such you’d rather not include them in your target branch.

With squash and merge, when the merge request is ready to be merged, all you have to do is enable squashing before you press merge to join the commits in the merge request into a single commit.

Enable squash for a merge request

Anyone who can create or edit a merge request can choose for it to be squashed on the merge request form. Users can select or clear the checkbox when they create the merge request:

This setting can then be overridden at the time of accepting the merge request. At the end of the merge request widget, next to the Merge button, the Squash commits checkbox can be either selected or unselected:

Читайте также:  какой национальности певица асти

Note that Squash and Merge might not be available depending on the project’s configuration for Squash Commit Options.

Commit metadata for squashed commits

Squash and fast-forward merge

When a project has the fast-forward merge setting enabled, the merge request must be able to be fast-forwarded without squashing in order to squash it. This is because squashing is only available when accepting a merge request, so a merge request may need to be rebased before squashing, even though squashing can itself be considered equivalent to rebasing.

Squash commits options

The Squash and Merge checkbox is displayed when you create a merge request and when you edit the description of an existing one, except when Squash Commit Options is set to Do not allow or Require.

Источник

GitLab — Squashing Commits

Сквош — это способ объединения всех коммитов в один, когда вы получаете запрос на слияние.

Шаги для раздавливания коммитов

Шаг 1 — Перейдите в каталог вашего проекта и извлеките новую ветку с именем squash-chapter с помощью команды git checkout

Флаг -b указывает имя новой ветви.

Шаг 2 — Теперь создайте новый файл с двумя коммитами, добавьте этот файл в рабочий каталог и сохраните изменения в хранилище вместе с сообщениями коммитов, как показано ниже —

Шаг 3 — Теперь объедините два вышеупомянутых коммита в один коммит с помощью команды ниже:

Здесь команда git rebase используется для интеграции изменений из одной ветви в другую, а HEAD

2 указывает последние два сжатых коммита, и если вы хотите сжать четыре коммита, вам нужно написать как HEAD

Шаг 4 — После ввода вышеуказанной команды откроется редактор, в котором вы должны изменить слово выбора на слово с разделителями во второй строке (вам нужно скомпоновать этот коммит).

Читайте также:  curl x get что это

Шаг 5 — Теперь переместите ветку в удаленный репозиторий, как показано ниже —

Источник

Как склеить коммиты и зачем это нужно

Другие материалы по Git

Когда вы открываете пулреквест, и ваш код смотрят и комментируют другие, бывает нужно что-то исправить. Обычно такие изменения мы комментируем сообщением вроде «Увеличил шрифт на 2px» или «Поменял оттенок фона в шапке». Такие маленькие изменения интересны только пока они в пулреквесте. Ревьювер (человек, который смотрит ваш код), может легко узнать, что и когда вы изменили, а не читать весь diff заново, а вы можете легко откатить коммит, если он не нужен. Но когда приходит время вливать пулреквест, эти маленькие коммиты теряют свою ценность. Поэтому лучше их склеить в один. Как — я расскажу вам сегодня.

Как подготовиться

Для некоторых операций из этой статьи гит будет открывать текстовый редактор. Во многих системах по умолчанию это Vim. Не самый дружелюбный для новичков. Чтобы вам было комфортно, установите в качестве гит-редактора ваш любимый редактор. Это делается с помощью команды:

Например, если у вас Mac OS, и вы хотите установить Atom в качестве редактора по умолчанию, введите:

А если у вас Windows, и вы хотите установить Notepad++ в качестве гит-редактора, ваша команда будет такая:

Вам нужно просто узнать команду для запуска вашего редактора и подставить её. Вот список команд для популярных редакторов.

Git — инструмент фронтендера

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

Как склеивать коммиты

Сначала узнаем, сколько коммитов нужно склеить. Эта команда покажет, какие коммиты у вас прибавились по сравнению с веткой master:

Отлично, у меня 5 коммитов. Теперь я хочу переписать историю с момента HEAD

Тут список моих коммитов и большой комментарий о том, что я могу сделать. Из списка комманд видно, что мы можем использовать squash или fixup для того, чтобы склеить коммиты. Первый пригодится тогда, когда вы хотите изменить коммит-месседж, а второй — когда хотите использовать коммит-месседж первого. Итак, чтобы склеить все коммиты, я делаю вот так:

Читайте также:  какой итальянский астроном изобрел термометр в 1592 году

Сквош коммитов

То есть я говорю гиту «используй первый коммит, а остальные приклей к нему». Потом я сохраняю файл и закрываю его. Гит склеивает коммиты и предлагает мне ввести коммит-месседж (показывает коммит-месседжи всех склеенных коммитов):

Коммит-месседжи склеенных коммитов

Я хочу оставить только последний:

Коммит-месседж результирующего коммита

Сохраняю файл и смотрю лог:

git log

Ура, остался один коммит с нужным сообщением.

git push

Теперь всё получилось! Используйте форс только тогда, когда вы уверены в своих действиях!

Как автоматизировать ребейз

Обычно всё-таки нужно оставить коммит-месседж первого изменения, типа «Сверстал то-то», остальные коммиты — просто правки к нему. Число правок иногда доходит до 15, не очень удобно сидеть и писать везде squash. Можно сделать так, чтобы коммиты автоматически присквошивались к нужному, только для этого нужно их правильно коммитить. Предположим, вы поменяли файл и хотите закоммитить изменения как правку по ревью:

git status

Сначала надо узнать хеш коммита, к которому этот коммит является правкой. Воспользуемся уже знакомым cherry :

Ага, вот он наш хеш. А теперь следующий коммит обозначим правкой к этому:

Необязательно в точности копировать весь хеш, достаточно первых 7 символов. Я обычно выделяю от начала и сколько выделится и копирую:

git log

Добавим ещё несколько правок таким образом. Посмотрим изменения:

Отлично. А теперь склеим все эти коммиты. Только не вручную. Гит сделает это за нас:

И гит сам подставит слово fixup там, где нужно:

Просто сохраняем, и гит склеивает коммиты и использует коммит-месседж первого:

Результат автосквоша

Источник

Сказочный портал