Need help with github-default-branch?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

mheap
135 Stars 9 Forks MIT License 66 Commits 15 Opened issues

Description

Rename your default branch on GitHub

Services available

!
?

Need anything else?

Contributors list

# 39,526
Laravel
trello
golang
github-...
44 commits
# 14,712
rhel
F#
.NET
c-sharp
1 commit
# 164
Shell
dotfile...
ecmascr...
Angular
1 commit
# 472,911
HTML
CSS
GitHub
1 commit
# 96,584
Shell
http-pr...
resilie...
C
1 commit
# 428,522
Go
HTML
saml
osx
1 commit
# 7,835
TypeScr...
probot-...
coffees...
probot
1 commit
# 17,323
Lua
nginx
openres...
Rails
1 commit
# 11,306
dotfile...
macOS
chef-re...
reactjs
1 commit

GitHub Default Branch

Rename your default branch on GitHub easily. By default it renames

master
to
main
, but is configurable using the
--new
and
--old
flags.

If provided with an

--org
,
--user
or (
--org
and
--team
) arguments, it will run on all repositories owned by that org, user or team. Alternatively, you can provide a
--repo
argument to edit a single repo. See Usage for more examples.

For each repo, this tool will:

  • Create a new branch at the same commit SHA as the old one
  • Update all open pull requests to point at the new branch
  • Update the default branch for the repo
  • Delete the old branch
  • Update known URL patterns in source files
  • Update any branch protections for
    $old
    to
    $new
    . (This does not work with patterns, it has to be an exact match)

Installation

npm install -g github-default-branch

Development

git clone https://github.com/mheap/github-default-branch.git
cd github-default-branch
npm ci

Authentication

Create a personal access token with the

repo
scope. This is the value for
 in the examples.

If you don't want your token to be stored in your shell history, you can set

GITHUB_TOKEN
in the environment and that will be read instead

Usage

# Rename master to main
github-default-branch --pat  --repo user/repo

Rename dev to develop

github-default-branch --pat --repo user/repo --old dev --new develop

Rename all repos owned by an org

github-default-branch --pat --org my-org-name

Rename all repos owned by a user

github-default-branch --pat --user my-user

Rename all repos owned by a team

github-default-branch --pat --org my-org-name --team my-team-slug

Set

DEBUG="ghdb*"
as an environment variable to see debug information

Options

| Flag | Description | Default | | ------------- | ------------------------------------------------------------------------------------------------------------ | ------- | | --pat | GitHub API Token | N/A | | --old | The name of the branch to rename | master | | --new | The new branch name | main | | --repo | The repo to update (format: user/repo) | N/A | | --user | Update all repos owned by the provided user (example: my-user) | N/A | | --org | Update all repos in the provided org (example: my-org-name) | N/A | | --team | Update all repos in the provided team (example: my-team-name), only usable in combination with org parameter | N/A | | --dry-run | Output log messages only. Do not make any changes | false | | --skip-forks | Skips forked repositories | false | | --confirm | Run without prompting for confirmation | false |

Skipping transforms

You might want to skip any of the available transforms (such as deleting the old branch). You can add

--skip-[transform-name]
to disable the transform e.g.
--skip-delete-old-branch
.

Available transforms

| Transform | Description | | ----------------------- | ----------------------------------------------------- | | update-default-branch | Set the default branch of the repo to

$new
| | retarget-pull-requests | Change the base for any open pull requests | | retarget-draft-releases | Change the
target_commitish
for any draft releases | | branch-protection | Update any branch protection rules to point at
$new
| | delete-old-branch | Delete the
$old
branch | | github-pages | Update GitHub Pages configuration |

Pending transforms:

  • Copy branch protections instead of updating if
    --skip-delete-old-branch
    is used (#26)
  • Retarget draft releases (#30)

Replacements

Part of this script checks for the existence of files and updates their contents. Replacements are the mechanism for these updates.

How it Works

Each .js file in the

replacements
folder is given a chance to run during the content updating step of the script. Each file in replacements is expected to export a function, that function receives all of the options that are available to the outmost script.

If there is nothing to replace, then the script moves on to the next replacement.

How to Add a Replacement

Add a file to

replacements
with a .js extension

Like this:

module.exports = function ({
  owner, // string - repo owner
  repo, // string - repo name
  old, // string - old branch name
  target, // string - new branch name
  octokit, // Octokit - oktokit instance
  verbose, // boolean - verbose flag
  isDryRun, // boolean - dry run flag
}) {
  // code goes here
  return {
    path: "",
    replacements: [
      {
        from: "",
        to: "",
      },
      {
        from: "",
        to: "",
      },
    ],
  };
};

The file with the path in your repo will have any line matching

from
be swapped out with
to

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.