git-land v2.2.1
git-land
This is a git extension that merges a pull request or topic branch via rebasing so as to avoid a merge commit. To merge a PR or branch, the script does the following:
- Fetch the latest
targetfrom theremoterepository and reset your localtargetto match it. - Check out the pull request or topic branch.
- Start an interactive rebase of the PR or topic branch on
target. - If merging a PR, append
[close #<PR number>]to the last commit message so that Github will close the pull request when the merged commits are pushed. - Fast-forward merge the rebased branch into
target. - Push
targetto theremoterepository.
Note:
remotedefaults to"origin"(configurable; see below)targetdefaults to"master"
Usage
git land [options] [<remote>] <pull request number>[:<target>]
git land [options] [<remote>] <branch>[:<target>]Examples
git land 123
git land my-topic-branch
git land origin 42:target-branch
git land origin feature-branch:target-branchOptions
-f, --force-push-topic: force push rebased topic branch
If this option is specified, git-land will force push the rebased topic branch
request to the remote repository. Pull request branches are
read-only, so git-land exits with an error if invoked with a
pull request number and this option specified.
-F, --no-force-push-topic: do not force push rebased topic branch
If this option is specified, git-land will not force push the rebased topic
branch request to the remote repository, even if configured to do so by
default.
Installation
NPM (recommended)
You can install git-land using npm install.
npm install --global git-landManual Installation
Put the bash script in a folder that is in your PATH and make it executable.
For example, to install it to ~/bin/, do the following:
curl -o ~/bin/git-land https://raw.githubusercontent.com/git-land/git-land/master/git-land
chmod +x ~/bin/git-landRepository setup
Before pull requests for a remote repository can be landed by number, the git
remote for that repository must be configured to fetch pull requests as branches
in your local fork. To do so, run the following command, replacing both
occurences of origin with the name of the git remote if necessary.
git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'Configuration
Remote repository
By default, git-land assumes the remote repository is pointed to by the git
remote origin. To use a different default git remote, set the git-land.remote
option. For example, to use a remote named upstream:
git config git-land.remote upstreamTarget branch
By default, git-land merges the branch or pull request into master if no
target branch is specified. To use a different default target branch, set the
git-land.target option. For example, to use a default target branch named
dev:
git config git-land.target devWhether to force push the topic branch
By default, git-land does nothing with the topic branch after rebasing it
locally. Specifying the --force-push-topic option overrides this behavior,
force pushing the rebased topic branch to the target remote. To make this
behavior the default, set the git-land.force-push-topic option to true:
git config git-land.force-push-topic trueThanks
Thanks to @paulirish for git-open, from which I cribbed the format and some content for this README.
Contributors
License
Copyright 2015 Bazaarvoice, Inc., RetailMeNot, Inc., and git-land contributors Licensed under Apache 2.0