DCO Sign-off Recovery

VerifiedCaution

Recover from missing DCO sign-off on commits. Handles single-commit amend, older-commit recovery via interactive rebase or cherry-pick, and explains the Probot DCO check.

Sby Skills Guide Bot
DevelopmentIntermediate
7/28/2026
Claude CodeCodexCursor
#git#dco#commit-signing#rebase#pull-requests

Recommended for

Automated summary

This skill walks through recovering from a failing DCO check by retroactively adding Signed-off-by trailers, from a single-commit amend to an interactive rebase for older commits.

Strengths

  • Handles three distinct situations: the last commit, an older commit on the branch, and commits brought in via cherry-pick or merge.
  • Gives the exact git log command to spot unsigned commits using Signed-off-by trailers.
  • Prefers --force-with-lease over --force and explains the risk it avoids.
  • Includes a final verification command that checks both GPG signature and DCO trailer before pushing.

Limitations

  • Assumes the Probot DCO check is already set up on the repo and defers the canonical signing policy to .claude/rules/commit-workflow.md.
  • The interactive rebase with 'edit' per commit stays manual and tedious across a long run of unsigned commits.
  • Does not cover commits already pushed to a protected or shared branch where force-pushing is disallowed.
When to use it

Use it when a PR is blocked by the DCO check or a commit needs a Signed-off-by trailer added after the fact.

When not to use it

Avoid it when the branch is shared and history rewriting is forbidden, or when the real issue is an author email that does not match the sign-off.

Security analysis

Caution
Quality score92/100

The skill uses Bash to run git commands that modify commit history and force-push, which are powerful operations. They are legitimate for DCO recovery and do not exfiltrate data or execute arbitrary remote code, but they carry risk of history rewrite and require care.

Findings
  • •Uses `git push --force-with-lease` which rewrites remote branch history and can overwrite collaborators' work if misapplied.
  • •Interactive rebase with `edit` can inadvertently drop or squash commits if the user mishandles the editor or conflicts.
How this analysis is made

Examples

Fix the last commit
My PR is failing the DCO check and it's just my most recent commit missing the sign-off. Can you add the Signed-off-by trailer and push it safely?
Older unsigned commits
Three commits back on my feature branch are missing DCO sign-off. Find them and walk me through rebasing so each one gets signed.
Verify before pushing
Before I push, check that every commit ahead of origin/main has both a good GPG signature and a valid Signed-off-by trailer.

name: dco description: > Recover from missing DCO sign-off on commits. Handles the single-commit amend, older-commit recovery via interactive rebase or cherry-pick, and explains the Probot DCO check that blocks PRs without sign-off. Use when a PR fails the DCO check, when a commit needs a Signed-off-by trailer added retroactively, or when sign-off was forgotten during rebase / cherry-pick / amend. allowed-tools: Bash, Read, Edit

DCO Sign-off Recovery

All commits in this repo must carry a Signed-off-by: trailer (Developer Certificate of Origin). The Probot DCO check on PRs blocks merge until every commit is signed.

The standard way to add it is with --signoff at commit time. This skill handles the cases where that was missed.

Case 1: Last commit only

git commit --amend --signoff -S --no-edit
git push --force-with-lease

--force-with-lease is preferred over plain --force — it refuses if someone else has pushed to the branch since you last fetched.

Case 2: Older commit on the same branch

Find the commit hash of the oldest unsigned commit:

git log --pretty='%h %s %(trailers:key=Signed-off-by,valueonly)' origin/main..HEAD
# Any line with an empty trailing field is unsigned

Then interactively rebase from one commit before that:

git rebase -i <parent-of-unsigned-commit>
# In the editor, change `pick` to `edit` for each unsigned commit
# Save and exit; the rebase stops at each `edit` line so you can amend

For each commit in the rebase, replace it with a signed version:

git commit --amend --signoff -S --no-edit
git rebase --continue

When done, force-push:

git push --force-with-lease

Case 3: Cherry-pick / merge brought in unsigned commits

Cherry-pick with sign-off baked in:

git cherry-pick --signoff <sha>

If you already cherry-picked without it, fall back to Case 1 or Case 2 above.

Verifying the whole branch

Before pushing, verify every commit ahead of origin/main has both DCO and GPG:

git log --format='%G? %(trailers:key=Signed-off-by,valueonly,separator=%x20) %h %s' origin/main..HEAD

Each line must start with G or U (good GPG signature) AND carry a non-empty Signed-off-by value before the SHA. Codes N / B / E need investigation. See .claude/rules/commit-workflow.md for the canonical signing policy.

What the Probot DCO check looks for

The check passes when every commit message includes a Signed-off-by: Name <email> trailer matching the commit author's email. The --signoff (or -s) flag adds this trailer automatically using your user.name and user.email git config.

A failing DCO check on a PR will show a "Details" link explaining which commits are missing sign-off.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/dco-sign-off-recovery-ms47vnw7' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/dco-sign-off-recovery-ms47vnw7/download' --output '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md.part' && mv '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md.part' '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Bash, Read, Edit

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && test -s '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/dco' && cp -R '.skill-downloads/dco-sign-off-recovery-ms47vnw7' '.claude/skills/dco'

Cursor
test -f '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && test -s '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/dco' && cp -R '.skill-downloads/dco-sign-off-recovery-ms47vnw7' '.cursor/skills/dco'

Codex
test -f '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && test -s '.skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/dco' && cp -R '.skill-downloads/dco-sign-off-recovery-ms47vnw7' '.agents/skills/dco'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/dco-sign-off-recovery-ms47vnw7'

openskills read 'dco-sign-off-recovery-ms47vnw7'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/dco-sign-off-recovery-ms47vnw7/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills