Введение ¶
Часто используемые мною команды и пояснения к ним. Надеюсь будет кому-то так же полезно как и мне.
Основное ¶
В Git есть встроенный графический интерфейс ¶
Gitk - простой встроенный графический интерфейс. Мне очень нравится из-за своей точности и наглядности. Я стараюсь не пользоваться какими-либо Git UI и всё делаю командами, а эта и так работает только в режиме просмотра.
- Дерево коммитов с тегами и ветками
- Хеш выбранного коммита из дерева
- Список изменённых файлов в этом коммите
- Переключатель режима diff
- Сам diff из коммита с его описанием в начале
На Manjaro кроме самого Git, нужно поставить ещё и tk, тогда заработает. Как на других дистрибутивах - не знаю.
|
|
Как обновлять настройки окружений основываясь на diff-е нового окружения ¶
Тут вот какой момент. У меня в инфраструктурном репозитории есть, к примеру, values для Helmfile окружений Development и Production.
|
|
И вот разрабатывал я разрабатывал новые приложения, менял настройки в development и теперь мне нужно всё то же самое перенести в production. Чтобы не вспоминать все мелочи где что нужно поменять делаю следующее.
- Переходим на ветку с актуальным development
|
|
- Смотрим когда последний раз менялся production
|
|
Здесь ./production
это путь к папке, изменения по файлам которой нас интересует. Можно конкретный файл указать или несколько источников. В данном случае мы получим хеш самого последнего коммита, в котором что-либо менялось в production.
- Смотрим изменения с этого момента и по сей день
Теперь нам нужно отследить все изменения с момента последней версии production по текущий момент, который является актуальным development.
|
|
Хеш 493d3aa это тот самый, который я получил в прошлом пункте для production.
|
|
Таким образом, мы теперь можем в ручном режиме перенести все интересующие нас изменения в production и ничего не потерять.
Как искать пароли и чувствительные данные используя поиск по коммитам ¶
У Git есть встроенный поиск по файлам в коммитах. Можно использовать регулярные выражения для поиска секретный данных. Это применимо в отдельных ручных операциях, но намного правильнее будет настроить и постоянно иметь Gitleaks или Trivy.
|
|
Таким образом, можно найти все файлы в истории, которые содержат секреты и выполнять ротацию. Вырезать их из истории не имеет смысла, лучше просто поменять секреты.
Rebase стратегии ¶
Когда нужно выполнить rebase кучей конфликтов и ты точно знаешь, что тебе просто нужно оставить всё как есть в текущей\целевой ветке, то можно сделать так.
- Убеждаемся, что наша локальная ветка (которую мы будем rebase-ить) запушена и такая же как в облаке
Для чего это нужно? Для самоконтроля. К примеру, у меня задача сделать rebase development ветки на main да так, чтобы она не поменялась, просто перенести. Если на момент начала переноса я проверил, что diff-a origin/development у меня нет, то после переноса, я смогу сравнить git diff origin/development..development
и там так же должно быть пусто.
|
|
- Выполняем одну из операций ниже
|
|
Git разрешит все конфликты в пользу одной из веток, в зависимости от ours
или theirs
.
Как сбросить локальную ветку до состояния облачной, если кто-то пушил с форсом ¶
Тут всё довольно просто. К примеру, мы работаем на development.
- Переходим на ветку
|
|
- Делаем git fetch
|
|
- Делаем reset
|
|
Всё, наша ветка точно такая как облаке.