> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usebruno.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Provider

export const PremiumBadge = ({noLink}) => {
  const badge = <span style={{
    display: 'inline-flex',
    alignItems: 'center',
    gap: '0.25rem',
    padding: '0.25rem 0.5rem',
    fontSize: '0.75rem',
    fontWeight: '600',
    borderRadius: '0.5rem',
    backgroundColor: '#FCD34D',
    color: '#92400E',
    marginLeft: '0.5rem',
    lineHeight: '1.2'
  }}>
      PREMIUM
    </span>;
  if (noLink) {
    return badge;
  }
  return <a href="https://www.usebruno.com/pricing" target="_blank" rel="noopener noreferrer" style={{
    textDecoration: 'none'
  }}>
      {badge}
    </a>;
};

This guide covers Git operations for team members who create and share collections.

## Free Features

<Info>
  The following features are available in the **free version** starting from Bruno 3.0.0.
</Info>

### Initializing Git

Initializing Git in Bruno is the first step towards managing your API collections with version control. It's easy and quick to set up. Follow the steps below to initialize Git.

1. Launch the **Bruno app**.
2. Navigate to the collection you want to initialize with Git.
3. Click on the **Git Icon** in the top-right corner of the navbar.
4. Click the **Initialize** button to set up your collection with Git.

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/1-init-git.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=5c6021373c9e3ae0fb2c0a227b02711c" alt="Initialize Git" width="2758" height="1580" data-path="images/screenshots/git-integration/git-gui/1-init-git.webp" />

This allows you to perform other Git operations such as viewing diffs, pulling changes, and more.

### Viewing Diffs

Before committing changes, you can view the differences between your local changes and the previous version. Bruno provides two diff viewing modes to help you understand changes better.

1. Go to **Git UI**.
2. Click on any modified file to see the diff view.
3. Review the changes highlighted in the diff viewer.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/2-git-view.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=b68469db32d4e1a692d6cf14a4daa777" alt="View Diffs" width="2748" height="1780" data-path="images/screenshots/git-integration/git-gui/2-git-view.webp" />

#### Text-Based Diff View

The **Text-Based Diff** view displays changes in a traditional side-by-side or unified format, showing additions and deletions line-by-line. This is ideal for reviewing detailed code changes.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/git-text-based-diff.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=fc089f63b0d0f71f150b3ab647b1bc58" alt="Text-Based Diff" width="2606" height="1580" data-path="images/screenshots/git-integration/git-gui/git-text-based-diff.webp" />

#### Visual-Based Diff View

The **Visual-Based Diff** view provides a more intuitive, visual representation of changes. This mode highlights modifications in a user-friendly format, making it easier to understand structural changes at a glance.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/git-visual-based-diff.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=7057edac19157cfac7a2862a81ee7a11" alt="Visual-Based Diff" width="2606" height="1580" data-path="images/screenshots/git-integration/git-gui/git-visual-based-diff.webp" />

You can switch between these views to choose the format that best suits your workflow and helps you understand exactly what has changed before deciding to commit.

***

## Pro & Ultimate Features <PremiumBadge noLink />

