# UI Bakery source control

{% hint style="info" %}
Contact our support team about the possibility of enabling Git on your plan.
{% endhint %}

**UI Bakery source control** is a *Git-based* version control system that allows you to manage your app's changes and collaborate with other developers. UI Bakery operates on the Git-API level, which means you can use any Git provider, such as GitHub, GitLab, BitBucket, etc.

**Main features:**

* Parallel development of a single application by multiple developers;
* Multi-instance support - multiple instances of UI Bakery connected to the same Git repository;
* Branch protection - you can protect branches from being changed directly in UI Bakery;
* Consistent development process - maintain the development process that is familiar to your team, including testing, code reviews, and deployment.

## Single instance process walkthrough

A newly created UI Bakery app or an app that is already developed can be connected to a Git repository.

{% stepper %}
{% step %}

### Connecting app to Git

1. Create a new app or open an existing one.
2. Navigate to your Git provider and create a **new** repository. \
   The repository MUST be empty.
3. In UI Bakery, click the **Connect Git** button in the top left corner.
4. Copy the *SSH repository URL* (for example, `git@github.com:user/fictional-octo-happiness.git`) and paste it to the **Git repository URL** field.
5. Next, copy the *SSH key* suggested by UI Bakery and create a new key in the **Deploy keys** settings of your Git provider. \
   For GitHub, follow the steps below:
   1. Open your repository settings and open the **Deploy keys** tab.
   2. Here, click **Add deploy key** and paste the SSH key you've copied before.
   3. Select the **Allow write** **access** checkbox and then click **Add key**.
6. In UI Bakery, click **Push to Git &** **Connect** and wait for the app to be pushed to the Git repository.

Once you connect an app to a Git repository, a new branch is created in the repository. This branch is called **main**. Main branch is protected from being changed directly in UI Bakery.
{% endstep %}

{% step %}

### Making changes to the app

1\. Go to the **main** branch and pull the latest changes.

2\. Create a **new** branch from the main branch.

3\. Make changes to the app.

4\. Commit and push the changes to the Git repository.

5\. Create a pull request to merge the changes to the **main** branch.

6\. Once the PR is approved and merged, pull the changes to the **main** UI Bakery instance.

Once the changes are pulled to the UI Bakery instance, you can review and deploy them using the standard UI Bakery workflow.
{% endstep %}

{% step %}

### Merging conflicts

UI Bakery app is split into multiple files and folders, which makes it easy to avoid merge conflicts. However, if you stumble upon a merge conflict while merging a PR, this means that the **main** branch was changed while you were working on your **feature** branch.

To resolve the conflict, you need to pull the latest changes from the main branch to your feature branch and resolve the conflicts manually using Git provider UI.

#### Merge conflicts involving UI Bakery updates

Sometimes you may encounter issues while working on different branches *before* and *after* updating your UI Bakery version. Below are some suggestions how you can possibly avoid such merge conflicts:

* Try planning your UI Bakery app updates for when you have only a few/no big features in development.
* Arranging actions into folders and utilizing pages for components can also help avoid any possible conflicts.
* After updating UI Bakery, **follow this flow** to make sure the branches created immediately after the update don't contain any unnecessary changes:
  * Update your UI Bakery app
  * Open the project you need and create a *new* branch
  * Do not make any changes in this branch
  * Next, commit, push, and merge this branch to the *main* branch
  * Once merged, pull the changes to the **main UI Bakery instance**
    {% endstep %}

{% step %}

### Restoring the previous version

When Git is connected to your app, it's no longer possible to restore versions from UI Bakery's [release history](https://docs.uibakery.io/workspace-management/app-environments/release-management#restoring-a-release-version).\
If you need to revert to the previous version, you need to synchronize your changes with the branch and pull it back to UI Bakery using the following steps:

1. **Git:**\
   — `git revert #{commit_hash}`\
   —  `git push`
2. **UI Bakery:**\
   — Pull branch changes from Git\
   — Release your app

{% hint style="success" %}
It should be noted that Git commits are *separate* from app releases. If, for example, you delete the branch from which the latest app version was released, your app will stay as it was.
{% endhint %}
{% endstep %}
{% endstepper %}

## Sources overview

A typical UI Bakery application is broken down into *files system structure* upon pushing to the Git repository.&#x20;

The following app sources **are stored** in the Git repository:

* App settings
* App pages and components
* App actions with folders structure

The following is **NOT stored** in Git (is a part of the UI Bakery instance):

* Instance data sources
* Deployment history
* Environment variables
* Audit logs


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.uibakery.io/concepts/source-control.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
