explaingit

wei/pull

7,123TypeScriptAudience · developerComplexity · 2/5LicenseSetup · easy

TLDR

Pull is a GitHub App that automatically keeps your forked repositories in sync with the original project by opening pull requests to merge upstream changes on a recurring schedule, with no manual effort needed.

Mindmap

mindmap
  root((Pull App))
    What it does
      Auto-syncs forks
      Opens pull requests
      Scheduled updates
    Tech Stack
      TypeScript
      Deno
      GitHub API
    Sync Modes
      Hard reset
      Merge commit
      Squash
      Rebase
    Config
      pull.yml file
      Multi-branch
      Reviewers and labels
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Install Pull on a GitHub fork to automatically receive updates from the upstream repository without manually syncing.

USE CASE 2

Configure .github/pull.yml to selectively sync specific branches using merge, squash, or rebase instead of a destructive hard reset.

USE CASE 3

Keep multiple forked branches all synced with different upstream branches simultaneously via a single config file.

USE CASE 4

Add a pull.yml to your own upstream repository so anyone who forks it can stay current just by installing the Pull app.

Tech stack

TypeScriptDenoGitHub API

Getting it running

Difficulty · easy Time to first run · 5min
MIT license, use, copy, modify, and distribute freely for any purpose including commercial projects.

In plain English

Pull is a GitHub App that keeps your forked repositories in sync with the original project they were copied from. When you fork a repository on GitHub, your copy starts out identical to the source but quickly falls behind as the original receives updates. Pull solves this by watching for new commits in the original repository and automatically opening a pull request in your fork to bring those changes in, on a recurring schedule. The simplest way to use it is to install the Pull app from the GitHub marketplace and point it at your fork. With no configuration file, it will sync your default branch using a hard reset, meaning your fork's branch is overwritten to match the upstream version. If you have made local changes you want to keep, the README recommends making a backup first, as a hard reset will discard them. For more control, you can add a configuration file at .github/pull.yml in your repository. That file lets you specify which branch in your fork maps to which branch in the original project, choose how changes are merged (merge commit, squash, rebase, or hard reset), and optionally assign reviewers or labels to the pull requests that Pull creates. You can configure multiple branches at once, so a fork that tracks both a main branch and a documentation branch can be kept in sync for both. The app also supports GitHub Enterprise Server for organizations running their own GitHub infrastructure. Upstream repository owners can add a pull.yml file to their own project pointing to themselves, which makes it easy for anyone who forks that project to stay current just by installing Pull. The project is open source under the MIT license and maintained by Wei He. It is built with TypeScript and runs on Deno.

Copy-paste prompts

Prompt 1
I forked a GitHub repo and want to keep it automatically synced with the original. How do I install the Pull GitHub App and what does it do by default?
Prompt 2
Show me how to write a .github/pull.yml config file for the Pull app to sync my fork using rebase instead of hard reset.
Prompt 3
I want to configure the Pull app to keep both my main and docs branches synced with different upstream branches. Write the pull.yml config for that.
Prompt 4
Explain the difference between hard reset, merge commit, squash, and rebase sync modes in the Pull GitHub App and when to use each.
Open on GitHub → Explain another repo

← wei on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.