Git not-possible-to-fast-forward A fast-forward-only integration was refused because local and fetched histories diverged.

dev@local: ~/project — git
dev@local~/project$git pull --ff-only
error: not possible to fast forward
Diagnostics Translation
A fast-forward-only integration was refused because local and fetched histories diverged.
waiting for resolution...
MediumVersion Control System

Reviewed for reference consistency: August 11, 2026

Code is Safe

SECURE

Git has paused the operation to protect your code. No data has been lost or corrupted.

What To Know

This abort means the fast-forward-only contract was broken by real divergence; the branch was not updated, and integration now needs a merge or a rebase decision.

Where Did It Fail?

Working Tree
Your local files
add
Staging Index
Prepared changes
commit
Local Repo
Commit history
push/fetch
Remote Server
GitHub/GitLab
Git halted to protect the uncommitted files in your active working directory.

Commands That Trigger This

$git pull --ff-only
Running after committing locally while the remote also moved
A CI or deploy script configured with --ff-only hitting a branch that received a hotfix
$git merge --ff-only origin/main
Using to sync without creating merge commits

Technical Background

01

The abort is the option working as specified: --ff-only exists to keep integrations predictable in scripts, and its failure mode is a clean refusal rather than a surprise merge commit. The non-zero exit tells automation to stop.

02

The hint above the message proposes `git merge --no-ff` or `git rebase` as the two reconciliations, and `git config advice.diverging false` silences the hint for scripted environments. Neither suggestion is applied automatically — the branch stays exactly as it was.

Underlying Causes

Local commits exist that the remote branch does not have
The remote branch gained commits after the last fetch
A force-push upstream rewrote history so the histories no longer line up
pull.ff or pull.rebase configuration requested a fast-forward-only integration

Frequently Asked Questions

A clean tree says nothing about history shape; divergence is about commits, and --ff-only fails on any local commit the remote branch lacks.

No. That one rejects a push because the remote is ahead; this one refuses a local update because both sides moved and no pure pointer move exists.

Related Git States