<Info>
  The following features require [Pro or Ultimate](https://www.usebruno.com/pricing) editions.
</Info>

### Connecting to Remote Repository

Once you have initialized your collection, the next step is to connect it to a remote Git repository. Bruno gives you two ways to do this:

* **[Create a new GitHub repository directly from Bruno](#create-a-new-github-repository-from-bruno)** — recommended for new collections. Bruno creates the repo on GitHub for you, wires up the remote, and pushes the initial commit, all without leaving the app.
* **[Connect to an existing repository](#connect-to-an-existing-repository)** — use this if you already have a repo on GitHub, GitLab, Bitbucket, or any other Git provider.

#### Create a new GitHub repository from Bruno

After you initialize Git in a collection that has no remote yet, Bruno shows a **Create a repository on GitHub** prompt in the Git UI. This lets you create the repo on GitHub, set it as the remote, and push your local branch — all in one flow.

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/create-repo.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=6237e6381e35a724ead719986413207b" alt="Create Repository Prompt" width="2758" height="1572" data-path="images/screenshots/git-integration/git-gui/create-repo.webp" />

1. Open the **Git initialized** Bruno collection.
2. In the **Git UI**, click the **Create a Repo on GitHub** button.
3. If this is your first time, Bruno will prompt you to sign in to GitHub (via OAuth or a Personal Access Token). Authorize Bruno to manage repositories on your behalf.
4. Fill in the **Create GitHub Repository** dialog:
   * **Owner** — choose your personal account or any organization you have access to.
   * **Repository name** — the name of the new repo on GitHub.
   * **Description** *(optional)* — a short summary that appears on the GitHub repo page.
   * **Visibility** — pick **Private** (you and invited collaborators only) or **Public** (anyone on the internet can view).
5. Click **Create Repository**.

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/create-repo-details-dialog.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=82b6aeabadf640374cc9f6f6288a1f4f" alt="Create Repository Dialog" width="2758" height="1578" data-path="images/screenshots/git-integration/git-gui/create-repo-details-dialog.webp" />

Bruno will then:

* Create the new repository on GitHub via the GitHub API.
* Set it as the **origin** remote on your local collection automatically.
* Push your local branch to GitHub so the repo is ready for collaboration immediately.

<Tip>
  This flow is ideal for users without deep Git experience — you never have to visit github.com or copy-paste a remote URL. Once the repo is created, all standard Git operations (commit, push, pull, branches) continue to work the same way as before.
</Tip>

#### Connect to an existing repository

If you already have a repository on GitHub, GitLab, Bitbucket, or any other Git provider, click the **Add Remote** link on the same prompt (or use the **Remotes** option under **Quick Links**) to wire it up manually.

To connect Bruno to GitHub via this manual flow, you need to set up either an SSH key or a Personal Access Token (PAT) on GitHub. Follow this [official GitHub guide](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) to set it up.

1. Create an empty Git repository on GitHub (or your provider of choice).
2. Open the **Git initialized** Bruno collection.
3. Click on **Quick Links** (bottom-left corner).
4. Select **Remotes** from the dropdown.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/5-add-remote-option.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=9098332ddd3a049c34f6ffcfde52dc49" alt="Add Remote Option" width="2778" height="1914" data-path="images/screenshots/git-integration/git-gui/5-add-remote-option.webp" />

5. Click the **Add Remote** button.
6. Enter **Remote Name** and **URL** (HTTPS or SSH) and click **Save**.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/6-add-remote-dialogbox.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=37362c99c6e45fe391a3aa259c25b623" alt="Add Remote Dialog Box" width="2742" height="1512" data-path="images/screenshots/git-integration/git-gui/6-add-remote-dialogbox.webp" />

After completing the above steps, your collection will be connected to your remote repository. You'll need to **add and commit** (see below) some changes and push them to populate the remote.

Once your collection is connected to the remote repository, you can manage it directly from the Bruno app.

### Adding and Committing Changes

Once you've made changes to your collection in Bruno, you can easily commit those changes using the Git UI. This allows you to track changes and collaborate with your team efficiently.

Follow these steps to add and commit changes:

1. Go to **Git UI**.
2. Click the **Add Icon** to stage your changes.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/3-stage-changes.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=ec21ebc54dfeab28db19b00817c60779" alt="Stage Changes" width="2774" height="1698" data-path="images/screenshots/git-integration/git-gui/3-stage-changes.webp" />

3. Click the **Commit Changes** button.
4. Write a commit message and click **Commit**.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/4-commit-changes.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=c49b3cfde6d90c89734bd186f506dfda" alt="Commit Changes" width="2752" height="1684" data-path="images/screenshots/git-integration/git-gui/4-commit-changes.webp" />

> You can commit all changes in a single click by pressing the **Add All Changes** button.

By following these steps, your changes are now committed and tracked in Git, ready to be pushed or shared with others.

### Pushing Changes

The GUI-based Git integration in Bruno allows both engineering and non-engineering teams to work together in a fast, efficient, and accurate manner. This integration ensures that your collections remain consistently up-to-date across all team members.

> Before you can push or pull changes, ensure that the **remote repository** is linked to your project.

Push your local changes to the remote repository with just a few clicks.

1. Go to **Git UI** and click the **Fetch** button.
2. Click the **Push** button.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/8-push-pull.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=9cbbecadde5474a5ff0bbe38904e4ff1" alt="Push Pull" width="2760" height="1686" data-path="images/screenshots/git-integration/git-gui/8-push-pull.webp" />

Now you can see all your local changes pushed to the remote repository.

> Follow the Consumer guide to learn about the pulling changes feature.

### Branch Creation and Checkout

With branches in **Bruno**, you can manage your code effectively by isolating different features or tasks.

#### Creating Branches

Follow the steps below to create branches in Bruno.

1. Go to **Git UI**.
2. In the bottom left corner, click on **main** (or the default branch name).
3. Enter a **Branch Name**.
4. Click the **Create branch** button.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/7-create-branch.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=987d276463fe8bc069aefef04d1b07b0" alt="Create Branch" width="2372" height="1794" data-path="images/screenshots/git-integration/git-gui/7-create-branch.webp" />

Once the branch is created, you can start making changes to the branch.

#### Branch Checkout

1. Click on **main**.
2. Select the branch you want to switch to.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/9-branch-checkout.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=0beabd2b164283f58f2527007060b13e" alt="Create Branch" width="2366" height="1784" data-path="images/screenshots/git-integration/git-gui/9-branch-checkout.webp" />

3. Now you're switched to your selected branch.

### Stash Changes

Stashing allows you to temporarily save your uncommitted local changes (both staged and unstaged modified tracked files) and revert your working directory to a clean state matching the last commit. This is especially useful for quickly switching context or handling urgent tasks without having to commit unfinished work.

1. Go to **Git UI**.
2. When you have unstaged changes, click on **Stashes**.
3. Enter a **Stash Message** and click the **Stash files** button.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/11-stash-files.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=e7e4ff6a179315c6e4656297225cd6ff" alt="Stash Changes" width="2766" height="1794" data-path="images/screenshots/git-integration/git-gui/11-stash-files.webp" />

4. Your local changes are saved temporarily so you can work on something else or switch branches without losing your changes.
5. Stashes can be viewed, deleted, or applied to restore your changes later.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/12-stash-options.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=d530fab72e5dff238ddb0af77712bc76" alt="Stash Changes" width="2762" height="1790" data-path="images/screenshots/git-integration/git-gui/12-stash-options.webp" />

### Merge Conflict Resolution

When conflicts arise during pull or stash operations, Bruno provides a visual conflict resolution interface.

#### Conflict Detection

When conflicts are detected, Bruno provides information and options to resolve conflicts:

* **Commits behind and ahead of remote**
* **Conflicting changes identified**
* **Abort** - Abort the operation and restore previous state

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/13-merge-remotes.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=01a13f67d06dbcec3d47022ddb855c7d" alt="Conflict Detection" width="2792" height="1842" data-path="images/screenshots/git-integration/git-gui/13-merge-remotes.webp" />

#### Visual Conflict Editor

The conflict editor provides:

* **File List** - Shows all conflicted and non-conflicted files with status indicators
* **Diff View** - For each conflict, choose to:
  * Accept Incoming (remote version)
  * Accept Current (local version)
  * Accept Both (merge both versions)

Once all conflicts are resolved, enter a commit message and click the **Lock** icon to complete the merge.

<img src="https://mintcdn.com/bruno-a6972042/lK4oxIJsFt1GYUhN/images/screenshots/git-integration/git-gui/14-merge-conflicts.webp?fit=max&auto=format&n=lK4oxIJsFt1GYUhN&q=85&s=b2b42e4d9c1cf1e96a03343cfc90d495" alt="Conflict Editor" width="2804" height="1860" data-path="images/screenshots/git-integration/git-gui/14-merge-conflicts.webp" />

***

### Request Git History

The **History** tab inside the Git UI lets you browse the full commit history of any individual request. You can see every commit that touched that request — complete with commit message, author, date, and short hash — and click any commit to inspect the exact diff.

#### Viewing commit history for a request

1. Open the collection in Bruno and navigate to any request.
2. Click the **History** tab in the request panel (alongside Params, Body, Headers, etc.).

If Git has not been initialized for the collection yet, the tab shows the **Not a git repository** prompt with an **Initialize Git** button.

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/request-git-history.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=eef1343e411304f2d20ba756fa33ccca" alt="History tab — commit list" width="2758" height="1578" data-path="images/screenshots/git-integration/git-gui/request-git-history.webp" />

Once Git is initialized and you have at least one commit, the History tab lists every commit that modified the current request:

| Column      | Description                                 |
| ----------- | ------------------------------------------- |
| **Message** | The commit message                          |
| **Author**  | The Git author name                         |
| **Date**    | Relative timestamp (e.g. "Few seconds ago") |
| **Hash**    | Shortened commit SHA                        |

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/request-history-message.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=806dc810594f2a2394bf1432131df3b7" alt="History tab — no git repository" width="2758" height="1578" data-path="images/screenshots/git-integration/git-gui/request-history-message.webp" />

#### Inspecting a commit diff

Click any row in the commit list to open the diff for that commit. Bruno displays the file-level diff — additions and deletions — for the selected commit, using the same text and visual diff viewer available elsewhere in the Git UI.

<img src="https://mintcdn.com/bruno-a6972042/lHfKo6avpgjf1St1/images/screenshots/git-integration/git-gui/request-history-diff.webp?fit=max&auto=format&n=lHfKo6avpgjf1St1&q=85&s=a211ff52409cb11cae659048953529c9" alt="History tab — commit diff" width="2758" height="1578" data-path="images/screenshots/git-integration/git-gui/request-history-diff.webp" />

<Tip>
  Request-level history is particularly useful during code review or debugging — you can pinpoint exactly when a URL, header, or body parameter changed and who changed it, without scanning through the full collection history.
</Tip>
