See the history of changes for the Graphite CLI.
gt submit
would incorrectly report a branch as having a “New parent”.gt submit --branch
now validates that a branch name is provided when the flag is used.gt absorb
would fail with an error message “Shas does not match current stack”.gt track
would not recover a diverged branch if the branch was already tracked.gt get
or gt sync
encounter merge conflicts.gt submit
would incorrectly warn about missing remote changes.gt checkout
command to avoid accidental invocations.gt submit
and gt sync
could incorrectly report a new remote version.gt submit
may try to push the same branch twice.gt submit
and gt sync
that caused performance degradation and crashes when pull requests were modified outside of Graphite.gt track
shows the exact number of commits that will go into the new branch, making it easier to spot oversized stacks.gt pr
where branch names were interpreted as a PR number if they started with a digit.gt submit
where PR descriptions were being generated larger than the GitHub PR description limit.gt submit
where PR titles were being generated larger than the GitHub PR title limit.gt submit
where pushing all the branches in a stack could partially fail leading to inconsistent diffs in some PRs.gt submit
where temporary branches were not being cleaned up correctly.gt create
where the branch name was incorrectly added to the commit message.git
subprocesses.git
subprocesses.-m
flags in gt create
, gt modify
, and gt squash
.gt feedback
could fail due to large log files.gt interactive
git fetch
and git push
operations.graphite-base
branches if a submit fails to push to remotegraphite-base
branches were incorrectly introduced in trailing trunk multi-trunk configurationsgt submit
could lead to incorrect diffs upstack if submit was not run on the full stackgt rename
did not use configured branch prefixesgt
commands could fail with EAGAIN
errorsgt delete
could fail when run on untracked branchesgt submit
on a stack would lead to temporary incorrect diffs on the upstack remote PRsgt sync
failed with "RangeError: Invalid string length"
gt rename
to fail if the user aborts the commandgt squash
to fail if the squash command does nothing--no-interactive
flag (e.g. gt log
, gt info
…)gt abort
, which aborts the current rebase operation and restores the repository state to before the original command that introduced the conflictgt undo
, which undoes the most recent Graphite mutation, restoring the repository to its state before the mutation was appliedgt create
to prompt for a branch name for empty branches if one was not providedgt demo
that would corrupt the repo’s name and ownergt sync
would not update trunk if there were no previously submitted branchesgt submit --branch
to work while checked out untracked branchesgt sync --all
would only clean up branches on the current trunkgt submit
performance by skipping unnecessary fetchesgt checkout
to work while on a detached headgt submit
to submit branches that have never been submitted with Graphitegt sync
to better handle cases where the branch was updated outside of Graphitegt init --trunk
to warn against setting a trunk that does not exist locallygt sync
and gt get
to work on untracked branchesgt unlink
command to unlink a branch from the currently associated PRgt info
gt rename
to use the correct name when asking for a rename confirmationgt create --insert
to leave descendants in an un-restacked state when there are conflictsgt delete
to also prune branches--stack
flag to gt checkout
to only show current stackgt log
and gt checkout
don’t work on untracked branchesgt
throws a cannot read undefined error while reading “validationResult”gt track
might get into an infinite loop while recovering diverged branchesgt pr
, gt docs
, and gt dash
to print out the URL being opened--verbose/-v
in gt create
and gt modify
to include the diff in the commit message template--add
flag to gt trunk
to configure an additional trunk branchgt create
to suppress the detached HEAD message on every creategt demo
to work in repos the user cannot submit to yetgt config
gt submit
would not fetch the branch before submitting to determine if it needs submittinggt continue
would swallow the post-rewrite git hook outputgt track
would incorrectly tell you to track the branch--force
flag was not respected in gt submit
when the remote was updated--all
where trunks could not be correctly selected--trunk/-t
to gt checkout
to switch to the current trunkgt sync
would try to update a trunk you don’t have configuredgt demo
that incorrectly created a “-p” directory to run the demo ingt init --reset
to also reset PR metadatagt squash
to no-op when there are no commits to squash or only a single commitgt demo
to initialize Graphite automatically if the current repo has not yet been initializedgt absorb
to print the number of hunks that were not absorbedgt log
to not show updated remotely
since it does not respect the new sync changesgt sync
would always ask to reconcile when there were local changesgt modify
to print out conflicts when it cannot restack cleanlygt sync/get
for server-side errorsno
from promptgt feedback
to not require to be run in a repogt get
would try to checkout a branch that was just deletedgt modify
to leave descendants in an unrestacked state when there are conflicts.
gt split
behavior to skip git hooks.
no
from prompt.
gt sync
.
gt get
, gt sync
, and gt submit
. The new versions will be rolled back out with this release.
post-checkout
hooks were swallowed, resulting in issues when interactive scripts are used.
gt demo
now skips all Git hooks (with an implicit global --no-verify
).
gt sync
no longer prints out Restacking branches
if there are no branches to restack.
gt --help
.
gt submit
could fail in certain cases due to the format of a Git remote URL.
gt move
’s prompt.
gt absorb
could fail in certain environments.
gt log short
could incorrectly show a branch as “updated remotely” when it was not.
gt feedback
.
gt submit
would hang in certain cases.gt submit
to match the new behavior of gt sync
and gt get
.
gt submit
now skips branches with no commits between head and base and their descendants, instead of failing outright (GitHub does not allow PRs with no commits).
gt submit
now prompts to restack if the --restack
flag is not passed and it would fail without restacking.
gt submit
would restack in certain cases when the --restack
flag was not passed.
gt submit
was not prompting to choose between pasting template/commit messages and editing them.
gt sync
, gt get
, gt submit
, or with gt delete
now prints the SHA the branch was at before deletion like Git, as there is no reflog for deleted branches.gt sync
when unauthed.
xdg-open
was not installed, instead of printing the URL to the terminal.
gt get
would not set up the remote-tracking branch properly.
gt get
and gt sync
where branches would not get newly associated with PRs.
gt absorb
.
gt sync
and gt get
that will be rolled out over the coming weeks via a server-side feature flag.gt sync
now syncs all branches, where previously it just synced trunk. This brings it closer to the behavior of gt get
.
gt get
with no argument passed is essentially “gt sync
for the currently checked out stack.”
gt create
now applies the branch prefix to branch names passed in directly (e.g. gt create branch-name
with a prefix of prefix/
will yield a branch called prefix/branch-name
). This behavior can be disabled in gt config
. If the branch name already begins with the prefix, it will not be added again.
GT
to 1
, which can be checked by subprocesses like an editor or Git hook to determine if they are being run from Graphite.
gt absorb
would fail if the git config to detect copies in diffs was enabled.
gt split --by-hunk
would leave the user in a detached state if interrupted.
gt split --by-hunk
, it will now prompt to stage changes again instead of exiting with an error.
gt fold
.gt create
will now replace slashes in commit messages when inferring branch names, and will convert uppercase letters to lowercase. Both of these new behaviors can be disabled in `gt config`.
--edit-title
and --edit-description
flags to gt submit
to allow for editing the PR title and body, respectively. --no-edit-title
and --no-edit-description
can be used to skip the prompts for each. Note that --edit
and --no-edit
will still work as before.
gt submit
to use AI to populate PR titles and description. This will be rolled out via a server-side feature flag over the coming weeks.
gt submit
will continue to a web browser to edit PR metadata. --cli
can be passed to use the CLI flow.
gt config
to toggle the above behavior: i.e., use the CLI instead of web by default. In that case, `—web` can be passed to use the web flow.
gt demo
would not work on Windows.
--debug
flag is not passed.
--debug
flag now logs to the terminal as well as to a file.
gt feedback <message> --with-debug-context
now sends our engineers all debug logs from the past 24 hours.
gt sync
.
gt demo
would fail on Windows.
postinstall
script to ensure NodeJS version compatibility.
gt submit
now prompts to update upstack branches with open PRs when run from a mid-stack branch.
gt submit
is now able to detect when GitHub/Graphite sync is not enabled for a repository. We’ll be rolling out the check for this over the coming weeks.
gt track
to remediate diverged branches.
gt log
is now sorted stably.
gt sq
alias for gt squash
.
gt submit
would fail (before submitting upstack branches) if run from a merged branch.
gt submit
would fail if a pre-push hook had spaces in its path.
--show-delete-progress
flag of gt submit
.
gt submit
would fail in repositories using git-lfs
.gt absorb
gt absorb
only worked when run from the root of a repositorygt create
could leave you in a detached stategt ab
alias for absorb wasn’t recognizedgt absorb --patch
hung instead of opening the patch selectorgt absorb
, which automatically amends staged changes to commits in your stackgt config
gt checkout -
now selects the last branch that was checked out, just like Gitgt sync
now denotes the currently checked out branch when it was unable to restack it cleanlysubmit
gt get
resulted in an unclear error messagegt get
would not work for stacked branches if using a YubiKey-protected SSH keygt track
would display remote-tracking branches as potential parentscreate
and modify
where we showed --update
as an option when there were only unstaged changes (now we only show --all
and --patch
)--patch
as an option for create
and modify
even when there are only untracked changes--patch
mode (in create
and modify
)gt get
for when we can’t find a PR for the requested branchgt get <trunk>
functionality to checkout the trunk branchgt fold --help
gt rename
could cause branches to become untrackedpre-push
git hookgt --help --all
, which is equivalent to gt --help --all-commands
gt config
--no-edit
flag is passed to gt submit
gt --help --all-commands
gt completion
to gt --help --all
gt demo
would error out once the user attempts to run gt create
gt submit
would unnecessarily prompt that the branch would conflict with remote.
gt sync
failed with "RangeError: Invalid string length"
gt rename
to fail if the user aborts the command
gt squash
to fail if the squash command does nothing
--no-interactive
flag (e.g. gt log
, gt info
…)
gt init --reset
to also reset PR metadata
gt demo
feature which interactively teaches you how to use gt
to create pull requests and stacks.
gt demo pull-request
from any repo to create a sample PR.
gt demo stack
from any repo to create a sample stack of PRs.
gt help --all-commands
backticks
in the help output
gt pr
to show the branch name when we couldn’t find an open PR for the current branch
gt guide workflow
based on community feedback.
gt merge
to correctly handle the case when a branch is locked.
gt get
where it was not correctly checking out the branch after syncing it
gt submit
behavior when upstack branches have merged.
gt interactive
command to open the Graphite Interactive extension.
gt auth
to print more information about the user’s auth status.
gt track
would hang if no parent was explicitly passed to the command.gt log short
.gt --help
to be an overview of gt
and the Graphite workflow.
gt --help --all-commands
.
gt submit --draft
flag to only no longer convert already published PRs back to drafts.
gt submit --team-reviewers slug
or through gt submit --reviewers org/slug
.
log short
when a branch needs to be fetched from remote (using gt get
).
gt checkout
specifying whether a branch needs to be submitted, fetched, or restacked.
submit
runs.
--update
option for create
and modify
that stages changes to all already-tracked files.
gt get <pr-number>.
--comment
flag to submit
which will add a comment with the provided text to the submitted PR.
--debug
flag.
gt get
for a remote branchgt aliases --legacy
command to automatically add all of the old shortcuts to your aliases configuration.
submit
description behavior to include commit messages if no default template exists.
restack
deprecation warning.
gt submit
to not restack branches.
--restack
flag to gt submit
.
gt submit
if the branch will have conflicts with main.
gt create
.
--help
output to be more consistent and more helpful.
gt aliases
to open up the alias file in your editor.
~/.graphite_user_config
once your configuration has been moved to the new location to reduce confusion.
gt submit
now opens the PR in your browser if you pass the --view
flag.
gt rename
now prompts instead of immediately failing if you don’t pass --force
when required.
gt up
interactive selection now prompts you a single time instead of at each level (similar to the top
change from v1.0.2).
gt pr
command.
commit.gpgSign
configuration value.
create
with just a branch name incorrectly failed to execute.
git --version
check failed on Windows (and likely certain other git distributions).
gt top
interactive selection now offers which tip to travel to instead of prompting at each intermediate step. We’ll be porting the same behavior to gt up
soon.- The --debug
flag now logs to a file instead of stdout.- Clearer error messaging for outdated Git version.
gt sync
could reset the index and working tree, and improved error handling in similar cases with uncommitted changes.- Fixed the error messge when running a deprecated command to print the correct alias file location.
gt submit --stack
did not work from the trunk branch.branch
, stack
, upstack
, downstack
, repo
, and user
have been renamed to drop the noun. Old command names still work, but will be removed in an upcoming version.
gt --help
or at https://graphite.dev/graphite-cli-v1-command-names.
~/.config/graphite/aliases
(or $XDG_CONFIG_HOME/graphite/aliases
).
gt config
command.
~/.config/graphite
by default.
gt create
gt create
is the new command to create a Graphite branch (formerly branch create
)
gt create
now supports inferring a branch name from the commit editor, which means it is now possible to run it with no arguments.
gt create
, you are now asked whether you’d like to stage and commit them as part of the new branch.
gt modify
gt modify
is the new command to modify a Graphite branch (formerly gt commit amend
/gt commit create
).
--commit
is passed.
-e
/--edit
is passed.
gt amend
, you are now asked whether you’d like to stage them before running the amend or commit operation.
gt branch edit
has been moved to gt modify --interactive-rebase
gt sync
gt sync
is the new command to update your trunk branch, clean up merged branches, and restack most branches in your repo.
gt sync
now restacks all branches by default (no longer need -r
).
sync
will print out the list of conflicting branches so that you can run gt restack
on them.
gt submit
gt submit
is the new command to push branches to GitHub and create stacked PRs for them.
gt submit
submits the currently checked out branch and its ancestors (dependent branches) by default.
gt ss
is included in the alias file by default as an alias for gt submit --stack
, which replicates the behavior of the old gt stack submit
gt submit
now handles cases where branches in your stack have merged or been updated remotely, as long as there are no rebase conflicts to resolve. This includes both incorporating remote changes and removing merged branches from the stack.
gt submit
now ensures that your branches are restacked instead of failing when they aren’t.
gt pop
to delete the current branch and check out its parent without modifying the working tree. Can’t be run if the current branch has children.
gt trunk
to navigate directly to your trunk branch.
gt parent
to print out the raw parent of the branch (for scripting).
gt children
to print out the raw children of the branch, line by line (for scripting).
gt revert
(experimental) to create a branch that reverts a commit in your trunk branch.
--stat
flag to gt info
that prints out a diffstat instead of a full diff. Compatible with either --diff
or --patch
.
gt create --insert
now asks which siblings should be moved onto the new branch if there are more than one of them.
split --hunk
would not work for branches that added new files.
split
were all based on the parent of the split branch instead of being stacked correctly.
--patch
flag to create
and modify
did not include new files.
test
command has been temporarily removed due to persistent bugginess, but will be added back when we have time to dedicate to making it work well. For now, one option is to script using the new gt children
and gt parent
commands, which should handle most use cases.
sync
and would love your feedback in this area!
revert
work best for you!
get
when the PR does not exist locally.git range-diff
failure could block submit.gt config
which covers all user- and repo-level configurations. The gt user
and gt repo
top-level commands will be deprecated in an upcoming release.checkout
now prompts to sync
when the branch’s PR has been merged.get
no longer fetches branches for merged PRs.git range-diff
failure could block submit.sync
.~/.graphite_aliases
file, which we know some of you have been asking us about for quite a while!gt log
.get
didn’t work to fetch new branches.submit --force
init
for branch tracking (hint about track
is still shown).GT_RENAME
flag now displays the correct command names in suggestions.submit
commands now automatically pull in changes from remote and rebase on top of them when your local changes don’t conflict with them.
downstack get
now shows which version of the PR has been fetched.
gt log
now shows the last submitted version of each PR, as well as whether you need to `submit` or `get`.
branch checkout
now informs you if you need to get
.
branch checkout --patch
failed with an incorrect error message.
downstack get
failed with an incorrect error message.
get
graphite_aliases
file (see below)
~/.graphite_aliases
file, which we know some of you have been asking us about for quite a while!gt user editor
.
downstack merge
didn’t exit if the PR was already merging/merged.
downstack get
did not work.
npm
installs.
--force
in submit
was not respected.
downstack get
now automatically pulls in changes from GitHub if the local state of the branch matches a submitted version of the branch’s open pull request, **even if rebased**.
submit
now prompts for a downstack get
in cases where there are remote changes that need to be synced.
--rerequest-review
flag to submit
commands that rerequests review from anyone who has reviewed the PR.
submit
is now blocked by an ongoing rebase.
--quiet
is now respected by underlying git commit
calls.
prNumber
was incorrectly displayed in the gt log
output instead of the actual PR number.
downstack get
now automatically pulls in changes from GitHub if the local state of the branch matches a submitted version of the branch’s open pull request.
submit
commands now suggest running downstack get
when the above situation is detected.
gt user yubikey --enable
.
--cwd
flag to run any Graphite command in a directory other than the one it is initiated from.
gt downstack merge
command to merge stacks and PRs directly from the CLI.
submit
commands now display code updates and metadata updates as two different statuses in the list of updates.
gt log
now shows the PR’s overall status (consistent with Graphite app; takes stacks into account).
-m
flag to submit
commands that enables “merge when ready” on the Graphite app, merging the PR if it is already ready to be merged.
--exclude-templates
to gt user submit-body
which specifies that the PR template should not be included in the default PR description when --include-commit-messages
is enabled.
npm
as v0.20.20gt dash
commands now use the app URL from the user’s profile when passing links to open
.GRAPHITE_PR_DESCRIPTION.md
. This allows for Markdown syntax highlighting, and also adding additional editor config by specifically targeting this file name.gt changelog
was broken for the binary version of the CLI (e.g. installed via brew
).
gt branch edit
was accidentally removed from the CLI. Thank you @vampire!
fish
completion support via gt fish >> ~/.config/fish/completions/gt.fish
! Thank you @szamanr!
repo sync
attempts to delete branches that were never associated with a PR.--always
flag to submit to always push updates, even if the branch has not changed.test
commands didn’t support multiple separators in a branch name.
gt ls-remote
calls on submit
with a single one, which should speed up submission significantly!
gt stack submit
now prompts for submission info inline after each individual branch, instead of after all branches.
--edit/-e
flag on submit
commands now allows updating the PR title and body.
--reviewers/-r
flag on submit
commands can now update existing PRs.
--reviewers/-r
flag on submit
commands now accepts a string of comma separated reviewers (e.g. user1, user2
).
gt commit amend
no longer requires staged changes.
gt commit amend
no longer allowed on empty branches.
gt commit create/amend
no longer allowed during a rebase.
test
commands.
submit
.
--edit/-e
flag on submit
now opens an editor for each PR without prompting first. Passing no flag still prompts the user whether they’d like to open an editor, and --no-edit
still skips the prompt,
--select/-s
flag of submit
now prompts about which branches to include in the submit as the first step so that it can validate that the correct dependencies are included in the submit scope.
gt branch test
on branches with a slash in the name.
LESS=FRX
and LV=-c
if unset.gt log short
wouldn’t show the filled-in circle for branches needing a restack.
gt branch split
untracked children of the branch being split if the last branch in the split kept its name.
gt log
, gt changelog
, and gt branch info
now display in a pager. The pager defaults to your git pager, but can be overridden with (for example) gt user pager --set 'less -FRX'
.
--no-edit
on submit
would automatically open new PRs in draft mode (it now prompts unless --draft
, --publish
, or --no-interactive
is set).
gt branch info --patch
.
submit
after an aborted submit now asks the user whether they’d like to use their cached PR body instead of always using it.
gt branch split
now tracks untracked branches automatically before splitting.
gt branch untrack
now untracks the current branch if no branch name is provided.
gt branch create
would fail instead of creating a branch with no commit in certain cases.
gt branch edit
.
gt changelog
.
submit
, downstack edit
for editor commands containing spaces.
git push
errors being swallowed on submit.
gt changelog
and gt docs
. You probably want to pipe the changelog to a pager or file :).
git rebase --abort
after a restack conflict would result in Graphite being wrong about the current branch.
test
command output.
gt branch split
that allows the user to interactive split a branch into multiple dependent branches. There are two styles of operation:
--by-commit
mode (aliases --commit
, -c
) prompts the user to select the commits within the branch that they’d like to have branches at.
--by-hunk
mode (aliases --hunk
, -h
) prompts the user to create a series of single-commit branches from the changes of the branch using the git add --patch
interface.
gt log short
readability. Give it a try!
gt branch create
, gt commit create
, and gt commit amend
now support the -p/--patch
option (like git commit --patch
). Please note that this won’t be the most useful option until autostashing is implemented, planned soon.
gt log
and gt log short
now show untracked branches when --show-untracked/-u
is passed in.
gt branch checkout
now includes untracked branches in the selector when --show-untracked/-u
is passed in.
-n
as an alias for --no-edit
for submit
. Try out gt ss -np
to quickly publish your changes!
--select
/-s
option for submit
to select which branches to push.
--force
/-f
option submit
to do a force-push, i.e. git push -f
, instead of the default git push --force-with-lease
.
submit
now correctly sets the upstream of the pushed branch.
gt user submit-body --include-commit-messages
. Disabled by default. Use gt user submit-body --no-include-commit-messages
to disable.
--force
/-f
for gt downstack get
to always overwrite local branches.
gt downstack track
can now take a positional branch name argument (like gt branch track
).
--diff
/-d
for gt branch info
to show the diff of the whole branch (unlike --patch
/-p
which shows the diff of each commit).
gt --help
now includes a link to the CLI documention.
gt repo init
copy.
git
command fails.
submit
command fails due to a GitHub API error.
test
command output.
--help
test
commands were completely broken.
upstack onto
autocomplete did not work if uso
shortcut was used.
--no-interactive
and --no-edit
were not handled properly for submit
gt log
would break on the initial commit of a repository.
gt repo init
gt
command before running gt continue
.
upstack onto
could target untracked branches, resulting in corrupted state.
dstr
as an alias for downstack track
.
gt downstack track
that, from an untracked branch, allows you to track recursively by choosing the parent until you reach a tracked branch. Use --force/-f
to automatically select the nearest ancestor of each branch, which should give behavior similar to gt stack fix --regen
of old.
gt branch fold
that folds the changes of the current branch into the parent branch. Uses the parent branch’s name for the new branch with default; pass in --keep/-k
to use the current branch’s name instead.
gt branch squash
that turns a branch of multiple commits into a single-commit branch. Takes --message/-m
and --no-edit/-n
arguments just like gt commit amend
, and defaults to using the message of the first commit on the branch.
--draft
nor --submit
was passed, updated PRs would always be published if previously drafts, and new PRs would be published instead of being created as draft.
gt branch track --force
wouldn’t always select the nearest ancestor.
gt
with no command would throw an uncaught exception instead of displaying the help message.
submit
commands.
branch info
and log
now show the commit hash of trunk.
repo init --reset
which clears all Graphite metadata.
gt user restack-date --use-author-date
which when enabled passes --committer-date-is-author-date
to the internal git rebase
of restack operations. To return to the default, use gt user restack-date --no-use-author-date
.
branch up
disambiguation prompt.
gt dpr
as a shortcut for gt dash pr
--no-draft
option for `submit` commands to --publish/-p
. There are three modes of operation for the command:
--draft/-d
is passed, all PRs in the submit scope will be marked as draft.
--publish/-p
is passed, all PRs in the submit scope will be marked ready for review.
gt branch rename
when no new name is passed in.
--force/-f
option for gt branch track
that skips the interactive prompt by picking the nearest tracked ancestor.
branch submit
and downstack submit
base validation would fail incorrectly on certain operating systems.
gt branch track
. Now, it tracks the current branch by default, unless another branch is specified. By default, prompts the user to select a branch to be its parent if there are multiple possibilities, or you can pass in a --parent
.
log short
view to be more comprehensible (uses diagram symbols from log
).
--restack
wouldn’t restack all branches as expected if gt repo sync
was run from trunk.
gt ss
would fail if run from trunk.
gt downstack get
would fail to get branches that existed locally but were untracked by gt
.
git rebase
, Graphite metadata could end up in a broken state.
gt feedback --with-debug-context
from working as expected.
gt upstack onto
interactive selection could appear wonky.
downstack get
was completely broken.
Pushing to remote and creating/updating PRs...
step of submit
gt branch edit
would only work if the branch was not in need of restacking.
downstack get
submit
because of an empty branch did not abort correctly.
gt branch show
is now gt branch info
. As this command is relatively new, we are not leaving show
as an alias.
gt branch create --restack
is now gt branch create --insert
. This was the originally intended name, and it does something different than gt repo sync --restack
gt downstack sync
is now gt downstack get
. It was confusing to have two sync
commands do entirely different things!
gt branch prev
and gt branch next
for down
and up
are now fully deprecated.
--help
.
gt branch checkout
, gt upstack onto
, and gt branch track
now all have substring autocompletion for interactive branch selection. Enjoy! :D
gt auth
and gt user
commands can now be run outside of a Git repository.
gt repo init
, and the user config.Removed the gt repo ignored-branches
command.
gt <scope> fix
. fix
is now an alias for restack
.
gt <scope> validate
gt branch parent
, gt branch children
, and gt branch pr-info
. All of this information is now found in gt branch info
. gt branch rename
is now the only way to reset PR info for a branch, as PR info is now synced by branch name for the open PR with that name.
gt repo fix
.
gt repo trunk
. You can change the trunk branch by running gt repo init --trunk <trunkName>
.
exec
functionality of gt downstack edit
—we recommend using gt stack test
for running a command on each branch in your stack.
gt branch track
. In order to track an existing git branch <branchName>
, ensure that it is based on a Graphite branch <parentBranchName>
, and then with <parentBranchName>
checked out, run gt branch track <branchName>
to start tracking it as a Graphite branch.
--parent
in gt branch track
instead of checking out the desired parent before running the command.
gt branch track
suggests branches that have the current branch/specified parent in their history.
gt branch untrack
to remove Graphite metadata for a branch.
gt repo init
for letting users new to Graphite convert an existing “stack” of branches into a Graphite stack. Essentially calls gt branch track
in a loop.
gt <scope> restack
for the branch
, upstack
, downstack
, and stack
nouns. For each branch in the scope, this command checks if the branch is based on its parent, and rebases it if necessary. gt upstack fix
and gt stack fix
will alias to restack
for a couple versions.
gt log short
- the view now essentially a single-line-per-branch version of gt log
. The old style can still be accessed with gt log short --classic
.
--reverse
option to gt log
and gt log short/.
Helpful for big stacks!--stack
option for gt log
and gt log short
. Only displays the current stack (i.e. what `gt stack submit` would submit).
--steps <n>
option for gt log
and gt log short
. Implies --stack
and only shows `n` levels above and below the current branch.
gt log short --steps 3
centered at the branch being resolved.
gt branch checkout
and gt upstack onto
now uses the new gt log short
view. Much easier to see what you’re doing with long branch names!
gt dash
can now open the PR page for the current branch or a specified one: gt dash pr [numberOrBranchName]
gt branch info
can now show the current PR description with --description
.
upstack
and downstack
counterparts of gt branch test
.
gt branch delete
now restacks the deleted branch’s children onto its parent.
--resubmit
flow from repo sync
—we may add it back in the future.
--restack
option to repo sync
, which restacks the current branch and any branches in stacks with cleaned up branches. We imagine a common flow if you know that you don’t have conflicts with trunk will be gt rs -rf
. Or even gt rs -rf && gt ss
.
--draft
and --no-draft
on submit
commands would unnecessarily submit unchanged PRs.
gt downstack get
has been outscoped for this release in order to get it to you sooner! We’re still excited to put it out soon.gt
on Windows at all — there are likely still remaining issues to work out before we have full support, and we still recommend using WSL for the most stable Graphite experience. Thanks to our community for helping out here!
git push
error messages would not be displayed on submit
, resulting in confusion around whether pushes were failing because of e.g. pre-push
hooks or--force-with-lease
errors.
git worktre
`). We consider our support experimental, see the new section of the docs for details.
gt branch rename
on submitted branches would result in gt
becoming largely unusable.
--force/-f
option to gt branch rename
that is required for already-submitted branches.
gt branch rename
now respects character replacement settings.
.
and /
are no longer replaced in branch names.
gt branch checkout
interactive mode.
node
and yarn
dependencies, please let us know if you see any weirdness!
gt downstack sync
no longer requires turning on a configuration option to use (for real this time)gt downstack sync
using a different mechanism for fetching remote stack dependencies.
gt downstack sync
no longer requires turning on a configuration option to use.
submit
where in-progress PR title wouldn’t be saved if the user cancelled while writing the body.
stack edit
and commit create
would use an incorrect upstream. A broader fix is coming in v0.19.0.
downstack edit
or upstack onto
flows, branches would be pushed to GitHub in an order that caused them to be closed prematurely.
gt branch-prefix --reset
to turn off the user prefix for automatically generated branch names.
submit
commands.
gt repo sync
and gt repo fix
now prompt to delete closed branches in addition to merged ones.
gt user branch-date
and gt user branch-replacement
.
downstack sync
would overwrite the local copy of a branch even if the user chose not to.
gt stacks
- it’s been long enough.
submit
.
gt downstack sync
to pull down the remote copy of a branch and its downstack dependencies from remote. This feature is gated behind a configuration by default, and we are still working on the documentation. If you would like to try it out and help us iterate on the feature, please join the #experimental channel in the Graphite community Slack server!
submit
to support the experimental collaboration features. Gated by default.
gt repo sync
to support the experimental collaboration features. Gated by default.
gt branch edit
that runs a native git rebase --interactive
over the commits on the current branch. This command is intended for advanced Git users who want to make use of the commit structure within a branch while working with Graphite.
gt branch show
that runs a native git log
over the commits on the current branch. Includes a --patch/-p
option to view the diffs.
--insert
option to gt branch create
which restacks all children of the parent of the new branch onto the new branch itself.
gt upstack onto
(similar to gt branch checkout
). No longer requires a positional argument.
gt repo sync
now handles --no-interactive
correctly.
gt commit amend --no-edit
now fails and warns the user when there are no staged changes, just like gt commmit create
.
--no-edit
is now aliased to -n
for gt continue
and gt commit amend
.
gt continue
now supports --all/-a
to stage all changes.
submit --no-interactive
no longer un-publishes submitted PRs (unless --draft
is specified).
gt downstack edit
now supports an exec/x
option to execute arbitrary shell commands in between branch restacks (based on git rebase --interactive
).
gt branch delete
now supports deleting the current branch. It checks out the parent (or trunk if Graphite cannot find a parent).
submit --no-interactive
could prompt the user for reviewers.
gt repo owner
would set the remote as well, breaking sync
and resulting in having to manually edit the configuration file to get Graphite working again.
submit
would fail for certain classes of branch name.
gt downstack edit
file were not respected.
p
as an alias for pick
in gt downstack edit
did not work properly.
fix
could swallow a rebase exception and leave the repository in a bad state.
gt branch checkout
interactive selection would fail if executed from an untracked branch.
gt branch delete
could fail to delete the branch but leave it in a corrupt state.
gt downstack edit
and gt upstack onto
by being smarter about when a rebase is actually necessary.
submit
would not be awaited serially, resulting in a poor user experience.sync
commands no longer allow pushing to branches associated with closed/merged PRs.
gt branch sync
to gt branch pr-info
as its behavior is not aligned with the other `sync` commands.
sync
and submit
commands.
submit
.
gt log short
view to match other log commands and up
/down
naming convention. ↳
→
↱
!
origin
- use the new gt repo remote
command to set the name of your remote.
/refs/heads
gives us room for 245 bytes).
gt branch delete
.
gt branch delete
from -D
to -f
.
gt branch delete
failure.
gt repo max-branch-length
wouldn’t print the configured value.
--debug
option.
submit
command).
upstack fix
, similar to stack fix
that only runs upstack of the current branch.
commit create
and commit amend
now internally run an upstack fix
instead of a stack fix`
git config diff.external
being set.
gt branch checkout
.
.graphite_merge_conflict
files.gt branch next
and gt branch prev
in favor of gt branch up
and gt branch down
, respectively.
gt bu
and gt bd
shortcuts for gt branch up
and gt branch down
, respectively.
gt branch delete
shortcut to gt bdl
.
gt stash
as git stash
.
fish
users couldn’t add backticks to commit message using the -m
option.
gt bc -m <message>
branch create
with no staged changes.
--draft
flag on submit.
gt downstack edit
which enables interactive reordering of stack branches.
gt stack submit
to avoid GitHub rate limitted when submitting large stacks.
-r
flag.gt repo ignored-branches --set
) now accepts glob-patterns
gt repo ignored-branches --unset
)
gt branch
next/prev respectively.
gt tips
could not be disabled.
gt user editor
gt continue
to continue the previous Graphite command when interrupted by a rebase.gt repo sync
deleting metadata for existing branches.
gt commit amend
.
--dry-run
flag to show the user what will be submitted in the invocation.
gt commit create -m
multi-word commit messages.gt stack top
and gt stack bottom
.
gt repo sync
.
gt commit create
to be used without -m
, launching the system editor.
gt repo trunk --set
.
gt repo sync
performance when repos have a high number of stale branches. gt repo sync
now deletes branches more eagerly and has an optional flag to show progress (--show-delete-progress
).
gt repo fix
searches for common problems that cause degraded Graphite performance and suggests common remediations.
gt log
and hang gt upstack onto
.
gt feedback debug-context --recreate
.
gt repo sync
merged branch deletion logic and options to fix dangling branches.
gt branch parent --reset
resets Graphite’s recorded parent for a branch (to undefined).
gt branch sync --reset
resets Graphite’s recorded PR info a branch (to undefined).
gt debug-context
captures debug metadata from your repository and can send that to Screenplay to help troubleshoot issues.
gt repo sync
now pulls in PR information for all local branches from GitHub to link any PRs Graphite doesn’t know about/better remove already-merged branches.
repo sync
.
repo sync
.
gt branch create -m
now has -a
flag to include staged changes in the commit.
repo sync
repo sync
stack submit
now checks if update is needed for each branch.
upstack submit
and branch submit
upstack
from having the alias us
branch rename
to rename branches and correctly update metadata.
stack clean
to repo sync
and update to be able to be run from any branch.
repo sync
to delete old branch metadata refs.
repo sync
to update PR merge bases if necessary.
stack test
.
log
command
gt ls
output.
gt stack submit
and gt downstack submit
gt ls
stack traversal.gt ls
.gt ls
to improve speed and output formatting.
stack submit
command.
stack submit
to support interactive title and description setting.
stack submit
to support creating draft PRs.
log long
output.
gt
rather than the old gp
.
s
for submit
repo-config
to repo
branch checkout
log
command to support log
, log short
and log long
graphite
alias such that the CLI can be called using both `gt` and `graphite`.
gp
alias deprecation warning for homebrew installations.gt
from gp
per feedback.gp stacks
command, particularly in repositories with a large number of stale branches.
gp repo max-stacks-behind-trunk
, gp repo max-days-behind-trunk
).
gp log
command, particularly in repositories with a large number of stale branches.
gp log
(gp repo log max-stacks-behind-trunk
) as well as the maximum age of stacks to show (gp repo log max-days-behind-trunk
).
gp log
also now has --on-trunk
and --behind-trunk
options.
stack f
alias.
branch c
alias.
branch c
alias.
stack regen
is deprecated, and is now a flag for stack fix --regen
.
stack fix
now shows an interactive prompt by default.
gp log
command, while supporting old behavior with gp log --commits/-c
gp branch next/prev
now support interactive choices and stepping multiple branches.
gp branch create [-m]
now doesn’t commit by default. It can also autogenerate branch names from commit messages.
gp commit create -m
for creating commits and fixing upstack.
gp commit amend -m
for amending commits and fixing upstack.
gp user branch-prefix [--set]
reading and setting your branch prefix.
gp branch parent [--set]
plumbing command for reading and setting a branch parent.
gp branch children
plumbing command for reading the children of a branch.
gp l
alias for log command.
stack fix
now works for a individual stack. (Upstack inclusive for now)chai
.--no-verify
flag when running branch create
to skip precommit hooks.
repo init
command.
.graphite_repo_config
file.
stack regen
to always set stack foundations to trunk.
stack regen
such that, when from from trunk, regenerates all stacks.
branch next/prev
now traverses based on Graphite’s stack metadata.
gp stacks
print output.
stack regen
to operate across entire stack rather than just upstack.
stack submit
infers PR title from single-commit branches.
prod
branches.
.git
config.
validate
now passes cases where branches point to the same commit.
stack fix
now prints better messaging during rebase conflicts.
stack submit
and stack fix
.
stack submit
command and promoted command out of expermental status.branch create
command to accept optional positional argument for branch name.upstack
and downstack
.
fix
command.
sync
command to be visable in --help
.
gp sync
command to support trunk argument.
gp sync
command to prompt before deleting branches.