Skip to content

codespeaks/git-land

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

git-land

Build Status

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:

  1. Fetch the latest target from the remote repository and reset your local target to match it.
  2. Check out the pull request or topic branch.
  3. Start an interactive rebase of the PR or topic branch on target.
  4. 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.
  5. Fast-forward merge the rebased branch into target.
  6. Push target to the remote repository.

Note:

  • remote defaults to "origin" (configurable; see below)
  • target defaults 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-branch

Options

-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-land

Manual 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-land

Repository 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 upstream

Target 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 dev

Whether 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 true

Thanks

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

http://www.apache.org/licenses/LICENSE-2.0

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 100.0%