Overview & Root Cause Summary: The error
error: You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists). hint: Please, commit your changes before you merge. fatal: Exiting because of unfinished cherry-pickoccurs when executing commands likegit merge,git pull, orgit checkoutwhile a previousgit cherry-pickoperation remains unresolved. Git stops subsequent operations because the presence of the internal.git/CHERRY_PICK_HEADmarker indicates that an active cherry-pick transaction was paused due to merge conflicts or an uncommitted state.
Understanding the Root Causes
- Unresolved Conflicts During Cherry-Pick: A single or multi-commit cherry-pick (
git cherry-pick <hash>) encountered merge conflicts, requiring manual conflict resolution and staging before continuing. - Interrupted Multi-Commit Sequence: Running a multi-commit cherry-pick range (e.g.,
git cherry-pick A..B) where an intermediate commit paused for resolution and was subsequently forgotten. - GUI or IDE Crashes During Operation: A Git graphical client (such as VS Code Git Graph, SourceTree, or GitKraken) crashed or was closed mid-transaction, leaving the marker file in
.git. - Redundant / Empty Commit: The cherry-picked commit contains changes that are already present on the current branch, resulting in an empty change set that cannot be committed normally without skipping.
Step 1: Quick Fix (Safely Abort the Incomplete Cherry-Pick)
If you want to discard the pending cherry-pick attempt and return your working directory to its pre-operation state, abort the transaction.
# 1. Abort the cherry-pick and restore your branch to its state before the command:
git cherry-pick --abort
# 2. Check repository status to confirm clean working tree:
git status
# 3. Proceed with your intended merge, pull, or checkout:
git pull origin $(git branch --show-current)
Step 2: Resolving Conflicts and Concluding the Cherry-Pick
If you intended to apply the commit, resolve any conflicting files and finalize the cherry-pick transaction.
# 1. Inspect unmerged files and conflict markers:
git status
# 2. Open conflicted files, resolve conflict markers (<<<<<<<, =======, >>>>>>>), and stage them:
git add <resolved_file>
# 3. Continue the cherry-pick sequence:
git cherry-pick --continue
# 4. If prompted with the default commit message editor, save and exit to finalize the commit.
Step 3: Handling Empty Commits & Orphaned Lockfiles
If the cherry-picked commit became empty because changes already exist on your target branch, or if a crash orphaned the marker file, clean up the state.
# Option A: Skip the commit if Git reports "The previous cherry-pick is now empty":
git cherry-pick --skip
# Option B: If the working tree is clean but CHERRY_PICK_HEAD persists due to a terminal crash:
rm -f .git/CHERRY_PICK_HEAD
rm -f .git/MERGE_MSG
git status
Verification & Testing Steps
Confirm that the cherry-pick transaction has been completely concluded or aborted and verify repository health.
# 1. Verify working tree is clean and no cherry-pick flags remain:
git status
# 2. Confirm the commit was properly applied to your branch history:
git log --oneline -n 3
# 3. Verify no lingering lockfiles exist in the .git root:
ls -la .git/*HEAD*
Summary Comparison Table
| Resolution Strategy | Applied Command | Working Tree State | Recommended Scenario |
|---|---|---|---|
| Abort Cherry-Pick | git cherry-pick --abort |
Restores pre-cherry-pick state | Canceling the operation or starting over cleanly |
| Continue After Resolution | git cherry-pick --continue |
Commits resolved changes | Completing intentional cherry-picks with conflicts |
| Skip Empty Commit | git cherry-pick --skip |
Discards redundant commit | Commit changes are already applied upstream |
| Manual Marker Cleanup | rm -f .git/CHERRY_PICK_HEAD |
Keeps working directory files | Process crashed while files were already committed |
Leave a Reply