[Git] Git compare: быстрый способ сравнить две ветки
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Сегодня я хочу поделиться с вами небольшим bash-скриптом, который я успешно использую уже в течение нескольких лет.
Для начала опишу ситуацию, часто у меня возникающую и по сей день, которая и сподвигла на написание скрипта. Во время работы над новой задачей я периодически сохраняю текущее состояние проекта в гите, при этом сами коммиты не несут никакой смысловой нагрузки ни по содержанию ни по коммит-сообщениям.
В результате локальная ветка законченной задачи выглядит примерно так:
Наступает следующий этап:
1) Все коммиты из задачи объединяются в один большой (feature-all-private на картинке)
2) Этот большой коммит разбивается на аккуратные коммиты с внятными описаниями (feature-public на картинке):
Проблема: во время разбития коммитов я обычно провожу легкий рефекторинг, меняю коммиты местами и прочее, что потенциально может привести к незапланированным изменениям в коде (что-то потерялось при ребейзе или разрешении конфликтов, например)
Решение: в гите на тот момент не было инструмента быстро сравнить содержимое двух веток, поэтому я решил написать небольшой скрипт — git-cmp
Инструкция по установке достаточно простая — нужно локально сохранить bash-скрипт и добавить алиас в гите.
Теперь мы можем одной командой сравнить "рабочую" версию задачи (feature-private) с конечной "публикуемой" версией (feature-public):
git checkout feature-public
git cmp feature-private
Вывод которой покажет, что либо изменений нет и ветки идентичны:
$ git cmp feature-private
common parent commit: 758d3fa
cleaning...
...done
Либо изменения есть и они будут показаны с использованием git-diff:
$ git cmp feature-private
common parent commit: 758d3fa
diff --git a/test.txt b/test.txt
index 1e65656..2013c09 100644
--- a/test.txt
+++ b/test.txt
@@ -1,4 +1,4 @@
-oldLine
+newLine
cleaning...
...done
Таким образом мы можем быстро убедиться, что мы ничего не сломали при разбитии коммитов и ветка спокойно может быть опубликована:
Надеюсь, этот скрипт будет полезен кому-то еще
Исходники выложены на гитхабе
Картинки были созданы с помощью codepen.io
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Программирование, VueJS] Разбираем тестовое задание на должность фронтенд-разработчика на Vue.js
- [Программирование, Git] Переписывание истории репозитория кода, или почему иногда можно git push -f
- [История IT, Накопители, Старое железо, Хранение данных] История изобретения флешки в лицах и занимательных фактах
- [JavaScript, ReactJS, Программирование] Почему это антипаттерн? (перевод)
- [Разработка игр] История разработки The Light Remake. Часть 2
- [GitHub, Open source, Расширения для браузеров, Софт] Разработка uMatrix закрыта
- [GitHub, Go, Open source] Состоялся релиз консольной утилиты GitHub CLI 1.0
- [DevOps, Kubernetes, Хранение данных, Хранилища данных] Практический пример подключения хранилища на базе Ceph в кластер Kubernetes
- [Usability, Дизайн, Веб-дизайн, Дизайн мобильных приложений] UXD — Реальность и будущее в дизайне или человек во главе всего
- [IT-компании, Будущее здесь, Карьера в IT-индустрии, Учебный процесс в IT] Цифровое право: что это, зачем его нужно знать и где можно изучить
Теги для поиска: #_git, #_git, #_tutorial, #_bash_scripting, #_gitcmp, #_git
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:48
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Сегодня я хочу поделиться с вами небольшим bash-скриптом, который я успешно использую уже в течение нескольких лет. Для начала опишу ситуацию, часто у меня возникающую и по сей день, которая и сподвигла на написание скрипта. Во время работы над новой задачей я периодически сохраняю текущее состояние проекта в гите, при этом сами коммиты не несут никакой смысловой нагрузки ни по содержанию ни по коммит-сообщениям. В результате локальная ветка законченной задачи выглядит примерно так: Наступает следующий этап: 1) Все коммиты из задачи объединяются в один большой (feature-all-private на картинке) 2) Этот большой коммит разбивается на аккуратные коммиты с внятными описаниями (feature-public на картинке): Проблема: во время разбития коммитов я обычно провожу легкий рефекторинг, меняю коммиты местами и прочее, что потенциально может привести к незапланированным изменениям в коде (что-то потерялось при ребейзе или разрешении конфликтов, например) Решение: в гите на тот момент не было инструмента быстро сравнить содержимое двух веток, поэтому я решил написать небольшой скрипт — git-cmp Инструкция по установке достаточно простая — нужно локально сохранить bash-скрипт и добавить алиас в гите. Теперь мы можем одной командой сравнить "рабочую" версию задачи (feature-private) с конечной "публикуемой" версией (feature-public): git checkout feature-public
git cmp feature-private Вывод которой покажет, что либо изменений нет и ветки идентичны: $ git cmp feature-private
common parent commit: 758d3fa cleaning... ...done Либо изменения есть и они будут показаны с использованием git-diff: $ git cmp feature-private
common parent commit: 758d3fa diff --git a/test.txt b/test.txt index 1e65656..2013c09 100644 --- a/test.txt +++ b/test.txt @@ -1,4 +1,4 @@ -oldLine +newLine cleaning... ...done Таким образом мы можем быстро убедиться, что мы ничего не сломали при разбитии коммитов и ветка спокойно может быть опубликована: Надеюсь, этот скрипт будет полезен кому-то еще Исходники выложены на гитхабе Картинки были созданы с помощью codepen.io =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:48
Часовой пояс: UTC + 5