# Написание кода для проекта

Используйте ветви, вилки, фиксации и запросы на вытягивание для безопасной записи, уточнения и предложения изменений кода для совместных проектов.

Когда вы вносите свой вклад в проект, необходимо безопасное место для написания и уточнения кода, прежде чем он влияет на основную базу кода. Ветви, вилки, фиксации и запросы на вытягивание работают вместе, чтобы предоставить вам это пространство, чтобы вы могли экспериментировать, проверять работу постепенно и предлагать готовые изменения для проверки.

## Изоляция работы с ветвями и вилками

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

* Используйте **ветвь** при наличии доступа на запись к репозиторию. Ветвь позволяет разрабатывать функцию, устранять ошибку или экспериментировать в автономной области репозитория, не влияя на другие ветви. Вы создаете ветвь из существующей ветви, как правило, ветвь по умолчанию.
* Используйте **вилку** , если у вас нет доступа на запись или если требуется полная независимость от исходного проекта. Вилка — это отдельный репозиторий, который предоставляет общий доступ к коду и параметрам видимости исходному репозиторию upstream. Он имеет собственные ветви, проблемы и запросы на вытягивание. С помощью вилки можно также открывать запросы на вытягивание для вышестоящего репозитория.

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

## Проверка работы с фиксациями

При написании кода вы сохраняете небольшие, значимые группы изменений в виде **фиксаций**. Каждая фиксация записывает моментальный снимок вашей работы вместе с сообщением, описывающим изменение, что упрощает отслеживание журнала, просмотр изменений и понимание развития кода.

Часто фиксация в ветви или вилке позволяет:

* Разорвать более крупное изменение в доступных для просмотра шагах.
* Откат к предыдущему состоянию, если эксперимент не работает.
* Предоставьте рецензентам четкую историю того, как вы прибыли на окончательное изменение.

## Предложение изменений с запросами на вытягивание

Когда ваша работа готова к совместному использованию, откройте **запрос на вытягивание** , чтобы предложить объединение изменений в базовую ветвь. Запрос на вытягивание объединяет фиксации, описание изменения, а рецензенты инструментов должны обсудить и оценить его перед слиянием.

Вы можете открыть запрос на вытягивание во время работы, создав черновик запроса на вытягивание, который предоставляет общий доступ к изменениям без официального запроса проверки. Это полезно, если требуется ранний отзыв или требуется выполнить автоматические проверки кода.

## Сохранение текущего и оптимизированного кода

Пока запрос на вытягивание открыт, базовая ветвь может изменяться, так как другие пользователи объединяют свою работу. Чтобы сохранить изменения чистыми и сократить конфликты, вы можете:

* Объединение или перебазируйте базовую ветвь в ветвь часто, чтобы ваш дифф оставался сосредоточенным на том, что ваше изменение вводит.
  GitHub показывает трехточие дифф по умолчанию, который сравнивает ветвь с точкой, в которой она расходится от базы.
* Перебазируйте, чтобы принудить журнал фиксации грязной фиксации — переупорядочение, объединение или повторную фиксацию перед запросом на проверку.
* Разрешать конфликты слиянием, если Git не может автоматически объединять конкурирующие изменения.

## Работа в элементах управления репозитория

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

* **Защищенные ветви и наборы правил** могут блокировать прямые отправки в важные ветви, требовать линейную историю или подписанные фиксации, а также требовать проверки состояния или проверки перед слиянием.
* **Владельцы кода** автоматически запрашиваются для проверки при изменении файлов, принадлежащих им, поэтому план их утверждения в конфиденциальных областях.
* **Наборы правил push-уведомлений** могут применяться в сети вилки, ограничивая пути к файлам, размеры или имена в каждом вилке.
* **Перехватчики предварительного получения** позволяют администраторам GitHub Enterprise Server применять проверки политики на сервере до принятия фиксаций.

## Интегрированная цепочка инструментов

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

* **Code scanning** и **Dependabot** проблемы безопасности и уязвимые зависимости при переходе по запросу на вытягивание, поэтому вы можете применить безопасные методики написания кода рано.
* **GitHub Actions** может выполнять непрерывную интеграцию при каждой отправке запроса на вытягивание, создавать и тестировать изменения автоматически.

## Дополнительные материалы

* [Создание запроса на включение изменений](/ru/enterprise-server@3.22/pull-requests/how-tos/create-pull-requests/creating-a-pull-request)