git cherry-pick Command: Apply Commits from Another Branch
Sometimes the change you need is already written, just on the wrong branch. A hotfix may land on main when it also needs to go to a maintenance branch, or a useful commit may be buried in a feature branch that you do not want to merge wholesale. In that situation, git cherry-pick lets you copy the effect of a specific commit onto your current branch.
This guide explains how git cherry-pick works, how to apply one or more commits safely, and how to handle the conflicts that can appear along the way.
Syntax
The general syntax for git cherry-pick is:
git cherry-pick [OPTIONS] COMMIT...-
OPTIONS- Flags that change how Git applies the commit. -
COMMIT- One or more commit hashes, branch references, or commit ranges.
git cherry-pick replays the changes introduced by the selected commit on top of your current branch. Git creates a new commit, so the result has a different commit hash even when the file changes are the same.
Cherry-Picking a Single Commit
Start by finding the commit you want to copy. This example lists the recent commits on a feature branch:
git log --oneline feature/autha3f1c92 Fix null pointer in auth handler
d8b22e1 Add login form validation
7c4e003 Refactor session logic
The output gives you the abbreviated commit hashes. In this case, a3f1c92 is the fix we want to move.
Switch to the target branch before running git cherry-pick:
git switch main
git cherry-pick a3f1c92[main 9b2d4f1] Fix null pointer in auth handler
Date: Tue Apr 14 10:42:00 2026 +0200
1 file changed, 2 insertions(+)
Git applies the change from a3f1c92 to main and creates a new commit, 9b2d4f1. The subject line is the same, but the commit hash is different because the parent commit is different.
Cherry-Picking Multiple Commits
If you need more than one non-consecutive commit, pass each hash in the order you want Git to apply them:
git cherry-pick a3f1c92 d8b22e1Git creates a separate new commit for each one. This works well when you need a few targeted fixes but do not want the rest of the source branch.
For a range of consecutive commits, use the range notation:
git cherry-pick a3f1c92^..7c4e003This tells Git to include a3f1c92 and every commit after it up to 7c4e003. If you omit the caret, the starting commit itself is excluded:
git cherry-pick a3f1c92..7c4e003That form applies every commit after a3f1c92 through 7c4e003.
Applying Changes Without Committing
Sometimes you want the changes from a commit, but not an automatic commit for each one. Use --no-commit (or -n) to apply the changes to your working tree and staging area without creating the commit yet:
git cherry-pick --no-commit a3f1c92This is useful when you want to combine several small fixes into one commit on the target branch, or when you need to edit the files before committing.
After reviewing the result, create the commit yourself:
git status
git commit -m "Backport auth null-check fix"This gives you more control over the final commit message and lets you group related backports together.
Recording Where the Commit Came From
For maintenance branches and backports, it is often helpful to keep a reference to the original commit. Use -x to append the source commit hash to the new commit message:
git cherry-pick -x a3f1c92Git adds a line like this to the new commit message:
(cherry picked from commit a3f1c92...)
That extra line makes future audits easier, especially when you need to prove that a fix on a release branch came from a reviewed change on another branch.
Cherry-Picking a Merge Commit
Cherry-picking a regular commit is straightforward, but merge commits need one extra option. Git must know which parent to treat as the main line:
git cherry-pick -m 1 MERGE_COMMIT_HASH-
-m 1- Use the first parent as the base, which is usually the branch that received the merge. -
-m 2- Use the second parent instead.
If you are not sure which parent is which, inspect the history first:
git log --oneline --graphCherry-picking merge commits is more advanced and easier to get wrong. If the goal is to bring over an entire merged feature, a normal merge is often clearer than cherry-picking the merge commit itself.
Resolving Conflicts
If the target branch has changed in the same area of code, Git may stop and ask you to resolve a conflict:
error: could not apply a3f1c92... Fix null pointer in auth handler
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
Open the conflicted file and look for the conflict markers:
<<<<<<< HEAD
return session.getUser();
=======
if (session == null) return null;
return session.getUser();
>>>>>>> a3f1c92 (Fix null pointer in auth handler)
Edit the file to keep the final version you want, then stage it and continue:
git add src/auth.js
git cherry-pick --continueIf you decide the commit is not worth applying after all, abort the operation:
git cherry-pick --abortgit cherry-pick --abort puts the branch back where it was before the cherry-pick started.
A Safe Backport Workflow
When you cherry-pick onto a release or maintenance branch, slow down and make the source obvious. A simple workflow looks like this:
git switch release/1.4
git pull --ff-only
git cherry-pick -x a3f1c92
git statusThe important part is the sequence. Start from the branch that needs the fix, make sure it is up to date, cherry-pick with -x, then review and test the branch before pushing it. This avoids the common mistake of copying a fix into an outdated branch and shipping an untested backport.
If the picked commit depends on earlier refactors or new APIs that are not present on the target branch, stop there. In that case, either copy the prerequisite commits too or recreate the fix manually.
When to Use git cherry-pick
git cherry-pick is a good fit when you need a precise change without the rest of the branch:
- Backporting a bug fix from
mainto a release branch - Recovering one useful commit from an abandoned feature branch
- Moving a small fix that was committed on the wrong branch
- Pulling a reviewed change into a hotfix branch without merging unrelated work
Avoid it when the target branch needs the full context of the source branch. If the commit depends on earlier commits, shared refactors, or schema changes, a merge or rebase is usually the cleaner option.
Troubleshooting
error: could not apply ... during cherry-pick
The target branch has conflicting changes. Resolve the files Git marks as conflicted, stage them with git add, then run git cherry-pick --continue.
Cherry-pick created duplicate-looking history
That is normal. Cherry-pick copies the effect of a commit, not the original object. The new commit has a different hash because it has a different parent.
The picked commit does not build on the target branch
The commit likely depends on earlier work that is missing from the target branch. Inspect the source branch history with git log
and either cherry-pick the prerequisites too or reimplement the change manually.
You picked the wrong commit
If the cherry-pick already completed, use git revert
on the new commit. If the operation is still in progress, use git cherry-pick --abort.
Quick Reference
For a printable quick reference, see the Git cheatsheet .
| Task | Command |
|---|---|
| Pick one commit | git cherry-pick COMMIT |
| Pick several specific commits | git cherry-pick C1 C2 C3 |
| Pick a consecutive range including the first commit | git cherry-pick A^..B |
| Apply changes without committing | git cherry-pick --no-commit COMMIT |
| Record the source commit in the message | git cherry-pick -x COMMIT |
| Continue after resolving a conflict | git cherry-pick --continue |
| Skip the current commit in a sequence | git cherry-pick --skip |
| Abort the operation | git cherry-pick --abort |
| Pick a merge commit | git cherry-pick -m 1 MERGE_COMMIT |
FAQ
What is the difference between git cherry-pick and git merge?git cherry-pick copies the effect of selected commits onto your current branch. git merge joins two branch histories and brings over all commits that are missing from the target branch.
Does cherry-pick change the original commit?
No. The source commit stays exactly where it is. Git creates a new commit on your current branch with the same file changes.
Should I use -x every time?
Not always, but it is a good habit for backports and maintenance branches. It gives you a clear link back to the original commit.
Can I cherry-pick commits from another remote branch?
Yes. Fetch the remote branch first, then cherry-pick the commit hash you want. You can inspect the incoming history with git log
or review the file changes with git diff
before applying anything.
Conclusion
git cherry-pick is the tool to reach for when one commit matters more than the branch it came from. Use it for targeted fixes, keep -x in mind for backports, and fall back to merge or rebase when the change depends on broader branch context.

















