{"id":16529732,"url":"https://github.com/ryan-williams/git-helpers","last_synced_at":"2025-08-26T02:12:19.302Z","repository":{"id":20514478,"uuid":"23793200","full_name":"ryan-williams/git-helpers","owner":"ryan-williams","description":"1,626 Git aliases and scripts","archived":false,"fork":false,"pushed_at":"2025-08-18T00:03:48.000Z","size":1677,"stargazers_count":26,"open_issues_count":10,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-08-18T01:14:44.560Z","etag":null,"topics":["bash","dotfiles","git"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ryan-williams.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2014-09-08T14:09:06.000Z","updated_at":"2025-08-18T00:03:51.000Z","dependencies_parsed_at":"2023-02-13T03:31:55.651Z","dependency_job_id":"e75eef40-e4b5-428f-a37a-f97acc2b114e","html_url":"https://github.com/ryan-williams/git-helpers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ryan-williams/git-helpers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-williams%2Fgit-helpers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-williams%2Fgit-helpers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-williams%2Fgit-helpers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-williams%2Fgit-helpers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryan-williams","download_url":"https://codeload.github.com/ryan-williams/git-helpers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryan-williams%2Fgit-helpers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272160241,"owners_count":24883779,"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","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bash","dotfiles","git"],"created_at":"2024-10-11T17:47:06.180Z","updated_at":"2025-08-26T02:12:19.289Z","avatar_url":"https://github.com/ryan-williams.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-helpers\n[1,668](#count-completions) Git aliases and scripts.\n\n\u003c!-- toc --\u003e\n- [Setup](#setup)\n- [Commands](#commands)\n    - [Inspect commit graph](#graphs)\n        - [`ggr` (`git-graph`)](#ggr)\n        - [`gg` (`git-graph-all`)](#gg)\n    - [Summarize local/remote branches](#branches)\n        - [`gb` (`git branches`)](#gb)\n        - [`gbr` (`git remote-branches`)](#gbr)\n    - [Inspect commits being rebased/cherry-picked](#gshrh)\n        - [`grbh` (`git-rebase-head`), `gcph` (`git-cherry-pick-head`)](#grbh)\n        - [`gshrh` (`git-show-rebase-head`), `gshch` (`git-show-cherry-pick-head`)](#gshrh)\n    - [Rebase](#rebase)\n        - [`gtw` (`git-throw`)](#gtw)\n        - [`groc` (`git-reorder-commits`)](#groc)\n        - [`grbci` (`git-rebase-preserve-commit-info`)](#grbci)\n        - [`gec` (`git-edit-commit`)](#gec)\n        - [Other](#rebase-other)\n    - [Diff helpers, GIFs, JSON](#diff)\n        - [`gdg` (`git-diff-gif.py`)](#gdg)\n        - [`gdj` (`git-diff-json.py`)](#gdj)\n    - [Update commit parents](#parents)\n    - [Query GitHub Actions runs](#gh-run-list)\n    - [Set/unset \"attr\" types](#gsat)\n- [Meta](#meta)\n    - [Alias count](#count-completions)\n    - [Alias histogram](#aliases)\n\u003c!-- /toc --\u003e\n\n## Setup \u003ca id=\"setup\"\u003e\u003c/a\u003e\nSource [`.git-rc`](./.git-rc) in your `.bashrc`:\n```bash\necho \". $PWD/.git-rc\" \u003e\u003e ~/.bashrc  # Configure new shells to load `git-helpers`\n. .bashrc                           # re-\"source\" your .bashrc, for immediate effect in existing shells\n```\nThis will load all aliases from this repo, add relevant directories to `$PATH`, and set up `PYTHONPATH` for Python utilities.\n\n`pip install -r requirements.txt` ensures `python-dateutil` is installed, which some scripts here require.\n\n\n## Commands \u003ca id=\"commands\"\u003e\u003c/a\u003e\nSome aliases/commands I use frequently:\n\n### Inspect commit graph \u003ca id=\"graphs\"\u003e\u003c/a\u003e\n`ggr` ([`git-graph`]) and `gg` ([`git-graph-all`]) are my preferred ways to visualize Git branches and history.\n\n#### `ggr` ([`git-graph`]) \u003ca id=\"ggr\"\u003e\u003c/a\u003e\n\nExample output from this repo:\n\n![](img/gg-git-helpers.png)\n\nThe first line shows that local branch `main` is checked out (`HEAD -\u003e main`), and up to date with remote branches `gh/main` and `gl/main` (GitHub and GitLab, resp., but that's just a convention I use).\n\n#### `gg` ([`git-graph-all`]) \u003ca id=\"gg\"\u003e\u003c/a\u003e\nSame as [`ggr`](#ggr), but includes all branches (not just the current one).\n\ne.g., [runsascoded/.rc] shows several parallel branch lineages I maintain:\n\n![](img/gg-rc.png)\n\nI develop on `gh-all`, and cherry-pick commits over to `gh-server`, `gl-all`, and `gl-server`.\n\n[git/git] shows wide merge lineages\n\n![](img/gg-git.png)\n\n### Summarize local/remote branches \u003ca id=\"branches\"\u003e\u003c/a\u003e\n\n#### `gb` ([`git branches`]) \u003ca id=\"gb\"\u003e\u003c/a\u003e\n\nImproved version of `git branch -vv`:\n- Branches output in reverse-chron order of last modification (instead of alphabetically)\n- Nice colors for each field\n- Concise \"commits ahead/behind\" counts\n- Abbreviated \"time since last commit\"\n\n[TileDB-SOMA] example:\n\n![gb](img/gb-tdbs.png)\n\n#### `gbr` ([`git remote-branches`]) \u003ca id=\"gbr\"\u003e\u003c/a\u003e\n\nSimilar to [`gb`](#gb), but summarizes remotes' branches.\n\n### Inspect commits being rebased/cherry-picked \u003ca id=\"gshrh\"\u003e\u003c/a\u003e\n\n#### `grbh` ([`git-rebase-head`]), `gcph` ([`git-cherry-pick-head`]) \u003ca id=\"grbh\"\u003e\u003c/a\u003e\nPrint the SHA of the commit currently being rebased or cherry-picked.\n\n#### `gshrh` ([`git-show-rebase-head`]), `gshch` ([`git-show-cherry-pick-head`]) \u003ca id=\"gshrh\"\u003e\u003c/a\u003e\nPass the above SHAs to `git show`.\n\n### Rebase \u003ca id=\"rebase\"\u003e\u003c/a\u003e\n\n#### `gtw` ([`git-throw`]) \u003ca id=\"gtw\"\u003e\u003c/a\u003e\n\"Throw\" (squash) uncommitted changes onto an arbitrary previous commit.\n\n\u003c!-- `bmdf git-throw.py -- --help` --\u003e\n```bash\ngit-throw.py --help\n# Usage: git-throw.py [OPTIONS] DST\n#\n#   \"Throw\" (squash) uncommitted changes onto an arbitrary previous commit.\n#\n# Options:\n#   -m, --message TEXT  Optional message to use for ephemeral commit (before it\n#                       is squashed onto the commit pointed to by `dst`).\n#   -n, --dry-run       1x: commit changes, print rebase todo list; 2x: don't\n#                       commit changes, show simulated rebase todo list\n#   --help              Show this message and exit.\n```\n\nSee also:\n- `gtwp` (`git throw HEAD^`): squash staged changes onto the current commit's parent.\n- `gtwp2` (`git throw HEAD~2`): squash staged changes onto the current commit's grandparent.\n\n#### `groc` ([`git-reorder-commits`]) \u003ca id=\"groc\"\u003e\u003c/a\u003e\n- Reorder commits by index (0-based, counting backwards from `HEAD`)\n- The rebase starts just before the largest index provided, and \"picks\" commits in the order provided.\n\nExamples:\n\n##### Swap order of last two commits\n```bash\ngroc 0 1\n```\nThis rebases the last **2** commits (one more than the maximum index provided, i.e. **1**), according to the plan \"0 1\":\n- \"pick\" `HEAD~0` (current `HEAD`, whose rebased parent becomes `HEAD~2`)\n- \"pick\" `HEAD~1` (originally the parent of `HEAD`, now rebased on top of the commit from the previous step)\n\n##### `-n`: view a rebase \"plan\" without executing it\n```bash\ngroc -n 0 1\n# pick 3d2e3a8 `dcw=\"diff --cached -w\"`\n# pick 2d551a6 `commit -F-` aliases\n```\n\n##### `-p`: preserve commit-dates\n```bash\ngroc -p -n 0 1\n# pick 3d2e3a8 `dcw=\"diff --cached -w\"`\n# exec git reset-committer-date-rebase-head\n# pick 2d551a6 `commit -F-` aliases\n# exec git reset-committer-date-rebase-head\n```\nIn this case, calls to [`git reset-committer-date-rebase-head`] are inserted after each `pick`ed commit.\n\nThe `rebase -x` flag is also directly available; this does the same as the above:\n\n```bash\ngit roc -n -x 'g rcr' 0 1\n# pick 3d2e3a8 `dcw=\"diff --cached -w\"`\n# exec g rcr\n# pick 2d551a6 `commit -F-` aliases\n# exec g rcr\n```\n\n(`g rcr` is an alias for [`git reset-committer-rebase-head`])\n\n##### No-op rotations\nRunning it twice is a no-op (assuming there are no rebase conflicts):\n```bash\ngroc -p 0 1  # Reverse order of last two commits\ngroc -p 0 1  # Reverse back, original commit SHA\n```\n\nSimilarly, here's a no-op 3-rotation:\n```bash\ngroc -p 0 2 1  # Put current HEAD before prior two commits\ngroc -p 0 2 1  # Repeat; current state same as `groc -p 1 0 2`\ngroc -p 0 2 1  # Original commit is restored (including SHA)\n```\n\n#### `grbci` ([`git-rebase-preserve-commit-info`]) \u003ca id=\"grbci\"\u003e\u003c/a\u003e\nRebase, but inject `-x git rcr` ([`git reset-committer-rebase-head`]) after each commit, so that the committer-time is preserved.\n\n#### `gec` ([`git-edit-commit`]) \u003ca id=\"gec\"\u003e\u003c/a\u003e\nRun a rebase to `edit` or `reword` a specific commit:\n\n```bash\n# Open the 3th commit back from HEAD, in rebase \"edit\" mode.\n# A subsequent `rebase --continue` will rebase the remaining 3 commits on top of it.\ngit edit-commit HEAD~3\n\n# \"Dry run\" of the above:\ngit edit-commit -n HEAD~3\n# Would run git rebase -i d6aae97^:\n# edit d6aae97 rm orphaned(?) `commit-filename{,s}` aliases\n# pick ed9447b `cmba=\"commit-body -a\"`, `cnb=\"commit-body --amend\"`\n# pick df33af4 `git-diff-json.py` fixes\n# pick 3c166c3 `dtl`/`details`: commit details\n\n# Change the parent commit's message, rebase HEAD on top of it (noninteractive)\ngit edit-commit -m \"new message\" HEAD^\n\n# Same as above, but preserve the \"committer dates\" of `HEAD^` and `HEAD`\ngit edit-commit -p -m \"new message\" HEAD^\n\n# As an example, this should be a no-op (same HEAD SHA before and after).\n# `gby = git body = git log -1 --format=%B`, so this rewrites the parent commit with its existing\n# message, and preserves committer dates of both HEAD^ and HEAD.\ngit edit-commit -p -m \"`gby HEAD^`\" HEAD^\n```\n\n#### Other \u003ca id=\"rebase-other\"\u003e\u003c/a\u003e\n- `rb \u003cN\u003e`: interactive rebase over the last `N` commits.\n- `grd` ([`git-rebase-diff`]): compute most recent pre-rebase SHA (`ghblr` / [`git-head-before-last-rebase`]), diff that vs. current worktree.\n  - Useful to ensure a rebase didn't change the final work-tree, e.g. when combining or rearranging commits.\n\n### Diff helpers, GIFs, JSON \u003ca id=\"diff\"\u003e\u003c/a\u003e\n- `gdc` (`git diff --cached`): show staged changes only\n- `gds` (`git diff --stat`): show file/line add/remove stats\n- `gdw` (`git diff -w`): diff, ignoring whitespace changes\n\nMost combos of the above also exist, e.g. `gdcs`, `gdsw`, etc.\n\n#### `gdg` ([`git-diff-gif.py`]) \u003ca id=\"gdg\"\u003e\u003c/a\u003e\nCreate a GIF of an image at two commits, open in browser.\n\n#### `gdj` ([`git-diff-json.py`]) \u003ca id=\"gdj\"\u003e\u003c/a\u003e\nPretty-print JSON files, before diffing them.\n\n### Update commit parents \u003ca id=\"parents\"\u003e\u003c/a\u003e\nCreate a commit with a given tree and parents:\n- `gcmp` ([`git-commit-multiple-parents`]): takes an optional commit message (`-m`) and commit (`-b`) whose tree to use\n- `gsp` ([`git-set-parents`]) uses the current `HEAD`s message and tree\n\n### Author/Committer/User metadata\n- `gsau` ([`git-set-author`]): update `HEAD` author, either from Git configs, an existing commit, or literal name/email arguments.\n- `gsad` ([`git-set-author-date`]): update `HEAD` author date; match another commit's, or `HEAD`'s committer date.\n- `gscd` ([`git-set-committer-date`]): update `HEAD` committer date; match another commit's, or `HEAD`'s author date.\n- `gsid` ([`git-set-id`]), `ggsid` (`git-set-id -g`): set `user.{name,email}` configs.\n\n### Query GitHub Actions runs \u003ca id=\"gh-run-list\"\u003e\u003c/a\u003e\n[`github_run_list.py`] wraps `gh run list`, adding support for multiple values and fuzzy-matching of several run attributes:\n\n\u003c!-- `bmdf -- github_run_list.py --help` --\u003e\n```bash\ngithub_run_list.py --help\n# Usage: github_run_list.py [OPTIONS] [REF]\n#\n#   Wrapper around `gh run list`, supporting multiple values and fuzzy-matching\n#   for several flags.\n#\n# Options:\n#   -a, --all-branches              Include runs from all branches\n#   -A, --include-artifacts         Include `artifacts` as a JSON key; this\n#                                   isn't supported by `gh`, but is fetched\n#                                   separately and merged into the output result\n#   -b, --branch TEXT               Filter to runs from this branch; by default,\n#                                   only runs corresponding to the current\n#                                   branch are returned\n#   -c, --compact                   In JSON-output mode, output JSONL (with each\n#                                   run object on a single line)\n#   -i, --ids-only                  Only print IDs of matching runs, one per\n#                                   line\n#   -j, --json TEXT                 Comma-delimited list of JSON fields to\n#                                   fetch; `*` or `-` for all fields\n#   -J, --include-jobs              Include `jobs` as a JSON key; this isn't\n#                                   supported by `gh`, but is fetched separately\n#                                   and merged into the output\n#   -L, --limit INTEGER             Maximum number of runs to fetch (passed\n#                                   through to `gh`; default 20)\n#   -1, --limit-1                   Alias for -L/--limit 1\n#   -n, --name-includes TEXT        Filter to runs whose \"workflow name\" matches\n#                                   any of these regexs; comma-delimited, can\n#                                   also be passed multiple times\n#   -N, --name-excludes TEXT        Filter to runs whose \"workflow name\" doesn't\n#                                   match any of these regexs; comma-delimited,\n#                                   can also be passed multiple times\n#   -r, --remote TEXT               Git remote to query\n#   -s, --status TEXT               Comma-delimited list of statuses to query\n#   -v, --verbose                   Log subprocess commands as they are run\n#   -w, --include-workflow-basenames TEXT\n#                                   Comma-delimited list of workflow-file\n#                                   `basename` regexs to include\n#   -W, --exclude-workflow-basenames TEXT\n#                                   Comma-delimited list of workflow-file\n#                                   `basename` regexs to exclude\n#   --help                          Show this message and exit.\n```\n\nSelect aliases:\n```bash\nalias ghra=\"github_run_list.py -a\"\nalias ghrb=\"github_run_list.py\"\nalias ghiq=\"github_run_list.py -s in,q\"     # {in_progress,queued} x current branch\nalias ghaq=\"github_run_list.py -s in,q -a\"  # {in_progress,queued} x all branches\nalias ghrw=\"github_run_list.py -w\"\nalias ghaw=\"github_run_list.py -aw\"\n```\n\n### Set/unset \"attr\" types \u003ca id=\"gsat\"\u003e\u003c/a\u003e\n[`git-set-attr-type.py`] sets/unsets \"attr\" types associated with file extensions (e.g. for configuring file-type-aware diff/merge hooks):\n\n\u003c!-- `bmdf -- git-set-attr-type.py --help` --\u003e\n```bash\ngit-set-attr-type.py --help\n# Usage: git-set-attr-type.py [OPTIONS] EXTENSION [NAME]\n#\n#   Manage \"attr type\" for one or more file extensions.\n#\n# Options:\n#   -a, --attr TEXT      Attr-types to manipulate (e.g. `diff`, `merge`; comma-\n#                        delimited)  [required]\n#   -c, --comment-lines  Comment/Uncomment lines (instead of removing/modifying)\n#   -u, --unset\n#   --help               Show this message and exit.\n```\n\nSelect aliases:\n```bash\nalias gsat=\"set-attr-type.py\"\nalias gsdt=\"set-attr-type.py -a diff\"\nalias gsdm=\"set-attr-type.py -a diff,merge\"\nalias gsdmt=\"set-attr-type.py -a diff,merge\"\nalias gsmt=\"set-attr-type.py -a merge\"\nalias guat=\"set-attr-type.py -u\"\nalias gudt=\"set-attr-type.py -u -a diff\"\nalias gudm=\"set-attr-type.py -u -a diff,merge\"\nalias gumt=\"set-attr-type.py -u -a merge\"\n```\n\n## Meta \u003ca id=\"meta\"\u003e\u003c/a\u003e\n\n### Alias count \u003ca id=\"count-completions\"\u003e\u003c/a\u003e\nMost aliases in this repo begin with `g` (for Git). [count-completions.sh](scripts/count-completions.sh) counts them:\n\u003c!-- `bmdf -I -- scripts/count-completions.sh -c` --\u003e\n```bash\nscripts/count-completions.sh -c\n# 1668 completions added by installing git-helpers\n# By length:\n# - 2 chars: 16\n# - 3 chars: 254\n# - 4 chars: 670\n# - 5 chars: 323\n```\n\nA goal of this repo is to help me always be within a couple keystrokes of most common Git commands.\n\nHere's a full list of the aliases and scripts provided by `source`ing [`.git-rc`](.git-rc):\n\n\u003c!-- `bmdfff -I -- scripts/count-completions.sh -v` --\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003ccode\u003escripts/count-completions.sh -v\u003c/code\u003e\u003c/summary\u003e\n\n```\n1668 new completions:\ng          = git\np          = parallel -k -j+0 --env PATH\ng1         = !git --no-pager log -1\nga         = g add\ngb         = g branches\ngc         = g commit\ngd         = g diff\nge         = g expand-alias\ngf         = g fetch-x --tags\ngg         = g graph-all\ngl         = g ls-files\ngm         = g merge\ngn         = git --no-pager\ngp         = g push-x\ngr         = g remote -vv\ngs         = g status\ngt         = g tags\ngx         = git-git-dir\nhb         = hub browse\nrb         = git-helpers/rebase/rb  # Interactive rebase over the last \u003carg\u003e commits.\ng1f        = !git --no-pager log-1-format\nga.        = g add .\ngab        = g all-branches\ngac        = g all-commits\ngad        = !git --no-pager log --format=%ad -1\ngae        = g add-core-excludes -g\ngaf        = g add -f\ngah        = g all-hashes\ngai        = g add -N\ngan        = g add -n\ngap        = g add -p\ngar        = g add-rebase-continue\ngau        = g add -u\ngb0        = g body HEAD\ngb1        = g body HEAD@{1}\ngb2        = g body HEAD@{2}\ngb3        = g body HEAD@{3}\ngbD        = g branch -D\ngbb        = !git-branches.py -b\ngbc        = g branch-reset -c\ngbd        = g branch -D\ngbe        = g branch-exists\ngbf        = g branch-reset\ngbh        = g blob-hash\ngbk        = g branch-back\ngbn        = !gn branch --format '%(refname:short)' --list\ngbp        = g branch-point\ngbr        = g remote-branches\ngbs        = g bisect\ngbt        = g branch --track=inherit\ngbu        = g branch-upstream\ngby        = g body\ngca        = g commit -a\ngcb        = g current-branch\ngcd        = g copy-diffs\ngce        = g command-exists\ngcf        = g config\ngcg        = g config --global\ngch        = g cherry-pick-head\ngci        = g check-ignore\ngcl        = g conflict-lines\ngcm        = g commit -m\ngcn        = g commit --amend\ngco        = g checkout\ngcp        = g cherry-pick\ngct        = g commit-tree\ngcu        = g config --unset\ngcw        = g checkout-worktree\ngd-        = g diff --\ngdb        = g diff-branch-reflog\ngdc        = g diff --cached\ngdd        = g diff --submodule=diff\ngde        = g diff --exit-code\ngdf        = g diff-filter\ngdg        = g diff-gif.py\ngdh        = g diff HEAD\ngdj        = g diff-json.py\ngdl        = g diff --submodule=log\ngdn        = g diff --name-status\ngdo        = gist-dir -o\ngdq        = g diff --quiet\ngdr        = g rev-parse --git-dir\ngds        = g diff --stat\ngdt        = g diff-tree\ngdu        = g diff -u\ngdw        = g diff -w\ngdx        = g diff-x\ngea        = git_expand_alias\ngec        = g edit-commit\ngef        = g config --global --get-all core.excludesfile\ngeq        = g equal\nger        = g for-each-ref\nget        = g empty-tree\ngf1        = g fetch-x --depth 1\ngfa        = g fetch-x --tags --all\ngfb        = g fetch-x\ngfc        = g grep --recurse-submodules '\u003c\u003c\u003c\u003c\u003c\u003c\u003c'\ngfd        = g fetch-x --depth\ngfe        = g for-each-ref\ngff        = g fetch-x --force --tags\ngfh        = g full-hash\ngfm        = g log-format\ngfn        = g find\ngfo        = g fetch-x --tags origin\ngfp        = g find-prefix\ngfr        = g fetch-x --tags --recurse-submodules\ngfs        = g find-suffix\ngft        = g fetch-x --tags\ngfu        = g fetch-x --tags u\ngga        = g graph-all\nggc        = gh gist create\nggd        = git-git-dir\ngge        = gh gist edit\nggi        = g grep --recurse-submodules -i\nggl        = g grep --recurse-submodules -l\nggn        = g grep --recurse-submodules -n\nggp        = g grep --recurse-submodules\nggr        = g graph\nggt        = g get-tag\nggu        = g remote-get-url\ngha        = gh api\nghb        = g blob-hash\nghc        = g has-changes\nghf        = g help-follow\nghg        = gh gist\nghh        = g help\nghj        = gh_open_job\nghm        = !git --no-pager log -1 '--format=%h %s'\ngho        = g hash-object\nghq        = gh run list -s queued\nghr        = gh run\nghs        = gh secret list\nghu        = github_url\nghv        = gh variable list\nghw        = github-workflows.py\nghx        = gh api -X\ngib        = g is-branch\ngic        = g is-clean\ngid        = g is-dirty\ngif        = g config --global --get-all include.path\ngig        = g is-repo\ngip        = g config --global --get-all include.path\ngir        = g is-remote\ngis        = g is-submodule\ngkl        = g kill-lines\ngl1        = !git --no-pager log -1\ngla        = g diff --cached --name-only --diff-filter=A\nglb        = g local-branches\nglc        = g list-changed\ngld        = g list-status ' D'\nglf        = g log-format\nglg        = git-helpers/log/glg  # Display history of files, lookup by partial/grep matches, prompt to disambiguate if multiple.\nglh        = g log-hash\nglj        = gitlab_open_jobs\nglm        = g list-mode\ngln        = g list-n\nglo        = g ls-files --other --exclude-standard --directory --no-empty-directory\nglp        = g log -p\nglr        = g ls-files --recurse-submodules\ngls        = g ls-files\nglt        = g ls-tree\nglu        = g list-unstaged\nglw        = g log --follow\nglz        = g ls-files -z\ngma        = g merge --abort\ngmb        = g merge-base-plus\ngmc        = g my-clone\ngmf        = g merge --ff-only\ngmh        = g merge-head\ngmm        = g merge -m\ngmn        = g merge --no-edit\ngmr        = g mirror-remote\ngmt        = g mergetool -y -t\ngmu        = g merge upstream/HEAD\ngmv        = g mv\ngnb        = g new-branch\ngnd        = !git --no-pager diff\ngnx        = !git-git-dir -n\ngob        = !git_open_web_branch.py\ngoc        = g original-commit\ngoh        = g original-head\ngom        = g octomerge\ngop        = gh gist create --web\ngpb        = g previous-branch\ngpd        = g push --delete\ngpf        = g push -f\ngph        = g push-head-to\ngpl        = g pull\ngpm        = g push-to-master\ngpn        = g push -n\ngpo        = g push-to-remote-branch origin\ngpp        = g commit-push-parents\ngpr        = g pull --rebase\ngps        = !git pull --rebase \u0026\u0026 git submodule update --init --rebase --recursive\ngpt        = g push-x -t\ngpu        = g push-to-remote-branch upstream\ngpx        = g push-x\ngr.        = g reset .\ngr0        = g remote\ngra        = g remote add\ngrb        = g rebase\ngrc        = g rebase --continue\ngrd        = g rebase-diff\ngre        = g remote-exists\ngrh        = g reset-hard\ngri        = g rebase -i\ngrl        = g reflog '--format=%C(green)%gd %C(yellow)%h %C(blue)%aI %C(red)%an %C(auto)%gs'\ngrm        = g rm\ngrn        = g add-rebase-continue-no-edit\ngro        = g rebase --onto\ngrp        = g reset -p\ngrq        = g rebase-sequence\ngrr        = g remote-rename\ngrs        = g reset\ngrt        = g root\ngrv        = g remote -vv\ngrw        = g restore-worktree\ngrx        = g rebase -x\ngsa        = g stash apply\ngsb        = g show-branch\ngsc        = g status --porcelain\ngsd        = !git status \u0026\u0026 git diff\ngsf        = g submodule foreach --recursive --quiet\ngsg        = g submodule-log\ngsh        = g show\ngsj        = g log -n1 --format=%s\ngsk        = g stash save -k\ngsl        = g stash list\ngsm        = g submodule\ngsn        = g show-names\ngsp        = g stash pop\ngsr        = !git reset . \u0026\u0026 git submodule update --recursive\ngss        = g stash save\ngst        = g status -uno\ngsu        = g submodule update --recursive\ngsw        = g stash show -p\ngsx        = g status-x\ngsz        = g size\ngta        = g time-author\ngtb        = g tracked-branch\ngtc        = g time-committer\ngtd        = g tag -d\ngtf        = g tag-f\ngtg        = g tag\ngth        = g tags -n 10\ngti        = g tree-id\ngtl        = g tag -l\ngtn        = g tags -n\ngtp        = g tag --format='%(color:green)%(objectname:short)%(color:reset)%09%(color:yellow)%(refname:strip=2)%(color:reset)%09%(color:red)%(creatordate:iso)%(color:reset)%09%(color:blue)%(creatordate:relative)%(color:reset)'\ngtr        = g ls-tree\ngts        = g total-size\ngtw        = g throw.py\ngub        = g upstream-branch\ngud        = g undelete\ngue        = g config user.email\ngui        = g update-index\ngun        = g config user.name\ngup        = g unpack-and-apply-diffs\ngur        = g update-ref\ngus        = g upstream\nguu        = !git --no-pager conflicting\ngwd        = g working-dir\ngwh        = g l1t\ngwt        = g l1t\ngxb        = \u003cgit repo dir\u003e ['git b' args...]\ngxc        = \u003cgit repo dir\u003e ['git c' args...]\ngxd        = \u003cgit repo dir\u003e ['git d' args...]\ngxf        = g config --global --get-all core.excludesfile\ngxg        = \u003cgit repo dir\u003e ['git g' args...]\ngxh        = \u003cgit repo dir\u003e ['git sha' args...]\ngxl        = \u003cgit repo dir\u003e ['git ln' args...]\ngxr        = \u003cgit repo dir\u003e ['git r' args...]\ngxs        = \u003cgit repo dir\u003e ['git s' args...]\ngxt        = \u003cgit repo dir\u003e ['git t' args...]\nhds        = github-docs-snapshot\nhpr        = hub pr\nlff        = lf fetch\nlfl        = lf ls-files\nlfp        = lf push\nlfs        = lf status\npgr        = parse-github-url\npre        = gh pr edit\nprv        = gh pr view\nrbo        = g rebase --onto\nrts        = g remove-trailing-spaces\ngabd       = g patch-branch-diff\ngabt       = g list-status UA\ngabu       = g list-status AU\ngace       = g add-core-excludes -g\ngach       = g all-commits %h\ngacm       = g add-and-commit-msg\ngadl       = !git --no-pager log --format=%ad\ngadt       = g attr-diff-type\ngaeg       = g add-core-excludes -g\ngael       = g add-core-excludes\ngafp       = g amend-force-push\ngage       = g add-core-excludes -g\ngagi       = g add-global-ignore\ngamr       = g add-mirror-remote\ngap.       = g add -p .\ngapf       = g amend-force-push\ngapp       = g apply\ngapr       = g apply -R\ngaps       = g allow-pushes\ngapu       = g add -p -u\ngar0       = g apply -R -p0\ngarc       = g add-rebase-continue\ngarn       = g add-rebase-continue-no-edit\ngatd       = g attr-diff-type\ngau.       = g add -u .\ngauf       = g add -uf\ngaup       = g add -u -p\ngaus       = !git add -u \u0026\u0026 git status\ngaut       = g author\ngawt       = g amend-worktree\ngbcc       = g copy-branch-checkout\ngbdf       = g branch -D\ngbeb       = git bisect-earliest-bad\ngber       = g be -r\ngbfc       = g branch-reset -c\ngbfp       = git_branch_force_parent\ngbhi       = g blob-hash -i\ngbhs       = g blob-hash -s\ngblg       = git bisect-latest-good\ngblr       = g head-before-last-rebase\ngbls       = g local-branch-shas\ngbmv       = g branch -m\ngbno       = !gn branch --format '%(refname:short)' --list\ngbnr       = !gn branch --format '%(refname:short)' -r --list\ngbpa       = g branch-points-at\ngbre       = g be -r\ngbrg       = !git-branches.py -r\ngbrh       = g branch-reset\ngbrm       = g list-status DD\ngbrr       = g bisect-reverse-run\ngbrs       = g branch-reset\ngbru       = g branch-reset-upstream\ngbsb       = g bisect bad\ngbsg       = g bisect good\ngbsh       = g bisect-head\ngbsl       = g bisect log\ngbsr       = g bisect run\ngbss       = g bisect start\ngbsx       = g bisect reset\ngby0       = g body HEAD\ngby1       = g body HEAD@{1}\ngby2       = g body HEAD@{2}\ngby3       = g body HEAD@{3}\ngbyp       = g body HEAD^\ngcaa       = g commit -a --amend\ngcae       = g commit --allow-empty\ngcaf       = g commit -aF-\ngcam       = g commit -a -m\ngcan       = g commit --amend --no-edit\ngcap       = g commit-push\ngcbc       = g copy-branch-checkout\ngcbh       = g commits-behind\ngcbn       = g commit-basename\ngccb       = g commit-body\ngccd       = git_clone_and_cd\ngcdc       = g config-diff-command\ngcdg       = g config-diff-command -g\ngcdr       = g config --global clone.defaultRemoteName\ngcds       = g config diff.submodule\ngcdt       = g config-diff-command -t\ngcdu       = g config-diff-command -u\ngcef       = g config --global --get-all core.excludesfile\ngcfa       = g config --add\ngcfd       = g config --unset\ngcfi       = g config --get-all include.path\ngcfl       = g config --get-all\ngcfp       = g cat-file -p\ngcfs       = g config --list\ngcft       = g cat-file -t\ngcfu       = g config --unset\ngcga       = g config --add --global\ngcgd       = g config --unset --global\ngcgg       = g config --global --get-all\ngcgi       = g config --get-all --global include.path\ngcgl       = g config --get-all --global\ngcgs       = g config --list --global\ngcgu       = g config --unset --global\ngchf       = g show-head-file\ngciv       = g check-ignore -v\ngclb       = g clone --bare\ngcln       = g clone-and-cd\ngcmb       = g commit-body\ngcmf       = g commit -F-\ngcmp       = g commit-multiple-parents\ngcmt       = !git-commit-and-tag.sh\ngcnb       = g commit-body --amend\ngcne       = g commit --no-edit\ngcnf       = g commit --amend -F-\ngcnm       = g commit --amend -m\ngco-       = g checkout --\ngcob       = g checkout-b\ngcof       = g checkout -f\ngcoh       = g checkout HEAD --\ngcom       = g checkout main\ngcon       = g checkout --no-recurse-submodules\ngcoo       = g checkout --ours --\ngcop       = g checkout-previous-branch\ngcor       = g checkout --recurse-submodules\ngcot       = g checkout --theirs --\ngcow       = g checkout-worktree\ngcp1       = g cherry-pick -m1\ngcp2       = g cherry-pick -m2\ngcpa       = g cherry-pick --abort\ngcpc       = g cherry-pick --continue\ngcpd       = g config push.default\ngcph       = g cherry-pick-head\ngcpi       = g cherry-pick-preserve-committer-info\ngcpm       = g commit-push -m\ngcpn       = g cherry-pick -n\ngcpp       = g commit-push-parents\ngcps       = g cherry-pick --skip\ngcrb       = g checkout-and-rebase\ngcrh       = g commit-rebase-head\ngcs3       = g check-s3-buckets\ngcsb       = . git-clone-single-branch\ngcsp       = g set-parents\ngctg       = g config-diff-command -tg\ngctp       = g cat-file -p\ngctr       = g commit-tree-reset\ngctu       = g config-diff-command -tu\ngcua       = g config --unset-all\ngcug       = g config --unset --global\ngcwt       = g checkout-worktree\ngdbm       = g config --global init.defaultBranch main\ngdbr       = g diff-branch-reflog\ngdbt       = g list-status UD\ngdbu       = g list-status DU\ngdc-       = g diff --cached --\ngdcp       = g diff --cached --submodule=diff\ngdcq       = g diff --cached --quiet\ngdcs       = g diff --stat --cached\ngdcw       = g diff --cached -w\ngddf       = g diff-filter\ngdeq       = g diff --exit-code --quiet\ngdex       = g diff --exit-code\ngdfm       = g diff-filter M\ngdfr       = g default-remote\ngdft       = g difftool\ngdh1       = g diff HEAD^..HEAD\ngdh2       = g diff HEAD^2..HEAD\ngdhw       = g diff -w HEAD\ngdir       = g rev-parse --git-dir\ngdma       = g diff-then-maybe-add\ngdmb       = g delete-merged-branches\ngdno       = g diff --name-only\ngdnp       = g config diff.noprefix\ngdns       = g diff --name-status\ngdop       = gist-dir -op\ngdp1       = g diff-vs-parent 1\ngdp2       = g diff-vs-parent 2\ngdpg       = g config --global diff.noprefix\ngdph       = g diff HEAD^..HEAD\ngdpt       = g config diff.noprefix true\ngdpu       = g config --unset diff.noprefix\ngdqc       = g diff --quiet --cached\ngdqe       = g diff --exit-code --quiet\ngdrb       = g remote-default-branch\ngdrn       = g default-remote -n\ngdrt       = g default-remote\ngdrv       = g default-remote -v\ngds1       = !git --no-pager dates -1 --date=iso\ngdsc       = g diff --stat --cached\ngdsd       = g diff --submodule=diff\ngdsh       = g diff --stat HEAD\ngdsl       = g diff --submodule=log\ngdsm       = g config --global diff.submodule\ngdsp       = g diff --stat HEAD^\ngdss       = g diff --submodule=short\ngdsu       = g diff-stat-parent\ngdsw       = g diff --stat -w\ngdt1       = g details -1\ngdtc       = g diff-theirs-conflicting\ngdth       = g diff-theirs\ngdtl       = g details\ngdtp       = g diff-tree -p\ngdts       = g dates\ngdw-       = g diff -w --\ngdwc       = g diff -w --cached\ngdwh       = g diff -w HEAD\ngdws       = g diff -w --stat\ngdxc       = g diff-x -c\ngdxr       = g diff-x -R\ngdxw       = g diff-x -w\ngeav       = git_expand_alias -v\ngecm       = g edit-commit -m\ngecn       = g edit-commit -n\ngecp       = g edit-commit -p\ngecr       = g edit-commit -r\ngecx       = g edit-commit -x\ngefa       = g config --global --add core.excludesfile\ngefu       = g config --global --unset-all core.excludesfile\ngfd1       = g fetch-x --depth 1\ngfd2       = g fetch-x --depth 2\ngfd3       = g fetch-x --depth 3\ngfer       = g for-each-ref\ngfes       = g submodule foreach --recursive --quiet\ngfip       = g config --get-all include.path\ngfm1       = !git --no-pager log-1-format\ngfnp       = g find-prefix\ngfnr       = g find-only-remote\ngfns       = g find-suffix\ngfor       = g fetch-x --tags --recurse-submodules origin\ngfpr       = g fetch-x --prune\ngfro       = g fetch-x --tags --recurse-submodules origin\ngfru       = g fetch-x --tags --recurse-submodules u\ngfta       = g fetch-x --tags --all\ngftd       = g filter-to-dir\ngftf       = g fetch-x --tags -f\ngfua       = g fixup-author\ngfue       = g config user.email\ngfun       = g config user.name\ngfur       = g fetch-x --tags --recurse-submodules u\nggaa       = g graph-all -a\nggad       = g graph -A\nggaf       = g config --global core.attributesfile\nggal       = g graph-all -l\nggau       = g author\nggcd       = g get-committer-date\nggcf       = g config --global --get-all include.path\nggdb       = g config --global init.defaultBranch\nggdr       = g config --global clone.defaultRemoteName\nggdy       = gh gist delete --yes\nggef       = g config --global --get-all core.excludesfile\ngggi       = g global-gitignore\ngghu       = g graph -u HEAD\nggid       = g get-id\nggif       = g config --global core.excludesfile\nggig       = g config --global core.excludesfile\nggip       = g config --get-all --global include.path\nggpi       = g grep --recurse-submodules -i\nggpl       = g grep --recurse-submodules -l\nggpn       = g grep --recurse-submodules -n\nggpp       = g grep --recurse-submodules -P\nggpq       = g grep -q\nggra       = g graph -a\nggrd       = g graph -d\nggre       = g graph -e\nggrh       = g graph HEAD\nggrl       = g graph -l\nggrn       = g graph -n\nggru       = g remote-get-url\nggue       = g config --global user.email\nggun       = g config --global user.name\nghaj       = gh api -H \"Accept: application/vnd.github+json\"\nghaq       = github_run_list.py -s in,q -a\nghaw       = github_run_list.py -aw\nghax       = gh api -X\nghbi       = g blob-hash -i\nghbs       = g blob-hash -s\nghby       = github_branches_yours\nghdr       = github_default_remote\nghds       = github-docs-snapshot\nghgc       = gh gist create\nghgd       = gh gist delete\nghge       = gh gist edit\nghgf       = github-gist-file.py\nghgl       = gh gist list\nghgu       = gh gist edit\nghip       = gh run list -s in_progress\nghiq       = github_run_list.py -s in,q\nghji       = gh_job_id\nghjl       = gh run view --log --job\nghju       = gh_job_url\nghlr       = gh_last_run_id\nghlw       = gh_last_workflow_run\nghnc       = g has-no-changes\nghoa       = github_open_actions\nghob       = gh repo view --web -b\nghoc       = github_open_web_commit\nghoj       = gh_open_job\nghol       = gh_open_last\nghon       = github_owner_name\nghor       = github_open_web_ref\nghos       = github_open_settings\nghow       = github-open-web.py\nghpj       = gh api -H \"Accept: application/vnd.github+json\"\nghpr       = github-pr.py\nghpx       = gh api -X\nghr1       = github_run_list.py -L1\nghra       = github_run_list.py -a\nghrb       = github_run_list.py\nghrc       = gh run cancel\nghrd       = gh_repo_description\nghrh       = gh run --help\nghri       = github_run_list.py -i\nghrl       = gh run list\nghrn       = github_default_remote\nghro       = gh_run_open\nghrp       = github_remote_path\nghrv       = gh run view\nghrw       = github_run_list.py -w\nghsd       = gh secret delete\nghsh       = g full-hash\nghss       = gh secret set\nghsu       = github_url_ssh\nghub       = github_unprotect_branch\nghui       = gh-upload-img.py\nghus       = github_url_ssh\nghuw       = github_url\nghvd       = gh variable delete\nghve       = gh_variables_eval\nghvg       = gh variable get\nghvs       = gh variable set\nghwl       = gh workflow list\nghwr       = github-workflows.py run\ngicc       = g is-clean-cached\ngidc       = g is-dirty-cached\ngifa       = g config --global --add include.path\ngipa       = g config --global --add include.path\ngipu       = g config --global --unset-all include.path\ngism       = g is-submodule\ngisr       = g is-repo\ngl1T       = g l1fT\ngl1f       = !git --no-pager log-1-format\ngl1l       = g log-oneline\ngl1r       = !git --no-pager log-1-format -r\ngl1t       = g l1fT\nglaf       = g ls-new-files\nglbl       = g local-branch-shas\nglbs       = g local-branch-shas\nglc1       = g list-changed | head -n 1\nglcc       = g diff --name-only --cached --diff-filter=M\nglcs       = g diff --name-only --cached --diff-filter=M\nglcu       = g diff --name-only --diff-filter=M\ngldc       = g diff --cached --name-only --diff-filter=D\nglds       = g diff --cached --name-only --diff-filter=D\ngldu       = g diff --name-only --diff-filter=D\nglf1       = !git --no-pager log-1-format\nglfu       = g remote-list-fetch-urls\nglgf       = g log-format\nglgg       = g log -S\nglgp       = g load-github-prs\nglgs       = g log --stat\nglhr       = g log-hash --reverse\nglim       = g list-mode -i ' M'\nglmm       = g list-mode ' M'\ngln1       = g list-n 1\ngln2       = g list-n 2\ngln3       = g list-n 3\ngln4       = g list-n 4\ngln5       = g list-n 5\ngln6       = g list-n 6\ngln7       = g list-n 7\ngln8       = g list-n 8\ngln9       = g list-n 9\nglnf       = g ls-new-files\nglno       = g log --name-only\nglns       = g log --name-status\nglnw       = g log --no-walk\nglob       = glab repo view --web -b\ngloj       = gitlab_open_jobs\nglol       = g log --oneline\nglow       = glab repo view --web\ngloz       = g ls-files --other --exclude-standard --directory --no-empty-directory -z\nglpb       = gitlab_protect_branch\nglpf       = g log -p --follow\nglpp       = g log -p --\nglpr       = g load-github-prs\nglpu       = g remote-list-push-urls\nglpw       = g log -p -w\nglrh       = !ls-remote --heads\nglrn       = gitlab_remote\nglrp       = gitlab_remote_path\nglrt       = !ls-remote --tags\nglsc       = g diff-tree --no-commit-id --name-only -r\nglsf       = g diff-tree --no-commit-id --name-only -r\nglso       = g ls-files --other --exclude-standard --directory --no-empty-directory\nglsr       = !ls-remote\nglst       = g log --stat\nglsu       = g list-unstaged\nglth       = g ls-tree HEAD\ngltn       = g ls-tree --name-only\ngltr       = g ls-tree -r\nglts       = g ls-tree --abbrev\nglub       = gitlab_unprotect_branch\ngluh       = gitlab_url\nglus       = gitlab_url_ssh\ngluw       = gitlab_url\nglws       = g log --follow --stat\nglzo       = g ls-files --other --exclude-standard --directory --no-empty-directory -z\ngmbo       = g merge-base --octopus\ngmbp       = g merge-base-parents\ngmbt       = g merge-base-tracked-branch\ngmff       = g merge --ff-only\ngmmb       = g merge-base-merge-head\ngmmh       = g merge-base-merge-head\ngmne       = g merge --no-edit\ngmnf       = g merge --no-ff\ngmnm       = g merge --no-edit -m\ngmsg       = !git --no-pager log -1 --format=%s\ngmtb       = g mount-branch\ngmun       = g merge upstream/HEAD --no-edit\ngnbl       = !git --no-pager branch-points-at\ngnbr       = !git --no-pager branch-points-at-r\ngndc       = g nd --cached\ngndh       = g nd HEAD\ngndn       = g nd --name-only\ngnfm       = gn log-format\ngngp       = gn grep --recurse-submodules\ngnlh       = !git --no-pager log-hash\ngnsh       = !git --no-pager show\ngobn       = !git_open_web_branch.py -n\ngobu       = !git_open_web_branch.py -u\ngobv       = !git_open_web_branch.py -v\ngpbd       = g patch-branch-diff\ngpbf       = g push-user-branch -f\ngpbn       = g push-user-branch -n\ngpdc       = g config push.default current\ngpdu       = g config push.default upstream\ngpfn       = g push -f -n\ngpfo       = g push -f origin\ngpft       = g push -f --tags\ngpfu       = g push -f u\ngpgc       = g config --global push.default\ngphf       = g push-head-to -f\ngphn       = g push-head-to -n\ngpht       = g push-head-to\ngphu       = g push-head-upstream\ngpie       = g sub\ngplr       = g pull --rebase\ngpls       = g pull --rebase --recurse-submodules\ngpnf       = g push -n -f\ngpno       = g push -n origin\ngpnt       = g push -n --tags\ngpnu       = g push -n upstream\ngpon       = g push -n origin\ngpot       = g push --tags origin\ngppa       = g commit-push-parents -a\ngppm       = g commit-push-parents -m\ngppr       = g push-parents\ngpps       = g push-parents\ngpsu       = g push --set-upstream\ngptf       = g push --tags -f\ngptn       = g push --tags -n\ngpto       = g push --tags origin\ngpts       = !git-parents.py\ngptu       = g push --tags upstream\ngpub       = g push-user-branch\ngpun       = g push -n upstream\ngput       = g push --tags upstream\ngrah       = g remote-add.py --https\ngrao       = g remote add origin\ngras       = g remote-add.py --ssh\ngrat       = g remote-add.py -i\ngrau       = g remote add u\ngrba       = g rebase --abort\ngrbb       = g rebase-branches\ngrbc       = g rebase --continue\ngrbd       = g rebase-dag.py\ngrbe       = g remote-branch-exists\ngrbh       = g rebase-head\ngrbi       = g rebase-inline\ngrbm       = g rebase-head-message\ngrbo       = g rebase --onto\ngrbp       = g rebase-parent\ngrbr       = g rebase -r\ngrbs       = g rebase --skip\ngrbu       = g rebase-undo\ngrci       = g reset-committer-rebase-head\ngrcp       = g remote-copy\ngrcr       = g reset-committer-rebase-head\ngrdb       = g remote-default-branch\ngrds       = g rebase-diff --stat\ngrel       = g relpath\ngrft       = g register-file-type\ngrgh       = g remote-default-branch\ngrgu       = g remote-get-url\ngrh1       = g reset-hard HEAD@{1}\ngrhh       = g reset --hard HEAD\ngrhl       = g pre-rebase-head-log-pretty\ngrhm       = g rebase-head-message\ngrhn       = g revert --no-edit HEAD\ngrhp       = g reset --hard HEAD^\ngrim       = g rebase -i master\ngrio       = g rebase -i --onto\ngrir       = g rebase -i -r\ngrit       = g rebase -i --root\ngrix       = g rebase -i -x\ngrla       = g rev-list --all\ngrlc       = g rev-list --count\ngrlh       = !git reflog | head\ngrlp       = g rev-list --parents\ngrls       = g reflog '--format=%C(green)%gd %C(yellow)%h %C(blue)%as %C(red)%an %C(auto)%gs'\ngrlt       = !git reflog | head -n 20\ngrmc       = g rm --cached\ngrmf       = g rm -f\ngrmp       = g remote-path\ngrmr       = g rm -r\ngrmu       = g rm-untracked\ngrmv       = g remote-rename\ngrne       = g revert --no-edit\ngrnh       = g revert --no-edit HEAD\ngrni       = g rebase-noninteractive\ngroc       = g reorder-commits\ngrpa       = g remote-branches-at\ngrph       = g rev-parse HEAD\ngrri       = g rebase -r -i\ngrrm       = g remote remove\ngrro       = g rebase -r --onto\ngrrs       = g reverse-reset\ngrs.       = g reset .\ngrsf       = g checkout HEAD --\ngrsh       = g remote-set-head\ngrsp       = g reset HEAD^\ngrss       = g reset --soft\ngrst       = g reflog --stat\ngrsu       = g remote-set-url\ngrtc       = g root-commits\ngrtg       = g register-file-type -g\ngrts       = g remove-trailing-spaces\ngrud       = g rebase-upstream-diff\ngruh       = g remote-url-to-https\ngrvl       = g rev-list\ngrvn       = g revert --no-edit\ngrvp       = g rev-parse\ngrvt       = g revert\ngrwa       = g rewrite-author\ngrwc       = g reword-commit\ngrwt       = g restore-worktree\ngrxa       = g rebase-x-amend\ngrxs       = g rebase-exec-step\ngrxx       = g rebase-exec-step\ngsac       = g submodule-auto-commit\ngsad       = g set-author-date\ngsaf       = g submodule add -f\ngsat       = g set-attr-type.py\ngsau       = g set-author\ngsbj       = !git --no-pager log -1 --format=%s\ngscc       = g submodule-count-commits\ngscd       = g set-committer-date\ngsch       = g show-cherry-pick-head\ngsci       = g set-committer-info\ngscn       = g set-committer-name\ngscp       = g show-cherry-pick-parent\ngsct       = g set-committer-date\ngscw       = g show-cherry-pick-head -w\ngsdb       = g set-default-branch-main\ngsdc       = !git status \u0026\u0026 git diff --cached\ngsdh       = !git status \u0026\u0026 git diff HEAD\ngsdm       = g set-attr-type.py -a diff,merge\ngsdr       = g config --global clone.defaultRemoteName\ngsds       = g set-dates\ngsdt       = g set-attr-type.py -a diff\ngsfe       = g submodule foreach\ngsfh       = g show-sha-file HEAD\ngsfq       = g submodule foreach --quiet\ngsfv       = g submodule foreach --recursive\ngsh1       = g show HEAD@{1}\ngsh2       = g show HEAD@{2}\ngsha       = g hash\ngshc       = g show-cherry-pick-head\ngshd       = g show --submodule=diff\ngshf       = g show-sha-file\ngshh       = g show-head\ngshl       = g show --submodule=log\ngshm       = !git --no-pager log -1 '--format=%h %s'\ngsho       = g squash-head-onto\ngshp       = g show HEAD^\ngshr       = g show-rebase-head\ngshs       = g show --stat\ngshw       = g show -w\ngsid       = g set-id\ngsie       = g set-id\ngsig       = g set-id -g\ngslg       = g submodule-log\ngsln       = g show-local-names\ngsma       = g submodule add --quiet\ngsmc       = g submodule-commits\ngsmd       = g submodule deinit\ngsmf       = g submodule foreach --recursive --quiet\ngsmg       = g submodule-log\ngsmh       = g submodule-sha\ngsmi       = g submodule init\ngsml       = g submodule foreach --quiet --recursive 'echo $displaypath'\ngsmn       = g submodule foreach --quiet 'echo $name'\ngsmp       = g submodule foreach --quiet --recursive 'echo $displaypath'\ngsmr       = !git reset . \u0026\u0026 git submodule update --recursive\ngsms       = g submodules\ngsmt       = g set-attr-type.py -a merge\ngsmu       = g submodule update --recursive\ngsnl       = g show-local-names\ngsno       = !git --no-pager log -1 --format= --name-only\ngsnr       = g show-remote-names\ngsns       = !git --no-pager log -1 --format= --name-status\ngsp1       = g stash pop 'stash@{1}'\ngsp2       = g stash pop 'stash@{2}'\ngsp3       = g stash pop 'stash@{3}'\ngsp4       = g stash pop 'stash@{4}'\ngsp5       = g stash pop 'stash@{5}'\ngspf       = g safe-push-force\ngsps       = g set-parents\ngsrc       = g submodule-rebase-continue.py\ngsrh       = g show-rebase-head\ngsrl       = g submodule-rebase-log.py\ngsrn       = g show-remote-names\ngsrp       = g show-rebase-parent\ngsrs       = !git reset . \u0026\u0026 git submodule update --recursive \u0026\u0026 git status\ngsru       = g remote-set-url\ngsrv       = g serve\ngsrw       = g show-rebase-head -w\ngssf       = g show-sha-file\ngssh       = g submodule-shas\ngssk       = g stash save -k\ngssp       = g stash show -p\ngssq       = g symbolic-ref --short -q\ngsss       = g submodule-set-sha\ngsst       = g submodule-shas\ngstd       = g stash drop\ngsth       = g stash show\ngsto       = gh gist create --web -d\ngstp       = g status --porcelain\ngsts       = g status -s\ngsuf       = g submodule update --recursive -f\ngsuq       = g submodule update --quiet\ngsur       = g submodule update --recursive\ngsus       = g submodule update\ngsw0       = g stash show -p 'stash@{0}'\ngsw1       = g stash show -p 'stash@{1}'\ngsw2       = g stash show -p 'stash@{2}'\ngsw3       = g stash show -p 'stash@{3}'\ngswc       = g show-cherry-pick-head -w\ngswr       = g show-rebase-head -w\ngsyq       = g symbolic-ref -q\ngsyr       = g symbolic-ref\ngsys       = g symbolic-ref --short\ngszh       = g size -H\ngszs       = g sizes\ngtch       = g commit --amend --no-edit\ngtfi       = g tree-full-id\ngtid       = gist-id\ngtpa       = g tag --points-at\ngtr0       = g empty-tree\ngtrh       = g ls-tree HEAD\ngtrp       = g ls-tree HEAD^\ngtrr       = g ls-tree -r\ngtsz       = g total-size\ngtwh       = g throw-head\ngtwp       = g throw.py HEAD^\nguat       = g set-attr-type.py -u\ngudb       = g update-default-branch\ngudm       = g set-attr-type.py -u -a diff,merge\ngudt       = g set-attr-type.py -u -a diff\nguic       = g update-index --cacheinfo\ngumt       = g set-attr-type.py -u -a merge\ngune       = g user\ngurb       = g undo-rebase\ngusi       = g update-server-info\ngusr       = g user\ngxca       = \u003cgit repo dir\u003e ['git ca' args...]\ngxfa       = g config --global --add core.excludesfile\nhdss       = github-docs-snapshot -s\nhprq       = hub pull-request\ngaafp      = g amend-force-push -a\ngaapf      = g amend-force-push -a\ngacpc      = g add-and-cherry-pick-continue\ngadi1      = !git --no-pager log --format=%ad --date=iso -1\ngapfu      = g amend-force-push u\ngapp0      = g apply -p0\ngapr0      = g apply -R -p0\ngapu.      = g add -p -u .\ngarcn      = g add-rebase-continue-no-edit\ngaup.      = g add -u -p .\ngbcag      = git bisect-commits-ahead-good\ngbcbb      = git bisect-commits-behind-bad\ngbhis      = g blob-hash -is\ngbnor      = !gn branch --format '%(refname:short)' -r --list\ngbpar      = g branch-points-at-r\ngbruc      = g branch-reset-upstream-checkout\ngbssr      = g bisect-start-run\ngbyh1      = g body HEAD@{1}\ngcaaf      = g commit -a --amend -F-\ngcaam      = g commit -a --amend -m\ngcaan      = g commit -a -u --amend --no-edit\ngcaap      = g commit-push -a\ngcaem      = g commit --allow-empty -m\ngcamf      = g commit -aF-\ngcamt      = !git-commit-and-tag.sh -a\ngcane      = g commit --amend --no-edit --allow-empty\ngcanm      = g commit -a --amend -m\ngcapm      = g commit-push -a -m\ngcarb      = g checkout-and-rebase\ngcbns      = g commit-basenames\ngccba      = g commit-body -a\ngcdcg      = g config-diff-command -g\ngcdgu      = g config-diff-command -gu\ngcdi1      = !git --no-pager log --format=%cd --date=iso -1\ngcdsd      = g config diff.submodule diff\ngcdsl      = g config diff.submodule log\ngcdtg      = g config-diff-command -tg\ngcefa      = g config --global --add core.excludesfile\ngcefu      = g config --global --unset-all core.excludesfile\ngcfaf      = g config core.attributesfile\ngcfda      = g config --unset-all\ngcfef      = g config core.excludesfile\ngcfia      = g config --add core.excludesfile\ngcfig      = g config core.excludesfile\ngcfis      = g config core.excludesfile\ngcfpd      = g config push.default\ngcfua      = g config --unset-all\ngcgaf      = g config --global core.attributesfile\ngcgda      = g config --unset-all --global\ngcgdb      = g config --global init.defaultBranch\ngcgdr      = g config --global clone.defaultRemoteName\ngcgds      = g config --global diff.submodule\ngcgef      = g config --global core.excludesfile\ngcgia      = g config --add --global core.excludesfile\ngcgif      = g config --global core.excludesfile\ngcgig      = g config --global core.excludesfile\ngcgis      = g config --global core.excludesfile\ngcgpd      = g config --global push.default\ngcgsd      = g config --global diff.submodule diff\ngcgsl      = g config --global diff.submodule log\ngcgua      = g config --unset-all --global\ngcmab      = g commit-body -a\ngcmba      = g commit-body -a\ngcmfa      = g commit -aF-\ngcmfn      = g commit -F- --amend\ngcmtf      = !git-commit-and-tag.sh -f\ngcmtr      = g commit-tree\ngcnne      = g commit --amend --no-edit\ngcobt      = g checkout-b-t\ngcoco      = g conflicting-checkout-ours\ngcoct      = g conflicting-checkout-theirs\ngcorb      = g checkout-and-rebase\ngcorf      = g checkout --recurse-submodules -f\ngcpam      = g commit-push -a -m\ngcpau      = g copy-author\ngcpdc      = g config push.default current\ngcpdd      = g config --unset push.default\ngcpdu      = g config push.default upstream\ngcppa      = g commit-push-parents -a\ngcppc      = g cherry-pick-preserve-committer-info\ngcppm      = g commit-push-parents -m\ngcpsh      = g show-cherry-pick-head\ngcrbh      = g commit-rebase-head\ngctgs      = g current-tags\ngctgu      = g config-diff-command -tgu\ngcuga      = g config --unset-all --global\ngdcno      = g diff --name-only --cached\ngdcss      = g diff --cached --submodule=short\ngdcw-      = g diff --cached -w --\ngdgif      = g diff-git.py\ngdmbr      = g delete-merged-branches --remote\ngdnoa      = g diff-name-only-all\ngdnoc      = g diff --name-only --cached\ngdnpg      = g config --global diff.noprefix\ngdnpt      = g config diff.noprefix true\ngdnpu      = g config --unset diff.noprefix\ngdptg      = g config --global diff.noprefix true\ngdpug      = g config --global --unset diff.noprefix\ngdsca      = g describe --all\ngdsml      = g config --global diff.submodule log\ngdsph      = g diff --stat HEAD^..HEAD\ngdthc      = g diff-theirs-conflicting\ngdts1      = !git --no-pager dates -1\ngdxcr      = g diff-x -cR\ngdxrr      = g diff-x -r\ngdxwr      = g diff-x -wR\ngecnp      = g edit-commit -n -p\ngecnx      = g edit-commit -n -x\ngecpm      = g edit-commit -p -m\ngecrn      = g edit-commit -r -n\ngecrp      = g edit-commit -r -p\ngecxn      = g edit-commit -n -x\ngfune      = g user\nggaal      = g graph-all -a -l\nggadh      = g graph -A HEAD\nggala      = g graph-all -l -a\nggcdn      = gh gist create -d\nggcfa      = g config --global --add include.path\nggdbm      = g config --global init.defaultBranch main\nggefa      = g config --global --add core.excludesfile\ngggid      = g get-id -g\nggidg      = g get-id -g\nggr10      = g gr -n 10\nggrac      = g graph -ac\nggrad      = g graph -a -d\nggrdh      = g graph -d HEAD\nggrdn      = g graph -d -n\nggrec      = g graph -e -C\nggrhu      = g graph -u HEAD\nggsid      = g set-id -g\nggsie      = g set-id -g\nghbis      = g blob-hash -is\nghblr      = g head-before-last-rebase\nghdru      = gh repo set-default --unset\nghdss      = github-docs-snapshot -s\nghgcd      = gh gist create --web -d\nghgdr      = gh repo set-default --view\nghgdy      = gh gist delete --yes\nghjis      = gh_job_ids\nghlwr      = gh_last_workflow_run\nghoby      = github_open_branches_yours\nghowb      = gh repo view --web -b\nghowd      = github-open-web.py -d\nghowg      = github-open-web.py -g\nghpbs      = github_protected_branches\nghprc      = github-pr.py clone\nghprd      = github-pr.py diff\nghpri      = github-pr.py init\nghprl      = github-pr.py pull\nghpro      = github-pr.py open\nghprp      = github-pr.py push\nghprr      = gh pr\nghpru      = github-pr.py upload\nghr1b      = github_run_list.py -L1 -b\nghraj      = gh_run_and_job\nghrbb      = github_run_list.py -b\nghri1      = github_run_list.py -iL1\nghrib      = github_run_list.py -ib\nghrlh      = gh run list --help\nghrls      = gh_runners_ls\nghroi      = gh_runners_offline_ids\nghrol      = gh_runners_offline_list\nghrot      = gh_runners_offline_list -t\nghrrm      = gh_runners_rm\nghrvh      = gh run view --help\nghrvj      = gh run view --job\nghrvl      = gh run view --log\nghrvu      = gh_run_view_url\nghrvw      = gh run view --web\nghsdb      = github_set_default_branch\nghsdr      = github_set_default_remote\nghubn      = github_unprotect_branch -n\nghudr      = gh repo set-default --unset\nghwip      = gh run list -s in_progress\nghwrc      = gh_workflow_run_current_branch\ngl1fT      = !git --no-pager log-1-format T\ngl1ft      = !git --no-pager log-1-format T\ngladr      = g log --name-status --diff-filter=ADR\nglapi      = gitlab_api\nglgf1      = !git --no-pager log-1-format\nglggp      = g log -p -S\nglgpg      = g log -p -S\nglmim      = g list-mode -i ' M'\ngln20      = g list-n 20\nglobj      = gitlab_open_jobs\nglowb      = glab repo view --web -b\nglpbn      = gitlab_protect_branch -n\nglpwf      = g log -p -w --follow\nglrpe      = gitlab_remote_path -e\nglsdb      = gitlab_set_default_branch\nglsrh      = !ls-remote --heads\nglsrt      = !ls-remote --tags\nglthn      = g ls-tree -r --name-only HEAD\nglthr      = g ls-tree -r HEAD\ngltrn      = g ls-tree -r --name-only\ngltsh      = g ls-tree --abbrev HEAD\nglubn      = gitlab_unprotect_branch -n\ngmmne      = g merge main --no-edit\ngmnef      = g merge --no-edit --no-ff\ngmnnf      = g merge --no-edit --no-ff\ngmtnb      = g mergetool -y -t nbdime\ngmune      = g merge upstream/HEAD --no-edit\ngnshs      = !git --no-pager show\ngobnu      = !git_open_web_branch.py -nu\ngobnv      = !git_open_web_branch.py -nv\ngpdcg      = g config --global push.default current\ngpdug      = g config --global push.default upstream\ngpftn      = g push -f --tags -n\ngpgcc      = g config --global push.default current\ngpgcu      = g config --global push.default upstream\ngphfn      = g push-head-to -f -n\ngphuf      = g push-head-upstream -f\ngphun      = g push-head-upstream -n\ngplrs      = g pull --rebase --recurse-submodules\ngppam      = g commit-push-parents -a -m\ngprhl      = g pre-rebase-head-log-pretty\ngptfn      = g push --tags -f -n\ngpubf      = g push-user-branch -f\ngpubn      = g push-user-branch -n\ngrbci      = g rebase-preserve-commit-info -i\ngrbhm      = g rebase-head-message\ngrbmb      = g rebase-merge-base\ngrbor      = g rebase -r --onto\ngrbot      = g rebase-onto\ngrbro      = g rebase -r --onto\ngrbud      = g rebase-upstream-diff\ngrhlh      = g pre-rebase-head-log\ngrhp2      = g reset --hard HEAD~2\ngrhsl      = g rebase-head-submodule-log\ngrlfp      = g rev-list-first-parents\ngrlp1      = g rev-list --parents -n1\ngrlrb      = g revert-last-rebase\ngrmcf      = g rm --cached -f\ngrmlo      = g rm-untracked\ngrmpe      = g remote-path -e\ngrmrc      = g rm -r --cached\ngrmut      = g rm-untracked\ngrneh      = g revert --no-edit HEAD\ngrnin      = g rebase-noninteractive -n\ngrocn      = g reorder-commits -n\ngrrio      = g rebase -r -i --onto\ngrsh1      = g reset HEAD@{1}\ngrsh2      = g reset HEAD@{2}\ngrsha      = g remote-set-head-auto\ngrshw      = g remote show\ngrsp2      = g reset HEAD~2\ngrsp3      = g reset HEAD~3\ngrssm      = !git reset . \u0026\u0026 git submodule update --recursive \u0026\u0026 git status\ngrssp      = g reset --soft HEAD^\ngrtch      = g root-commits HEAD\ngrvne      = g revert --no-edit\ngrvph      = g rev-parse HEAD\ngrvth      = g revert HEAD\ngrvtn      = g revert --no-edit\ngrxsa      = g rebase-exec-step -a\ngrxxa      = g rebase-exec-step -a\ngsaca      = g submodule-auto-commit -a\ngsacm      = g submodule-auto-commit -m\ngsacn      = g submodule-auto-commit -n\ngsadr      = !git --no-pager log -1 --format= --diff-filter=ADR --name-status\ngsard      = !git --no-pager log -1 --format= --diff-filter=ADR --name-status\ngsaut      = g set-author\ngscpw      = g show-cherry-pick-parent -w\ngsdbm      = g set-default-branch-main\ngsdmt      = g set-attr-type.py -a diff,merge\ngsdru      = g config --global clone.defaultRemoteName u\ngsgid      = g set-id -g\ngshch      = g show-cherry-pick-head\ngshcp      = g show-cherry-pick-parent\ngshcw      = g show-cherry-pick-head -w\ngshfp      = g show-sha-file HEAD^\ngshhf      = g show-head-file\ngshmb      = g show-merge-base\ngshmh      = g show-merge-head\ngshmr      = g show --diff-merges=remerge\ngshms      = g show --diff-merges=separate\ngshno      = g show --name-only\ngshns      = g show --name-status\ngshoc      = g show-original-commit\ngshoh      = g show-original-head\ngshon      = g squash-head-onto -n\ngshp2      = g show HEAD~2\ngshp3      = g show HEAD~3\ngshrh      = g show-rebase-head\ngshrm      = g rebase-head-message\ngshrp      = g show-rebase-parent\ngshrw      = g show-rebase-head -w\ngshsl      = g show --submodule=log\ngshss      = g show --submodule=short\ngshwc      = g show-cherry-pick-head -w\ngsidg      = g set-id -g\ngsieg      = g set-id -g\ngsmab      = g submodule add -b\ngsmac      = g submodule-auto-commit\ngsmaf      = g submodule add -f\ngsmcc      = g submodule-count-commits\ngsmid      = g submodule-sha\ngsmir      = !git submodule init \u0026\u0026 git submodule update --recursive\ngsmiu      = g submodule update --init --recursive\ngsmlf      = g submodule foreach --quiet --recursive 'echo $name $displaypath $sha1'\ngsmlg      = g submodule-log\ngsmlp      = g submodule foreach --quiet --recursive 'echo $name $displaypath $sha1'\ngsmrs      = !git reset . \u0026\u0026 git submodule update --recursive \u0026\u0026 git status\ngsmsh      = g submodule-sha\ngsmst      = g submodule status\ngsmuf      = g submodule update --recursive -f\ngsmui      = g submodule update --init --recursive\ngsmuq      = g submodule update --quiet\ngsmur      = g submodule update --init --recursive\ngsmus      = g submodule update\ngspfo      = g safe-push-force origin\ngspfu      = g safe-push-force upstream\ngsqsq      = g squash-sequence\ngsrlv      = g submodule-rebase-log.py -v\ngsrpw      = g show-rebase-parent -w\ngsshc      = g ssh-command\ngsurq      = g submodule update --recursive --quiet\ngsysq      = g symbolic-ref --short -q\ngtwhn      = g throw-head -n\ngtwp2      = g throw.py HEAD~2\ngtwp3      = g throw.py HEAD~3\ngxcam      = \u003cgit repo dir\u003e ['git cam' args...]\ngxcap      = \u003cgit repo dir\u003e ['git cap' args...]\ngaapfu     = g amend-force-push -a u\ngcaane     = g commit -a -u --amend --no-edit --allow-empty\ngcaapm     = g commit-push -a -m\ngcamtf     = !git-commit-and-tag.sh -a -f\ngcanea     = g commit --amend --no-edit --allow-empty --author\ngcfefs     = g config --get-all core.excludesfile\ngcfigs     = g config --get-all core.excludesfile\ngcgdsd     = g config --global diff.submodule diff\ngcgdsl     = g config --global diff.submodule log\ngcgigs     = g config --global --get-all core.excludesfile\ngcgpdc     = g config --global push.default current\ngcgpdu     = g config --global push.default upstream\ngcmfan     = g commit -aF- --amend\ngcmtrr     = g commit-tree-reset\ngcococ     = g conflicting-checkout-ours-and-continue\ngcoctc     = g conflicting-checkout-theirs-and-continue\ngcppam     = g commit-push-parents -a -m\ngdnpgt     = g config --global diff.noprefix true\ngdnpgu     = g config --global --unset diff.noprefix\ngdxcrr     = g diff-x -cr\ngdxwrr     = g diff-x -wr\ngecrpn     = g edit-commit -r -p -n\ngfiles     = g diff-tree --no-commit-id --name-only -r\ngfiles     = g diff-tree --no-commit-id --name-only -r\nggracd     = g graph -ac -d\nggracl     = g graph -ac -l\ngh_job     = gh_run_and_job \"$@\" | jq \".job\"\nghblrs     = g head-before-last-rebase %h\nghossa     = github_open_settings_secrets_actions\nghprpF     = github-pr.py push -F\nghprpg     = github-pr.py push -g\nghprpo     = github-pr.py push -o\nghri1b     = github_run_list.py -iL1 -b\nghrvjs     = gh_run_view_jobs\nghrvlj     = gh run view --log --job\ngithub     = git-helpers/github/github\ngphufn     = g push-head-upstream -f -n\ngprhlh     = g pre-rebase-head-log\ngprnts     = !git-parents.py\ngrbcia     = g rebase-preserve-commit-info\ngrbori     = g rebase -r -i --onto\ngrbrio     = g rebase -r -i --onto\ngrcrbh     = g reset-committer-rebase-head\ngrmlso     = g rm-untracked\ngrvneh     = g revert --no-edit HEAD\ngsacam     = g submodule-auto-commit -am\ngsacan     = g submodule-auto-commit -an\ngsacmr     = g submodule-auto-commit -mr\ngshadr     = g show --diff-filter=ADR --name-status\ngshwch     = g show-cherry-pick-head -w\ngsmsha     = g submodule-sha\ngsmshs     = g submodule-shas\ngsmurf     = g submodule update --init --recursive -f\ngsmurq     = g submodule update --recursive --quiet\ngsmurr     = g submodule update --recursive --rebase\ngxcapm     = \u003cgit repo dir\u003e ['git capm' args...]\nissues     = git-helpers/github/issues\nggracle    = g graph -ac -l -e\ngist-id    = git-helpers/gist/gist-id  # If exactly one Git remote is a gist URL, return its ID. Otherwise, check whether `github_default_remote` is a gist URL and return its ID. Otherwise, error.\ngsmurrr    = g submodule update --recursive --rebase --remote\ngist-dir   = git-helpers/gist/gist-dir\nrepos.py   = git-helpers/github/repos.py\ngh_job_id  = gh_last_job \"$@\" | jq -r .databaseId\nls-remote  = git-helpers/remote/ls-remote\ngh_job_ids = [run_id [job_idx]]\ngh_job_url = gh_job \"$@\" | jq -r .url\ngithub_url = gh repo view --json url \"$@\" | jq -r .url\ngitlab_api\ngitlab_url = gh repo view --json url | jq -r .url\ngh_open_job = open \"$(gh_job_url \"$@\")\"\ngh_run_open\ngit_set_sha = export sha=\"$(git sha)\"\nclone_org.py = git-helpers/github/clone_org.py\ngh_open_last\ngithub-pr.py = git-helpers/github/github-pr.py  # Helper for printing to stderr\ngh_runners_ls\ngh_runners_rm\ngit_dir_curry = \u003cexported_function_name\u003e \u003cgit-git-dir_param1\u003e \u003cgit-git-dir_param2\u003e ...\ngitlab_remote = git-find-only-remote gitlab.com\nhash-files.py = git-helpers/github/hash-files.py  # Standalone script that mimics GitHub Actions' hashFiles helper\ninit-instance = git-helpers/config/init-instance  # Source this once on new nodes, e.g. after installing dotfiles umbrella repo:\ngh_last_run_id = gh run list -L 1 --json databaseId | jq -r .[0].databaseId\ngh_run_and_job = [run_id [job_idx]]\ngithub-api-url = git-helpers/submodule/github-api-url\ngithub-web-url = git-helpers/submodule/github-web-url\ngithub_url_ssh = gh repo view --json sshUrl | jq -r .sshUrl\ngitlab_url_ssh = gh repo view --json sshUrl | jq -r .sshUrl\ngh_run_view_url = ghrv \"$@\" --json url | jr .url\ngh-upload-img.py = git-helpers/github/gh-upload-img.py  # Import from local library\ngh_run_view_jobs = gh run view \"$@\" --json jobs\ngit_clone_and_cd\ngit_expand_alias = [-v] \u003calias\u003e\ngithub_maybe_api\ngitlab_maybe_api\ngitlab_open_jobs\nparse-github-url = git-helpers/github/parse-github-url\ngh_variables_eval = ghv --json name,value | jr '.[] | .name+\"=\"+.value'\ngithub_owner_name = [remote name]\ngithub-open-web.py = git-helpers/github/github-open-web.py  # Add parent directory to path to import util modules\ngithub_remote_pathNo manual entry for git-remote-path\n = git remote-path \"$@\" \"$(github_default_remote)\"\ngithub_run_list.py = git-helpers/github/github_run_list.py  # Wrapper around `gh run list`, supporting:\ngitlab_remote_pathNo manual entry for git-remote-path\n = git remote-path \"$@\" \"$(gitlab_remote)\"\ninit-mirror-remote = git-helpers/remote/init-mirror-remote\ngh_repo_description = gh repo view --json description \"$@\" | jq -r .description\ngithub-gist-file.py = git-helpers/github/github-gist-file.py\ngithub-workflows.py = git-helpers/github/github-workflows.py\ngithub_open_actions = open \"$(github_url)/actions\"\ngithub_open_web_ref = [ref]\ngh_last_workflow_run = gh run list -L 1 --json databaseId | jq -r .[0].databaseId\ngithub-docs-snapshot = git-helpers/github/github-docs-snapshot\ngithub_open_settings = open \"$(github_url)/settings\"\npop_commit_from_file = git-helpers/cherry-pick/pop_commit_from_file  # Cherry-pick a commit from a file; if successful, remove it from the file.\ngithub_branches_yours\ngithub_default_remote\ngitlab_protect_branch\ngh_runners_offline_ids\ngit_open_web_branch.py = git-helpers/remote/git_open_web_branch.py\ngithub-commit-api-urls = git-helpers/submodule/github-commit-api-urls\ngithub-commit-web-urls = git-helpers/submodule/github-commit-web-urls\ngithub_open_web_commit = [commit]\ngh_runners_offline_list\ngit_branch_force_parent = \u003cbranch\u003e\ngithub_unprotect_branch\ngitlab_unprotect_branch\ngithub_protected_branches = [remote]\ngithub_set_default_branch\ngithub_set_default_remote = [remote name]\ngitlab_set_default_branch\ngithub_open_branches_yours\ngh_workflow_run_current_branch\ngithub-submodule-check-commits = git-helpers/submodule/github-submodule-check-commits\ngithub_parse_remote_and_branch = \u003ccaller name\u003e [-n] [remote] \u003cbranch\u003e\ngitlab_parse_remote_and_branch = \u003ccaller name\u003e [-n] [remote] \u003cbranch\u003e\ngithub_open_settings_secrets_actions = open \"$(github_url)/settings/secrets/actions\"\n1345 completions present before and after installing git-helpers\n1668 completions added by installing git-helpers (0 removed, 3013 total)\n```\n\u003c/details\u003e\n\n### Alias histogram \u003ca id=\"aliases\"\u003e\u003c/a\u003e\nHere's a recent snapshot of my most-used Git aliases (annotated with their expansions):\n```bash\nhistory | awk '{print $2}' | grep '^g' | sort | uniq -c | sort -rn | head -n 30\n#    2776 gst     # `git status -uno` (tracked files only)\n#    2734 gd      # `git diff`\n#    2092 ggr     # `git graph`: wrapper for `git log --graph`, with nice colorization and formatting options\n#    2062 gs      # `git status`\n#     626 gcam    # `git commit -am`\n#     587 gp      # `git push-x`: `push` to one or more remotes (comma-delimited)\n#     538 gap     # `git add -p` (add interactively, in chunks)\n#     519 gcm     # `git commit -m`\n#     470 gsh     # `git show`\n#     463 gco     # `git checkout`\n#     448 ghh     # `git help`\n#     433 gb      # `git branches` (pretty-print Git branches)\n#     425 gr      # `git remote -vv`\n#     404 gau     # `git add -u` (restrict to already-tracked files)\n#     402 gdc     # `git diff --cached` (\"staged\" changes only)\n#     376 gf      # `git fetch-x --tags`: fetch ≥1 remotes in parallel (comma-delimited), include tags\n#     370 gg      # `git graph-all` (graph all branches)\n#     242 gcaan   # `git commit --amend --no-edit`: squash uncommitted changes onto HEAD commit\n#     217 ggracl  # `git graph -a -c -l`: Git branch graph, displaying author and committer dates as relative times (e.g. \"3 days ago\")\n#     208 gcp     # `git cherry-pick`\n#     194 ga      # `git add`\n#     192 ggp     # `git grep --recurse-submodules`\n#     175 g       # `git`\n#     174 gpf     # `git push -f`\n#     131 ggrh    # `git graph HEAD` (Graph of HEAD commit, plus subsequent arg branches)\n#     118 gl      # `git ls-files`\n#     113 grb     # `git rebase`\n#     111 glg     # `git log -p --follow`, restricted to paths matching a substring argument\n#     109 garc    # `git-add-rebase-continue`: mark conflicted files resolved, continue rebase\n```\n\n[runsascoded/.rc]: https://github.com/runsascoded/.rc\n[git/git]: https://github.com/git/git\n[hammerlab/guacamole]: https://github.com/hammerlab/guacamole\n[TileDB-SOMA]: https://github.com/TileDB-Inc/TileDB-SOMA\n\n[`git reset-committer-rebase-head`]: rebase/git-reset-committer-rebase-head\n[`git-throw`]: rebase/git-throw.py\n[`git-rebase-preserve-commit-info`]: rebase/git-rebase-preserve-commit-info\n[`git-reorder-commits`]: rebase/git-reorder-commits\n[`git-graph`]: graph/git-graph\n[`git-graph-all`]: graph/git-graph-all\n[`git branches`]: branch/git-branches\n[`git remote-branches`]: branch/git-remote-branches\n[`git-commit-multiple-parents`]: commit/git-commit-multiple-parents\n[`git-set-author`]: commit/git-set-author\n[`git-set-author-date`]: commit/git-set-author-date\n[`git-set-committer-date`]: commit/git-set-committer-date\n[`git-set-id`]: config/git-set-id\n[`git-set-parents`]: commit/git-set-parents\n[`git-edit-commit`]: rebase/git-edit-commit\n[`git-rebase-diff`]: rebase/git-rebase-diff\n[`git-head-before-last-rebase`]: rebase/git-head-before-last-rebase\n[`git-diff-gif.py`]: diff/git-diff-gif.py\n[`git-diff-json.py`]: diff/git-diff-json.py\n[`github_run_list.py`]: github/github_run_list.py\n[`git-rebase-head`]: rebase/git-rebase-head\n[`git-cherry-pick-head`]: cherry-pick/git-cherry-pick-head\n[`git-show-rebase-head`]: rebase/git-show-rebase-head\n[`git-show-cherry-pick-head`]: cherry-pick/git-show-cherry-pick-head\n[`git-set-attr-type.py`]: config/git-set-attr-type.py\n\n[`github-pr.py`]: github/github-pr.py\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-williams%2Fgit-helpers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryan-williams%2Fgit-helpers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryan-williams%2Fgit-helpers/lists"}