{"id":19887964,"url":"https://github.com/zabot/fel","last_synced_at":"2025-10-08T22:07:35.719Z","repository":{"id":49558800,"uuid":"342626851","full_name":"Zabot/fel","owner":"Zabot","description":"A tool for transparently submitting stacked diffs to GitHub from git branches","archived":false,"fork":false,"pushed_at":"2024-10-15T07:27:43.000Z","size":740,"stargazers_count":17,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-02T17:58:44.490Z","etag":null,"topics":["diffs","git","github"],"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/Zabot.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}},"created_at":"2021-02-26T16:01:51.000Z","updated_at":"2025-02-01T18:57:48.000Z","dependencies_parsed_at":"2025-05-02T17:48:10.198Z","dependency_job_id":null,"html_url":"https://github.com/Zabot/fel","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/Zabot/fel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zabot%2Ffel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zabot%2Ffel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zabot%2Ffel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zabot%2Ffel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zabot","download_url":"https://codeload.github.com/Zabot/fel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zabot%2Ffel/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265571165,"owners_count":23790031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["diffs","git","github"],"created_at":"2024-11-12T18:05:33.086Z","updated_at":"2025-10-08T22:07:30.680Z","avatar_url":"https://github.com/Zabot.png","language":"Rust","readme":"# Fel\nFel submits each commit in a branch as a separate PR against a remote repo. Fel is designed\nto be a companion to the conventional git tooling. Rather than needing to create and manage\nstacks as first class objects, Fel infers the shape of a stack. You can continue to manipulate\nyour repo with `git` without needing to keep fel in sync as you make changes. Fel also does not\ntry and handle merging stacks, meaning it can be used without any support needed from the repo\nthe stack is submitted to.\n\n## Usage\nCreate a new branch to represent your stack. The name of the branch\nwill be used as the name of the stack. Make commits to your branch,\neach commit will be translated into a single PR. Amend commits as needed\nwith this in mind. Upload your branch to GitHub with `fel submit`. Fel will\nautomatically push a branch for every commit in your stack and create PRs with\nproperly configured base branches, so each commit appears as a single diff.\n\nIf you amend any of your commits, run `fel submit` again from the top of the stack.\nFel will force push the branches corresponding to each PR and post a message in each\nthread with a diff between the newly submitted commit and the last commit.\n\nOnce your PRs are ready to merge, merge them as normal using the GitHub UI and rebase your\nstack on top of the newly merged commit. Fel does not have an opinion on how stacks are\nlanded, only how they're created.\n\n### Git config\nFel uses [git notes](https://git-scm.com/docs/git-notes) to track the metadata associated\nwith each commit. In order for fel to track commits across rebases and amends, you must\nensure that `notes.rewriteRef` includes `refs/notes/fel`. This config ensures that git\nwill persist the fel metadata when modifying commits with attached notes.\n```ini\n[notes]\n\trewriteRef = \"refs/notes/fel\"\n```\n\n## Config\nFel reads from a config file in `~/.config/fel/config.toml`\n\n```toml\ntoken = \"\u003cgithub pat\u003e\" # The token used to create and modify PRs\ndefault_remote = \"origin\" # The remote to push branches too and make PRs against\ndefault_upstream = \"master\" # The branch of the remote to make PRs against\n```\n\n## TODO\n- Properly check `XDG_CONFIG_DIRS` for config file\n- Optionally make commit messages authoritative and overwrite pr body on every submit\n- Status command to view PR status\n- Include stack name and index in PR title\n\n## What happened to the old version\nFel was previously a python script. It was getting untenable to maintain, and I've since learned rust. So I rewrote it in rust\nThe legacy python version is available [here](https://github.com/Zabot/fel/releases/tag/legacy-python)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabot%2Ffel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzabot%2Ffel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabot%2Ffel/lists"}