Quick start

In this quick start, you will clone a new repository, use the Graphite CLI to create and manage PRs, and visualize and review changes in the Graphite web app.

Prerequisites

Clone a repository

After you've successfully installed and authenticated the Graphite CLI, you can use gt commands to install and manipulate repositories and their data.

1. Create a new repository on GitHub with a README so you can create, merge, and visualize new PRs. For this tutorial, we'll use a sample repository called gt-quick-start:

$ gt clone https://github.com/<your-repo-name>
Passing command through to git...
Running: "git clone https://github.com/<your-repo-name>"
Cloning into 'gt-quick-start'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

Note that the output includes the statement "passing command through to git..."

gt passes unrecognizable commands through to git so you can run commands like gt clone, gt add, and gt status even though they aren't native commands in Graphite.

2. Enter the newly cloned repository.

$ cd gt-quick-start
$ gt log
Graphite has not been initialized, attempting to setup now...
Welcome to Graphite!
? Select a trunk branch, which you open pull requests against - inferred trunk main (autocomplete or arrow keys)
❯ main

In an attempt to run gt log (a command that visualizes all of the stacked branches in our repository), the CLI prompts us to initialize Graphite in this repository.

Most repositories refer to main as their "trunk branch," or the branch you'll default to opening pull requests against. Select main as our trunk branch by pressing enter.

3. Now, you'll see the following after running gt log again:

◉ main (current)
2 minutes ago
│ 2bbd959 - Initial commit

gt log successfully outputs a graph of the branches in your repository. Right now, this only contains the initial README commit on our default branch, main.

Create the first branch in a stack

1. Edit the README file:

$ echo 'This repo is created with Graphite!' > README.md
$ gt create
? You have no staged changes. What would you like to do? › - Use arrow-keys. Return to submit.
❯ Commit all file changes (--all)
Create a branch with no commit
Abort this operation

Here's what's happening with that command:

  • Branches are the primary unit of change in Graphite, so the create command creates a branch with your changes.

  • Since we did not stage our change, we are prompted to do it interactively. You can also stage changes with the --all or -a flag as shown in the menu.

  • After choosing to commit all changes, a standard git commit editor will be opened, where you can type the commit message for your branch. You can also pass this into the command with the --message or -m flag to avoid opening an editor.

  • A branch name will be generated from the provided commit message. You can also provide your own branch name by passing it to the gt create command as an argument.

2. Run gt log to see the new state of your repository:

◉ 02-22-editing_readme (current)
1 minute ago
6044229 - Editing README
◯ main
16 hours ago
│ 2bbd959 - Initial commit

You've now created and checked out a branch called editing_readme based off of main that contains changes to the README.md file.

Add to the stack

1. Create a few more stacked branches for the purpose of visualizing a stack in the CLI:

$ echo fizz > fizz.txt
$ gt c -am "fizz"
$ echo buzz > buzz.txt
$ gt c -am "buzz"

You created two branches stacked on top of your previous branch that create fizz.txt and buzz.txt files respectively. (c is a shortcut for create.)

2. Run gt log again to see these changes:

◉ 02-22-buzz (current)
2 seconds ago
│ 5c1627b - buzz
◯ 02-22-fizz
17 seconds ago
│ 6234fb6 - fizz
◯ 02-22-editing_readme
10 minutes ago
6044229 - Editing README
◯ main
1 hour ago
│ 2bbd959 - Initial commit

You can also run gt log short or gt ls to see this graph in condensed form:

◉ 02-22-buzz
◯ 02-22-fizz
◯ 02-22-editing_readme
◯ main

Submit a stack

1. Create PRs for each of these branches with the gt submit command, starting with edit_readme.

$ gt submit
🥞 Validating that this Graphite stack is ready to submit...
📝 Preparing to submit PRs for the following branches...
▸ 02-22-editing_readme (Create)
? Title › Editing README

You can create a title for the PR or use the default commit message, editing README, by pressing enter.

🥞 Validating that this Graphite stack is ready to submit...
📝 Preparing to submit PRs for the following branches...
▸ 02-22-editing_readme (Create)
✔ Title … Editing README
? Body › - Use arrow-keys. Return to submit.
❯ Edit Body (using vi)
Skip (leave empty)

2. Next, you're asked to edit the body of the PR in vi. It's a much better experience to use the Graphite app to edit PRs, so leave this empty for now.

🥞 Validating that this Graphite stack is ready to submit...
📝 Preparing to submit PRs for the following branches...
▸ 02-22-editing_readme (Create)
✔ Title … Editing README
✔ Body › Skip (leave empty)
? Submit › - Use arrow-keys. Return to submit.
❯ Publish Pull Request
Create Draft Pull Request

3. You can publish your changes or create a draft. Choose publish for this PR.

The above process repeats for every branch in this stack, so do the same for 02-22-fizz and 02-22-buzz. You should see the following output once all three branches have been published:

🥞 Validating that this Graphite stack is ready to submit...
✏️ Preparing to submit PRs for the following branches...
▸ 02-22-editing_readme (Create)
✔ Title … Editing README
✔ Body › Skip (leave empty)
✔ Submit › Publish Pull Request
▸ 02-22-fizz (Create)
✔ Title … fizz
✔ Body › Skip (leave empty)
✔ Submit › Publish Pull Request
▸ 02-22-buzz (Create)
✔ Title … buzz
✔ Body › Skip (leave empty)
✔ Submit › Publish Pull Request
📨 Pushing to remote and creating/updating PRs...
edit_readme: https://app.graphite.dev/github/pr/withgraphite/gt-quick-start/1 (created)
02-22-fizz: https://app.graphite.dev/github/pr/withgraphite/gt-quick-start/2 (created)
02-22-buzz: https://app.graphite.dev/github/pr/withgraphite/gt-quick-start/3 (created)

You just created a stack of three PRs, each one dependent on the other. To keep sight of your Graphite stack when viewing the PR on GitHub, we automatically add a comment that shows you where in the stack you are with respect to the current PR. The names of the branches link to their respective pages in the Graphite app.

Merge a stack of PRs from the Graphite App

After submitting the three stacked pull requests, you may have noticed that the CLI produced three app.graphite.dev links for each PR in the stack. While it's possible to merge PRs created with Graphite through GitHub, we strongly suggest merging stacks of PRs from Graphite since you can merge all your PRs in the stack at once!

To do so, click one of the app.graphite.dev links created by the CLI to view the PR in Graphite. Notice that the editing_readme PR has a stack indicator next to the title that says 1 of 3.

Click the dropdown, and click the top of the stack which happens to be buzz. Notice how the stack indicator changes to 3 of 3, the status pill now says ready to merge as stack, and the merge button now says Merge 3 PRs instead of Merge.

Click merge 3 PRs. Once you do so, you'll see a modal with a few options to configure your merge strategy and/or edit the commit message/body for each of the PRs in the stack. Once you click to confirm the merge, you're done! Each of the PRs will merge one by one, while Graphite takes care of the pull and rebase between each.

Congrats on merging your first stack with Graphite!

Join the Graphite community

This guide showed you the basics of getting started with Graphite! Check out our other docs for more specific information pertaining to the CLI or app, as well as our command reference to quickly locate gt commands. Feel free to interact with us on Twitter, join our community Slack for a direct helpline, or shoot us an email at support@graphite.dev!