
git-find-fork
by WaterplanAI
Project-agnostic, composable configuration system for AI-assisted development workflows. Single source of truth for agentic tools (Claude Code, Antigravity, Codex CLI, Gemini CLI).
SKILL.md
name: git-find-fork description: Finds the true merge-base/fork-point of a git branch, detecting history rewrites from rebases and squashes. Handles unknown parent branches. Triggers on keywords: find fork, merge-base, branch fork point, where did branch start, git fork, branch origin project-agnostic: true allowed-tools:
- Bash
- Read
Git Find Fork
Determines the true fork point of a branch, accounting for rebases, squashes, and unknown parent branches.
Workflow
Step 1: Identify Current State
BRANCH=$(git rev-parse --abbrev-ref HEAD)
HEAD_SHA=$(git rev-parse --short HEAD)
Step 2: Find Candidate Parent Branches
When parent is unknown, find closest by commit count:
git branch -a --format='%(refname:short)' | while read b; do
[[ "$b" == "$BRANCH" ]] && continue
base=$(git merge-base "$b" HEAD 2>/dev/null) || continue
count=$(git rev-list --count "$base..HEAD")
echo "$count $base $b"
done | sort -n | head -5
Lowest count = closest parent.
Step 3: Get Merge-Base
PARENT="main" # or detected from Step 2
MERGE_BASE=$(git merge-base "$PARENT" HEAD)
Step 4: Detect History Rewriting
REFLOG_ORIGIN=$(git reflog show "$BRANCH" --format='%H %gs' | grep 'branch: Created' | awk '{print $1}')
if [[ "$REFLOG_ORIGIN" != "$MERGE_BASE" ]]; then
echo "HISTORY REWRITTEN"
# Check if reflog commit still ancestor
git merge-base --is-ancestor "$REFLOG_ORIGIN" HEAD 2>/dev/null && echo "Partial rebase" || echo "Full rebase/squash"
fi
Step 5: Detect Squash
COMMIT_COUNT=$(git rev-list --count "$MERGE_BASE..HEAD")
[[ "$COMMIT_COUNT" -eq 1 ]] && echo "Branch appears SQUASHED"
Step 6: Find Orphaned References (Optional)
# Tags pointing to orphaned commits
for tag in $(git tag); do
tag_sha=$(git rev-parse "$tag" 2>/dev/null)
git merge-base --is-ancestor "$tag_sha" HEAD 2>/dev/null || echo "Orphaned: $tag -> $tag_sha"
done
Output Format
| Field | Value |
|---|---|
| Branch | {branch_name} |
| HEAD | {sha} |
| Parent Branch | {parent} |
| Merge-Base | {sha} - "{commit message}" |
| Commits Since Fork | {count} |
| History Rewritten | Yes/No |
| Squashed | Yes/No |
Key Principle
git merge-base gives the fork point for CURRENT history state. Original fork point after rebase/squash must be recovered from reflog, tags, or dangling objects (none guaranteed to exist).
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です

