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
target
from theremote
repository and reset your localtarget
to 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
target
to theremote
repository.
Note:
remote
defaults to"origin"
(configurable; see below)target
defaults to"master"
git land [options] [<remote>] <pull request number>[:<target>]
git land [options] [<remote>] <branch>[:<target>]
git land 123
git land my-topic-branch
git land origin 42:target-branch
git land origin feature-branch:target-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.
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.
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/FreeFeed/git-land/master/git-land
chmod +x ~/bin/git-land
curl -o ~/bin/git-remote-pr-branch https://raw.githubusercontent.com/FreeFeed/git-land/master/git-remote-pr-branch
chmod +x ~/bin/git-remote-pr-branch
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/*'
Fish users can put this little snippet as ~/.config/fish/functions/pullify.fish
:
function pullify
git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'
end
Run pullify
to make any repo aware of PR refs from origin.
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 upstream
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 dev
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 true
Set git-land.token
for private repos to be able to retrieve branch info via GitHub API.
Set git-land.repo
if git remote-pr-branch
cannot figure out the remote repository user/name.
Thanks to @paulirish for git-open, from which I cribbed the format and some content for this README.
Copyright 2015 Bazaarvoice, Inc., RetailMeNot, Inc., and git-land contributors Licensed under Apache 2.0