GitHub gives three reasons the merge button stays grey.
REVIEW_REQUIRED means a maintainer hasn't pressed approve yet. BLOCKED means CI hasn't gone all-green. DIRTY means your branch has merge conflicts with the target.
The first two are the maintainer's queue. The third one is yours.
The trap I keep watching first-time contributors fall into is reading DIRTY as the same kind of state as the other two. Something the maintainer will resolve. Something that doesn't matter yet because the PR hasn't been reviewed. Both readings are wrong. A DIRTY PR is unmergeable, so the maintainer can't press approve on it without committing to a merge that will fail. It's invisible to their triage. And the cost of fixing it doesn't stay flat. It grows with the calendar.
The cheap rebase






