Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

An upstream-friendly source-control workflow depends on which job you are doing: proposing a change to a project, or carrying local changes while importing upstream updates. For contributions, use the review channel the project supports—often a branch and pull request, but sometimes an email patch series or another review system. For recurring downstream imports, keep local changes identifiable and separate enough to review, rebase, and audit.

Choose the workflow that matches the project

Start with the project’s contribution instructions, not with a preferred tool. Review rules and repository settings determine whether a pull request, mailing list, Gerrit review, or another channel is accepted. The same code change can require a different submission process in a different project.

Situation Suitable model What to check
You have write access and the project accepts ordinary branch review Work on a focused feature branch and open a pull request. Review permissions, required CI checks, branch protection, and whether the diff isolates the intended change.
You lack write access and the project accepts host-based contributions Create a fork, work on a topic branch, and propose a pull request to upstream. Fork permissions, syncing with upstream, reviewer collaboration, and security or visibility settings.
The project reviews patches through mailing lists Prepare a topic branch, generate a patch series, and use the project-approved sending and review tools. Patch readability, commit-message quality, recipient rules, and version or thread bookkeeping.
A product or distribution carries local changes across repeated upstream imports Maintain a distinct local patch layer and an explicit recurring import or rebase process. Duplicate-change detection, metadata such as Gerrit Change-Ids, conflict frequency, auditability, and branch-history policy.

GitHub documents both branch-based work for contributors with repository access and fork-based contributions for people who need an independent copy or lack write access. A fork can propose changes back to the upstream repository through a pull request. GitHub also recommends keeping pull-request diffs focused and describes merging or rebasing the base branch to bring a contribution up to date; rebasing can also tidy history before review. Repository administrators may require reviews, status checks, signed commits, or linear history. GitHub’s contribution guidance explains the branch and fork choices, while its fork guidance covers fork setup, syncing, and collaboration considerations.

Keep proposed changes easy to review

Whether the review arrives as a pull request or a patch series, make each commit tell a coherent story. A focused unit is easier to discuss, test, revise, and eventually accept than a bundle of unrelated edits. The Linux Foundation’s January 2021 mentoring presentation recommends focused feature branches, testing, and using git rerere to help prepare clean patch series. That is workflow guidance, not evidence for a quantified reduction in conflicts or review time. The presentation frames a feature branch as a patch set and discusses upstream contribution practices.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Keep a change scoped to one purpose, and separate unrelated cleanup or follow-up work.
  • Write commit messages that identify the change and explain its reason; preserve clear authorship and review context.
  • Test the proposed change and state what was tested in the project’s expected place, such as the pull request or cover letter.
  • Before review, update against the project’s expected base and inspect the resulting diff for unrelated changes.

Submit a patch series by email when the project expects it

Git’s email workflow represents each non-merge commit as a mailbox-style message. git format-patch generates the messages; a maintainer can apply them with git am, which can preserve the author and commit-message information. The Git project’s own patch-submission guidance describes its review lifecycle and names b4 and GitGitGadget as alternatives to the documented format-patch and send-email path for that project. Those tools are not universal replacements: follow the target project’s instructions.

Prepare and inspect the series

  1. Make the intended commits on a topic branch and identify the exact commit range to submit. Avoid including merge commits in an email patch series.

  2. Generate mailbox messages with git format-patch. Its options support numbering a series, creating a cover letter, and preparing versioned submissions or range-diff material; choose the form the project asks for. See the Git format-patch documentation.

  3. Review the rendered messages, including the cover letter and each commit message, before sending. Git’s documentation warns that particular unindented lines can be interpreted as the beginning of a patch and terminate the commit message early. That can affect parsing and fidelity, so check the actual email representation rather than relying only on the local commit view.

    Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  4. Send the series through the project-approved recipient and tooling process. Track revisions and discussion in the thread or system the project uses, and make clear which version supersedes an earlier submission.

Applying a series with git am is not a guarantee that the result matches the sender’s intent: a patch may fail to apply or require conflict resolution. After application, inspect the resulting commits and files, and resolve conflicts deliberately. The Git am documentation covers applying mailbox patches and preserving commit metadata.

Keep downstream changes distinct from upstream history

A downstream team has a different recurring problem from an upstream contributor: each import of a new upstream version must account for local changes that have not been accepted upstream. Make the boundary between imported upstream history and the local patch layer understandable. That makes it easier to see what is still locally carried, identify changes already incorporated upstream, and investigate conflicts during an import.

The specialized git-upstream tool documents rebasing locally carried changes onto upstream imports and using patch identity to recognize identical changes. Its documentation says this works best with Gerrit Change-Ids: when present, they can help identify reviewed revisions and support automated dropping of changes that have appeared upstream. Change-Ids are not a general substitute for project policy or careful review, and the documentation does not establish that all workflows have them.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The surfaced git-upstream documentation is Release 0.12.2. Because compatibility and maintenance can change, verify that release’s current fit with your repository and Git environment before adopting it. It is a specialized option for recurring downstream imports, not a prerequisite for ordinary contributions.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Handle recurring conflicts without trusting automation blindly

For teams repeatedly resolving similar conflicts while preparing a clean patch series, git rerere can record and reuse a prior conflict resolution. The Linux Foundation presentation recommends it as an aid. Reused resolutions still need inspection: a remembered resolution may no longer be correct in the context of a later upstream change. Treat it as a way to reduce repeated manual work, not as a correctness check.

  • After each upstream import or rebase, inspect the resulting history and the local patch list.
  • Review conflicts and any reused resolutions in the surrounding code and tests.
  • Confirm which local patches remain necessary and which have been incorporated upstream before preparing the next import.
  • Record the import base and review decisions in the team’s normal change-tracking process so another maintainer can understand the patch layer.

Protect repository data when choosing forks

Forks are convenient for independent contributions, but repository sensitivity changes the decision. Fork permissions and data visibility depend on platform policy and repository configuration; check the current rules before using a fork for confidential or otherwise sensitive work. Where a fork is unsuitable, use an approved branch or another project-supported review path rather than assuming the standard public contribution model applies.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.