Сегодня я хочу поделиться с вами небольшим bash-скриптом, который я успешно использую уже в течение нескольких лет.
Для начала опишу ситуацию, часто у меня возникающую и по сей день, которая и сподвигла на написание скрипта. Во время работы над новой задачей я периодически сохраняю текущее состояние проекта в гите, при этом сами коммиты не несут никакой смысловой нагрузки ни по содержанию ни по коммит-сообщениям.
В результате локальная ветка законченной задачи выглядит примерно так:
Наступает следующий этап:
1) Все коммиты из задачи объединяются в один большой
(feature-all-private
на картинке)
2) Этот большой коммит разбивается на аккуратные
коммиты с внятными описаниями (feature-public
на
картинке):
Проблема: во время разбития коммитов я обычно провожу легкий рефекторинг, меняю коммиты местами и прочее, что потенциально может привести к незапланированным изменениям в коде (что-то потерялось при ребейзе или разрешении конфликтов, например)
Решение: в гите на тот момент не было
инструмента быстро сравнить содержимое двух веток, поэтому я решил
написать небольшой скрипт git-cmp
Инструкция по установке достаточно простая нужно локально
сохранить bash-скрипт и добавить алиас в гите.
Теперь мы можем одной командой сравнить "рабочую" версию задачи
(feature-private
) с конечной "публикуемой" версией
(feature-public
):
git checkout feature-publicgit cmp feature-private
Вывод которой покажет, что либо изменений нет и ветки идентичны:
$ git cmp feature-private common parent commit: 758d3fa cleaning... ...done
Либо изменения есть и они будут показаны с использованием
git-diff
:
$ git cmp feature-privatecommon parent commit: 758d3fadiff --git a/test.txt b/test.txtindex 1e65656..2013c09 100644--- a/test.txt+++ b/test.txt@@ -1,4 +1,4 @@-oldLine+newLinecleaning......done
Таким образом мы можем быстро убедиться, что мы ничего не сломали при разбитии коммитов и ветка спокойно может быть опубликована:
Надеюсь, этот скрипт будет полезен кому-то еще
Исходники выложены на гитхабе
Картинки были созданы с помощью
codepen.io