{"id":44453379,"url":"https://github.com/margual56/gg","last_synced_at":"2026-02-12T17:04:35.606Z","repository":{"id":335332559,"uuid":"1145303423","full_name":"margual56/gg","owner":"margual56","description":"An opinionated, zero-friction Git collaborator that handles the \"weird shit\" for you. Auto-conventional commits, smart-syncing unrelated histories via rebase, and intelligent SSH/Agent authentication.","archived":false,"fork":false,"pushed_at":"2026-01-29T22:45:18.000Z","size":54,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-30T05:17:47.468Z","etag":null,"topics":["cli","cli-app","git","git-wrapper","libgit2","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/margual56.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-29T16:55:20.000Z","updated_at":"2026-01-29T22:45:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/margual56/gg","commit_stats":null,"previous_names":["margual56/gg"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/margual56/gg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margual56%2Fgg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margual56%2Fgg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margual56%2Fgg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margual56%2Fgg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/margual56","download_url":"https://codeload.github.com/margual56/gg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/margual56%2Fgg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29373837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","cli-app","git","git-wrapper","libgit2","rust"],"created_at":"2026-02-12T17:04:35.028Z","updated_at":"2026-02-12T17:04:35.598Z","avatar_url":"https://github.com/margual56.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gg 🦀\n\n**gg** is a high-level Git workflow automation tool written in Rust. It’s designed for developers who want the power of Git without the cognitive overhead of managing rebases, upstream tracking, or conventional commit formatting manually.\n\n## ✨ Features\n\n- **Intuitive Remotes**: `gg remote \u003curl\u003e` doesn't just set a string; it fetches, tracks, and automatically rebases unrelated histories (perfect for syncing local-first projects with new GitHub repos).\n- **Smart Saving**: `gg save` analyzes your diffs to generate **Conventional Commits** (e.g., `feat(main.rs): added file`) automatically.\n- **Fail-Fast Safety**: Prevents destructive operations if your working directory is dirty.\n- **Automated Workflows**: \n    - `feature`: Syncs main, branches out, and sets up tracking in one go.\n    - `done`: Merges, cleans up, and returns you to safety.\n- **Smart Auth**: Transparently handles SSH Agents, disk-based SSH keys (`RSA`, `ED25519`), and HTTPS Credential Helpers.\n\n## Workflow\n```mermaid\ngraph TD\n    Start((\u003cb\u003eStart\u003c/b\u003e)) --\u003e Creds[\"\u003cb\u003egg creds\u003c/b\u003e\u003cbr/\u003eSet identity\"]\n    Creds --\u003e Remote[\"\u003cb\u003egg remote\u003c/b\u003e\u003cbr/\u003eLink \u0026 Sync history\"]\n    \n    Remote --\u003e Main[\u003cb\u003eMain Branch\u003c/b\u003e]\n    \n    Main --\u003e Feature[\"\u003cb\u003egg feature\u003c/b\u003e\u003cbr/\u003eBranch out\"]\n    \n    Feature --\u003e Code[\u003ci\u003eEdit Files\u003c/i\u003e]\n    \n    Code --\u003e Save[\"\u003cb\u003egg save\u003c/b\u003e\u003cbr/\u003eAuto-commit \u0026 Push\"]\n    \n    Save -- \"Still working?\" --\u003e Code\n    Save -- \"Review?\" --\u003e PR[\"\u003cb\u003egg pr --open\u003c/b\u003e\u003cbr/\u003eOpen Pull Request\"]\n    PR --\u003e Done\n    Save -- \"Finished?\" --\u003e Done[\"\u003cb\u003egg done\u003c/b\u003e\u003cbr/\u003eMerge \u0026 Clean up\"]\n    \n    Done --\u003e Main\n\n    %% Error Handling\n    Save -. \"Conflict\" .-\u003e Fix[\u003ci\u003eManual Fix\u003c/i\u003e]\n    Fix -. \"Retry\" .-\u003e Save\n\n    style Creds fill:#f5f5f5,stroke:#333\n    style Remote fill:#f5f5f5,stroke:#333\n    style Save fill:#bbf,stroke:#333\n    style PR fill:#ff9,stroke:#333\n    style Done fill:#bfb,stroke:#333\n    style Fix fill:#f66,stroke:#333\n```\n\n## 🚀 Quick Start\n\n### 1. Configure your identity\n```bash\ngg creds \"Your Name\" \"email@example.com\" --global\n```\n\n2. Start a project and link it\n\nInstead of fighting with --allow-unrelated-histories:\n```bash\ngit init\ngg save -m \"Initial work\"\ngg remote git@github.com:user/repo.git\n```\n\n3. Save your work\n```bash\n# Automatically generates: feat: added 3 files (+12, -0, ~0)\ngg save\n\n# Or see what it would do:\ngg save --dry-run\n```\n\n4. Create a Pull Request\n```bash\n# Output the link to stdout\ngg pr\n\n# Or open it directly in your browser\ngg pr --open\n```\n\n🛠 Commands\n|Command|Description|\n|---|---|\n|pull|Pulls from the remote|\n|push|Pushes to the remote|\n|features|Lists all branches|\n|feature -n \u003cname\u003e|Pulls latest, switches to a new branch, and pushes upstream.|\n|save [-m msg]|Pulls, stages all, commits (auto-conventional), and pushes.|\n|pr [--open]|Generates - and optionally opens - a link to create a PR on the appropriate service, if any|\n|done [--no-clean]|Switches to main, pulls, and deletes the feature branch.|\n|remote \u003curl\u003e|Sets remote and performs an auto-rebase sync of histories.|\n|config \u003cn\u003e \u003ce\u003e|Sets Git user.name and user.email.|\n\n## 🧠 How the Auto-Sync Works\n\nWhen you run gg remote, the tool performs a specialized sync:\n\n1. It fetches the remote state.\n2. It detects if the local and remote histories are unrelated.\n3. It rebases your local commits onto the remote's HEAD.\n4. It sets up upstream tracking so you never have to type git push -u origin main again.\n\nGPLv3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmargual56%2Fgg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmargual56%2Fgg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmargual56%2Fgg/lists"}