Это вообще нуждается в представлении?

git перебазировать

Для создания функциональной ветки требуется корневая фиксация внутри первичной ветки, из которой будет создана новая ветка.

Но все же возможно зафиксировать (например, через запросы на включение) в основную ветку, и после нескольких коммитов ваша ветка не будет содержать вещи, которые были интегрированы в то же время.

Простой пример: Terraform. Во время разработки IaC, пусть это будет модуль, несколько раз мне приходилось выполнять проверку кода и планирование, используя:

terraform validate

terraform plan

Результат команды plan показал, что некоторые ресурсы будут уничтожены, в случае применения данного плана. Но я ничего не удалял.

Что случилось?

Новые ресурсы были объединены в основную ветку, а в моей ветке их не было — я создал свою ветку раньше. После ребаза — все ОК. Никаких разрушений, только дополнения, как и должно быть.

git checkout -b ‹new_branch›

Это позволяет создать новую ветку из того места, где вы сейчас находитесь, и сразу переключиться на нее. Просто классная экономия времени :)

git push — принудительно с арендой

Я обнаружил это совсем недавно и сразу же внедрил в свой рабочий процесс.

Каждый раз, когда вы делаете rebase вашей ветки, а затем пытаетесь отправить ее на удаленный сервер — ошибка. Обычное решение — выполнить коммит с флагом --force, что, кстати, не очень хорошая идея.

Я бы сказал, что в 99% случаев, когда вы используете этот флаг — все в порядке
(пока вы знаете, что делаете), но все же — этот 1%, оставленный здесь,
для человеческие ошибки.

Например, перезаписать всю основную ветку не обновленной функциональной веткой. Звучит очень плохо…

Так в чем же разница?

--force-with-lease позволяет защитить удаленную ветку от изменений при отправке, если локальная история не расходится с удаленной.

Другими словами — используя эту опцию, вы не будете перезаписывать чужие изменения, которые были внесены за это время — попытка сделать это вызовет ошибку.

git push origin — удалить

Если быть точным — это git push origin --delete <name_of_the_branch>

Это позволяет вам удалить ветку из удаленного источника, но сохранить ее локально.

Если вы не хотите случайно выполнить push в эту ветку еще раз, после этого также стоит выполнить git branch --unset-upstream.

‹name_of_the_branch› следует заменить на название ветки, которую вы хотите удалить.

git rm — кешируется

Если вы хотите добавить файл в .gitignore, но он в настоящее время отслеживается git, вы заметите, что git продолжит отслеживать файл. Чтобы выйти из этой ситуации, необходимо удалить файл из отслеживания.

git rm --cached <name_of_the_file>

После выполнения этой команды файл будет помещен в статус удаленный, но имейте в виду, что это не будет означать физического удаления файла. После выполнения коммита — файл все еще будет там, но больше не будет отслеживаться git.

git слияние — сквош

Чтобы сохранить линейную историю в первичной ветке, мне очень нравится использовать «сквош-коммит», который приводит к тому, что все коммиты из функциональной ветки «упаковываются» в один коммит, который добавляется в первичную ветку.

Есть недостатки?

Что ж — как всегда, это не идеальное решение. Создание одного коммита означает, что каждая часть новой функции будет упакована. Из-за этого подробная информация о реализации данной функции будет потеряна.

Если когда-нибудь в будущем вам понадобится отследить, кто внес какую-то ошибку — возможно, результат этого поиска будет неточным.

git pull — только для ff

«ff» означает «быстрая перемотка вперед».

Позволяет извлекать данные из удаленного источника, только если локальная история не отличается от удаленной. Это мой метод вытягивания по умолчанию :)

Привет!

Спасибо за то, что вы здесь, и за ваше время! Надеюсь, вы узнали что-то полезное отсюда. Не стесняйтесь комментировать!

Бесконечно благодарен!

Энди :)