{"owner":"Bash-it","repo":"bash-it","hasSkills":true,"totalSkillsCount":2,"totalTokensCount":4919,"categories":["claude-rule","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md","vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nBash-it is a collection of community Bash commands and scripts for Bash 3.2+, providing a framework for aliases, themes, plugins, and completions. It's structured as a modular system where components can be individually enabled or disabled.\n\n## Architecture\n\n### Core Components\n\n- **bash_it.sh**: Main entry point that initializes the framework\n- **lib/**: Core libraries providing utilities, logging, helpers, and appearance functions\n- **scripts/reloader.bash**: Component loader that sources enabled components\n- **install.sh**: Installation script with interactive and silent modes\n- **enabled/**: Symlinks to active components from available/ directories\n\n### Component Types\n\n1. **Aliases** (`aliases/available/`): Command shortcuts and convenience functions\n2. **Plugins** (`plugins/available/`): Extended functionality and integrations\n3. **Completions** (`completion/available/`): Tab completion definitions\n4. **Themes** (`themes/`): Prompt customizations and visual styles\n\n### Loading Order\n\n1. Libraries (except appearance)\n2. Global enabled directory\n3. Enabled aliases, plugins, completions\n4. Theme files (if BASH_IT_THEME is set)\n5. Custom files from BASH_IT_CUSTOM directory\n\n## Development Commands\n\n### Testing\n```bash\n# Run all tests using BATS (Bash Automated Testing System)\ntest/run\n\n# Run specific test suites\ntest/run test/bash_it test/completion test/plugins\n\n# Tests require git submodules to be initialized\ngit submodule init && git submodule update\n```\n\n### Linting and Code Quality\n\nThe project uses a gradual pre-commit system implementation via `clean_files.txt` allow-list:\n\n```bash\n# Run pre-commit hooks only on allow-listed clean files\n./lint_clean_files.sh\n\n# Run pre-commit hooks on all files (for testing new coverage)\npre-commit run --all-files\n\n# Manual shellcheck on bash files\nshellcheck **/*.bash\n\n# Format shell scripts\nshfmt -w **/*.bash\n```\n\n**Gradual Linting System**:\n- `clean_files.txt`: Allow-list of files/directories that pass all linting rules\n- `lint_clean_files.sh`: Runs pre-commit hooks only on allow-listed files\n- When modifying files NOT in `clean_files.txt`, ensure they pass linting before adding them to the allow-list\n- Before creating a PR, add newly cleaned files to `clean_files.txt` to expand coverage\n- This system allows gradual improvement of code quality across the large codebase\n\n**Vendor Directory Policy**:\n- Files in `vendor/` are treated as immutable external dependencies\n- Pre-commit hooks exclude vendor files via `.pre-commit-config.yaml` global exclude pattern\n- `clean_files.txt` does not include vendor shell scripts, only `.gitattributes`\n- CI and local linting will skip vendor files entirely\n\n### Component Management\n```bash\n# Enable/disable components\nbash-it enable alias git\nbash-it enable plugin history\nbash-it enable completion docker\n\n# Show available components\nbash-it show aliases\nbash-it show plugins  \nbash-it show completions\n\n# Search components\nbash-it search docker\n```\n\n## Key Configuration\n\n### Environment Variables\n- `BASH_IT`: Base directory path\n- `BASH_IT_THEME`: Active theme name\n- `BASH_IT_CUSTOM`: Custom components directory\n- `BASH_IT_LOG_PREFIX`: Logging prefix for debug output\n\n### File Structure Conventions\n- Available components: `{type}/available/{name}.{type}.bash`\n- Enabled components: `{type}/enabled/{name}.{type}.bash` (symlinks)\n- Custom components: `custom/{name}.bash`\n- Themes: `themes/{name}/`\n\n## Development Guidelines\n\n### Git Workflow\n- **NEVER commit directly to master branch**\n- Master should always stay in sync with `origin/master`\n- Always create a feature branch for new work: `git checkout -b feature/feature-name`\n- Keep feature branches focused on a single issue/feature\n- Create separate branches for separate features\n- Push feature branches with upstream tracking: `git push -u fork feature-branch-name`\n  - This allows manual pushes later with just `git push`\n  - Use `--force-with-lease` for rebased branches\n\n### Component Development\n- Use composure metadata: `about`, `group`, `author`, `example`\n- Follow naming convention: `{name}.{type}.bash`\n- Test components before submitting\n- Components should be modular and not conflict with others\n\n### Testing Components\n- Each component type has dedicated test files in `test/`\n- Use BATS framework for shell script testing\n- Test files follow pattern: `{component}.bats`\n\n### Code Standards\n- Use shellcheck for linting\n- Follow existing code style in the repository\n- Add appropriate metadata using composure functions\n- Components should handle missing dependencies gracefully\n- **Prefix sensitive commands with `command`** to bypass user aliases:\n  - `command mv` instead of `mv` (users may have `alias mv='mv -i'`)\n  - `command grep` instead of `grep` (users may have custom grep flags)\n  - `command rm` instead of `rm` (users may have `alias rm='rm -i'`)\n  - Apply to any command that could be aliased and break core functionality\n  - This prevents surprises from user's alias configurations in bash-it core functions\n- **Use parameter expansion with default for potentially unset variables**:\n  - `${VARIABLE-}` instead of `$VARIABLE` when variable may be unset\n  - Prevents errors when `set -u` is active in user's shell\n  - Examples: `${BASH_VERSION-}`, `${HOME-}`, `${PATH-}`\n  - Critical for variables checked in conditionals: `if [ -n \"${BASH_VERSION-}\" ]`\n  - This defensive practice ensures scripts work regardless of user's shell options\n\n## Project Planning & Roadmaps\n\nStrategic planning documents are maintained in `docs/plans/`:\n\n- **[Quick Reference](docs/plans/bash-it-quick-reference.md)** - TL;DR summary of current issues and action items\n- **[Comprehensive Issue Analysis](docs/plans/bash-it-issues-comprehensive-analysis.md)** - Detailed breakdown of all open issues with categorization and recommendations\n- **[2025 Roadmap](docs/plans/bash-it-roadmap-2025.md)** - 6-month technical debt reduction plan with phases and success metrics\n\nThese documents guide ongoing maintenance, issue triage, and code quality improvements.\n","vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md":"# git plugin\n\nThe git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).\n\nTo use it, add `git` to the plugins array in your zshrc file:\n\n```zsh\nplugins=(... git)\n```\n\n## Aliases\n\n| Alias                | Command                                                                                                                          |\n|:---------------------|:---------------------------------------------------------------------------------------------------------------------------------|\n| g                    | git                                                                                                                              |\n| ga                   | git add                                                                                                                          |\n| gaa                  | git add --all                                                                                                                    |\n| gapa                 | git add --patch                                                                                                                  |\n| gau                  | git add --update                                                                                                                 |\n| gav                  | git add --verbose                                                                                                                |\n| gap                  | git apply                                                                                                                        |\n| gapt                 | git apply --3way                                                                                                                 |\n| gb                   | git branch                                                                                                                       |\n| gba                  | git branch -a                                                                                                                    |\n| gbd                  | git branch -d                                                                                                                    |\n| gbda                 | git branch --no-color --merged \\| grep -vE \"^([+*]\\|\\s*($(git_main_branch)\\|$(git_develop_branch))\\s*$)\" \\| xargs git branch -d 2>/dev/null |\n| gbD                  | git branch -D                                                                                                                    |\n| gbl                  | git blame -b -w                                                                                                                  |\n| gbnm                 | git branch --no-merged                                                                                                           |\n| gbr                  | git branch --remote                                                                                                              |\n| gbs                  | git bisect                                                                                                                       |\n| gbsb                 | git bisect bad                                                                                                                   |\n| gbsg                 | git bisect good                                                                                                                  |\n| gbsr                 | git bisect reset                                                                                                                 |\n| gbss                 | git bisect start                                                                                                                 |\n| gc                   | git commit -v                                                                                                                    |\n| gc!                  | git commit -v --amend                                                                                                            |\n| gcn!                 | git commit -v --no-edit --amend                                                                                                  |\n| gca                  | git commit -v -a                                                                                                                 |\n| gca!                 | git commit -v -a --amend                                                                                                         |\n| gcan!                | git commit -v -a --no-edit --amend                                                                                               |\n| gcans!               | git commit -v -a -s --no-edit --amend                                                                                            |\n| gcam                 | git commit -a -m                                                                                                                 |\n| gcas                 | git commit -a -s                                                                                                                 |\n| gcasm                | git commit -a -s -m                                                                                                                  |\n| gcsm                 | git commit -s -m                                                                                                                 |\n| gcb                  | git checkout -b                                                                                                                  |\n| gcf                  | git config --list                                                                                                                |\n| gcl                  | git clone --recurse-submodules                                                                                                   |\n| gclean               | git clean -id                                                                                                                    |\n| gpristine            | git reset --hard && git clean -dffx                                                                                              |\n| gcm                  | git checkout $(git_main_branch)                                                                                                  |\n| gcd                  | git checkout $(git_develop_branch)                                                                                               |\n| gcmsg                | git commit -m                                                                                                                    |\n| gco                  | git checkout                                                                                                                     |\n| gcor                 | git checkout --recurse-submodules                                                                                                |\n| gcount               | git shortlog -sn                                                                                                                 |\n| gcp                  | git cherry-pick                                                                                                                  |\n| gcpa                 | git cherry-pick --abort                                                                                                          |\n| gcpc                 | git cherry-pick --continue                                                                                                       |\n| gcs                  | git commit -S                                                                                                                    |\n| gd                   | git diff                                                                                                                         |\n| gdca                 | git diff --cached                                                                                                                |\n| gdcw                 | git diff --cached --word-diff                                                                                                    |\n| gdct                 | git describe --tags $(git rev-list --tags --max-count=1)                                                                         |\n| gds                  | git diff --staged                                                                                                                |\n| gdt                  | git diff-tree --no-commit-id --name-only -r                                                                                      |\n| gdnolock             | git diff $@ \":(exclude)package-lock.json\" \":(exclude)&ast;.lock\"                                                                 |\n| gdu                  | git diff @{u}                                                                                                                    |\n| gdv                  | git diff -w $@ \\| view -                                                                                                         |\n| gdw                  | git diff --word-diff                                                                                                             |\n| gf                   | git fetch                                                                                                                        |\n| gfa                  | git fetch --all --prune                                                                                                          |\n| gfg                  | git ls-files \\| grep                                                                                                             |\n| gfo                  | git fetch origin                                                                                                                 |\n| gg                   | git gui citool                                                                                                                   |\n| gga                  | git gui citool --amend                                                                                                           |\n| ggf                  | git push --force origin $(current_branch)                                                                                        |\n| ggfl                 | git push --force-with-lease origin $(current_branch)                                                                             |\n| ggl                  | git pull origin $(current_branch)                                                                                                |\n| ggp                  | git push origin $(current_branch)                                                                                                |\n| ggpnp                | ggl && ggp                                                                                                                       |\n| ggpull               | git pull origin \"$(git_current_branch)\"                                                                                          |\n| ggpur                | ggu                                                                                                                              |\n| ggpush               | git push origin \"$(git_current_branch)\"                                                                                          |\n| ggsup                | git branch --set-upstream-to=origin/$(git_current_branch)                                                                        |\n| ggu                  | git pull --rebase origin $(current_branch)                                                                                       |\n| gpsup                | git push --set-upstream origin $(git_current_branch)                                                                             |\n| ghh                  | git help                                                                                                                         |\n| gignore              | git update-index --assume-unchanged                                                                                              |\n| gignored             | git ls-files -v \\| grep \"^[[:lower:]]\"                                                                                           |\n| git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk                                                                   |\n| gk                   | gitk --all --branches                                                                                                            |\n| gke                  | gitk --all $(git log -g --pretty=%h)                                                                                             |\n| gl                   | git pull                                                                                                                         |\n| glg                  | git log --stat                                                                                                                   |\n| glgp                 | git log --stat -p                                                                                                                |\n| glgg                 | git log --graph                                                                                                                  |\n| glgga                | git log --graph --decorate --all                                                                                                 |\n| glgm                 | git log --graph --max-count=10                                                                                                   |\n| glo                  | git log --oneline --decorate                                                                                                     |\n| glol                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'                           |\n| glols                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat                    |\n| glod                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'                           |\n| glods                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short              |\n| glola                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all                     |\n| glog                 | git log --oneline --decorate --graph                                                                                             |\n| gloga                | git log --oneline --decorate --graph --all                                                                                       |\n| glp                  | git log --pretty=\\<format\\>                                                                                                      |\n| gm                   | git merge                                                                                                                        |\n| gmom                 | git merge origin/$(git_main_branch)                                                                                              |\n| gmtl                 | git mergetool --no-prompt                                                                                                        |\n| gmtlvim              | git mergetool --no-prompt --tool=vimdiff                                                                                         |\n| gmum                 | git merge upstream/$(git_main_branch)                                                                                            |\n| gma                  | git merge --abort                                                                                                                |\n| gp                   | git push                                                                                                                         |\n| gpd                  | git push --dry-run                                                                                                               |\n| gpf                  | git push --force-with-lease                                                                                                      |\n| gpf!                 | git push --force                                                                                                                 |\n| gpoat                | git push origin --all && git push origin --tags                                                                                  |\n| gpr                  | git pull --rebase                                                                                                                |\n| gpu                  | git push upstream                                                                                                                |\n| gpv                  | git push -v                                                                                                                      |\n| gr                   | git remote                                                                                                                       |\n| gra                  | git remote add                                                                                                                   |\n| grb                  | git rebase                                                                                                                       |\n| grba                 | git rebase --abort                                                                                                               |\n| grbc                 | git rebase --continue                                                                                                            |\n| grbd                 | git rebase $(git_develop_branch)                                                                                                 |\n| grbi                 | git rebase -i                                                                                                                    |\n| grbm                 | git rebase $(git_main_branch)                                                                                                    |\n| grbo                 | git rebase --onto                                                                                                                |\n| grbs                 | git rebase --skip                                                                                                                |\n| grev                 | git revert                                                                                                                       |\n| grh                  | git reset                                                                                                                        |\n| grhh                 | git reset --hard                                                                                                                 |\n| groh                 | git reset origin/$(git_current_branch) --hard                                                                                    |\n| grm                  | git rm                                                                                                                           |\n| grmc                 | git rm --cached                                                                                                                  |\n| grmv                 | git remote rename                                                                                                                |\n| grrm                 | git remote remove                                                                                                                |\n| grs                  | git restore                                                                                                                      |\n| grset                | git remote set-url                                                                                                               |\n| grss                 | git restore --source                                                                                                             |\n| grst                 | git restore --staged                                                                                                             |\n| grt                  | cd \"$(git rev-parse --show-toplevel \\|\\| echo .)\"                                                                                |\n| gru                  | git reset --                                                                                                                     |\n| grup                 | git remote update                                                                                                                |\n| grv                  | git remote -v                                                                                                                    |\n| gsb                  | git status -sb                                                                                                                   |\n| gsd                  | git svn dcommit                                                                                                                  |\n| gsh                  | git show                                                                                                                         |\n| gsi                  | git submodule init                                                                                                               |\n| gsps                 | git show --pretty=short --show-signature                                                                                         |\n| gsr                  | git svn rebase                                                                                                                   |\n| gss                  | git status -s                                                                                                                    |\n| gst                  | git status                                                                                                                       |\n| gsta                 | git stash push                                                                                                                   |\n| gsta                 | git stash save                                                                                                                   |\n| gstaa                | git stash apply                                                                                                                  |\n| gstc                 | git stash clear                                                                                                                  |\n| gstd                 | git stash drop                                                                                                                   |\n| gstl                 | git stash list                                                                                                                   |\n| gstp                 | git stash pop                                                                                                                    |\n| gsts                 | git stash show --text                                                                                                            |\n| gstu                 | git stash --include-untracked                                                                                                    |\n| gstall               | git stash --all                                                                                                                  |\n| gsu                  | git submodule update                                                                                                             |\n| gsw                  | git switch                                                                                                                       |\n| gswc                 | git switch -c                                                                                                                    |\n| gts                  | git tag -s                                                                                                                       |\n| gtv                  | git tag \\| sort -V                                                                                                               |\n| gtl                  | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl                                                                       |\n| gunignore            | git update-index --no-assume-unchanged                                                                                           |\n| gunwip               | git log -n 1 \\| grep -q -c \"\\-\\-wip\\-\\-\" && git reset HEAD~1                                                                     |\n| gup                  | git pull --rebase                                                                                                                |\n| gupv                 | git pull --rebase -v                                                                                                             |\n| gupa                 | git pull --rebase --autostash                                                                                                    |\n| gupav                | git pull --rebase --autostash -v                                                                                                 |\n| glum                 | git pull upstream $(git_main_branch)                                                                                             |\n| gwch                 | git whatchanged -p --abbrev-commit --pretty=medium                                                                               |\n| gwip                 | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m \"--wip-- [skip ci]\"           |\n| gam                  | git am                                                                                                                           |\n| gamc                 | git am --continue                                                                                                                |\n| gams                 | git am --skip                                                                                                                    |\n| gama                 | git am --abort                                                                                                                   |\n| gamscp               | git am --show-current-patch                                                                                                      |\n\n### Main branch preference\n\nFollowing the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using\na branch name other than `master`. In this case, we favor the shorter, neutral and descriptive term `main`. This means\nthat any aliases and functions that previously used `master`, will use `main` if that branch exists. We do this via the\nfunction `git_main_branch`.\n\n### Deprecated aliases\n\nThese are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.\n\n| Alias  | Command                                                | Modification                                           |\n| :----- | :----------------------------------------------------- | :----------------------------------------------------- |\n| gap    | `git add --patch`                                      | new alias `gapa`                                       |\n| gcl    | `git config --list`                                    | new alias `gcf`                                        |\n| gdc    | `git diff --cached`                                    | new alias `gdca`                                       |\n| gdt    | `git difftool`                                         | no replacement                                         |\n| ggpull | `git pull origin $(current_branch)`                    | new alias `ggl` (`ggpull` still exists for now though) |\n| ggpur  | `git pull --rebase origin $(current_branch)`           | new alias `ggu` (`ggpur` still exists for now though)  |\n| ggpush | `git push origin $(current_branch)`                    | new alias `ggp` (`ggpush` still exists for now though) |\n| gk     | `gitk --all --branches`                                | now aliased to `gitk --all --branches`                 |\n| glg    | `git log --stat --max-count = 10`                      | now aliased to `git log --stat --color`                |\n| glgg   | `git log --graph --max-count = 10`                     | now aliased to `git log --graph --color`               |\n| gwc    | `git whatchanged -p --abbrev-commit --pretty = medium` | new alias `gwch`                                       |\n\n## Functions\n\n### Current\n\n| Command                | Description                                                                                              |\n|:-----------------------|:---------------------------------------------------------------------------------------------------------|\n| `grename <old> <new>`  | Rename `old` branch to `new`, including in origin remote                                                 |\n| current_branch         | Return the name of the current branch                                                                    |\n| git_current_user_name  | Returns the `user.name` config value                                                                     |\n| git_current_user_email | Returns the `user.email` config value                                                                    |\n| git_main_branch        | Returns the name of the main branch: `main` if it exists, `master` otherwise                             |\n| git_develop_branch     | Returns the name of the develop branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |\n\n### Work in Progress (WIP)\n\nThese features allow to pause a branch development and switch to another one (_\"Work in Progress\"_,  or wip). When you want to go back to work, just unwip it.\n\n| Command          | Description                                     |\n|:-----------------|:------------------------------------------------|\n| work_in_progress | Echoes a warning if the current branch is a wip |\n| gwip             | Commit wip branch                               |\n| gunwip           | Uncommit wip branch                             |\n\n### Deprecated functions\n\n| Command                | Description                             | Reason                                                          |\n|:-----------------------|:----------------------------------------|:----------------------------------------------------------------|\n| current_repository     | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias) |\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nBash-it is a collection of community Bash commands and scripts for Bash 3.2+, providing a framework for aliases, themes, plugins, and completions. It's structured as a modular system where components can be individually enabled or disabled.\n\n## Architecture\n\n### Core Components\n\n- **bash_it.sh**: Main entry point that initializes the framework\n- **lib/**: Core libraries providing utilities, logging, helpers, and appearance functions\n- **scripts/reloader.bash**: Component loader that sources enabled components\n- **install.sh**: Installation script with interactive and silent modes\n- **enabled/**: Symlinks to active components from available/ directories\n\n### Component Types\n\n1. **Aliases** (`aliases/available/`): Command shortcuts and convenience functions\n2. **Plugins** (`plugins/available/`): Extended functionality and integrations\n3. **Completions** (`completion/available/`): Tab completion definitions\n4. **Themes** (`themes/`): Prompt customizations and visual styles\n\n### Loading Order\n\n1. Libraries (except appearance)\n2. Global enabled directory\n3. Enabled aliases, plugins, completions\n4. Theme files (if BASH_IT_THEME is set)\n5. Custom files from BASH_IT_CUSTOM directory\n\n## Development Commands\n\n### Testing\n```bash\n# Run all tests using BATS (Bash Automated Testing System)\ntest/run\n\n# Run specific test suites\ntest/run test/bash_it test/completion test/plugins\n\n# Tests require git submodules to be initialized\ngit submodule init && git submodule update\n```\n\n### Linting and Code Quality\n\nThe project uses a gradual pre-commit system implementation via `clean_files.txt` allow-list:\n\n```bash\n# Run pre-commit hooks only on allow-listed clean files\n./lint_clean_files.sh\n\n# Run pre-commit hooks on all files (for testing new coverage)\npre-commit run --all-files\n\n# Manual shellcheck on bash files\nshellcheck **/*.bash\n\n# Format shell scripts\nshfmt -w **/*.bash\n```\n\n**Gradual Linting System**:\n- `clean_files.txt`: Allow-list of files/directories that pass all linting rules\n- `lint_clean_files.sh`: Runs pre-commit hooks only on allow-listed files\n- When modifying files NOT in `clean_files.txt`, ensure they pass linting before adding them to the allow-list\n- Before creating a PR, add newly cleaned files to `clean_files.txt` to expand coverage\n- This system allows gradual improvement of code quality across the large codebase\n\n**Vendor Directory Policy**:\n- Files in `vendor/` are treated as immutable external dependencies\n- Pre-commit hooks exclude vendor files via `.pre-commit-config.yaml` global exclude pattern\n- `clean_files.txt` does not include vendor shell scripts, only `.gitattributes`\n- CI and local linting will skip vendor files entirely\n\n### Component Management\n```bash\n# Enable/disable components\nbash-it enable alias git\nbash-it enable plugin history\nbash-it enable completion docker\n\n# Show available components\nbash-it show aliases\nbash-it show plugins  \nbash-it show completions\n\n# Search components\nbash-it search docker\n```\n\n## Key Configuration\n\n### Environment Variables\n- `BASH_IT`: Base directory path\n- `BASH_IT_THEME`: Active theme name\n- `BASH_IT_CUSTOM`: Custom components directory\n- `BASH_IT_LOG_PREFIX`: Logging prefix for debug output\n\n### File Structure Conventions\n- Available components: `{type}/available/{name}.{type}.bash`\n- Enabled components: `{type}/enabled/{name}.{type}.bash` (symlinks)\n- Custom components: `custom/{name}.bash`\n- Themes: `themes/{name}/`\n\n## Development Guidelines\n\n### Git Workflow\n- **NEVER commit directly to master branch**\n- Master should always stay in sync with `origin/master`\n- Always create a feature branch for new work: `git checkout -b feature/feature-name`\n- Keep feature branches focused on a single issue/feature\n- Create separate branches for separate features\n- Push feature branches with upstream tracking: `git push -u fork feature-branch-name`\n  - This allows manual pushes later with just `git push`\n  - Use `--force-with-lease` for rebased branches\n\n### Component Development\n- Use composure metadata: `about`, `group`, `author`, `example`\n- Follow naming convention: `{name}.{type}.bash`\n- Test components before submitting\n- Components should be modular and not conflict with others\n\n### Testing Components\n- Each component type has dedicated test files in `test/`\n- Use BATS framework for shell script testing\n- Test files follow pattern: `{component}.bats`\n\n### Code Standards\n- Use shellcheck for linting\n- Follow existing code style in the repository\n- Add appropriate metadata using composure functions\n- Components should handle missing dependencies gracefully\n- **Prefix sensitive commands with `command`** to bypass user aliases:\n  - `command mv` instead of `mv` (users may have `alias mv='mv -i'`)\n  - `command grep` instead of `grep` (users may have custom grep flags)\n  - `command rm` instead of `rm` (users may have `alias rm='rm -i'`)\n  - Apply to any command that could be aliased and break core functionality\n  - This prevents surprises from user's alias configurations in bash-it core functions\n- **Use parameter expansion with default for potentially unset variables**:\n  - `${VARIABLE-}` instead of `$VARIABLE` when variable may be unset\n  - Prevents errors when `set -u` is active in user's shell\n  - Examples: `${BASH_VERSION-}`, `${HOME-}`, `${PATH-}`\n  - Critical for variables checked in conditionals: `if [ -n \"${BASH_VERSION-}\" ]`\n  - This defensive practice ensures scripts work regardless of user's shell options\n\n## Project Planning & Roadmaps\n\nStrategic planning documents are maintained in `docs/plans/`:\n\n- **[Quick Reference](docs/plans/bash-it-quick-reference.md)** - TL;DR summary of current issues and action items\n- **[Comprehensive Issue Analysis](docs/plans/bash-it-issues-comprehensive-analysis.md)** - Detailed breakdown of all open issues with categorization and recommendations\n- **[2025 Roadmap](docs/plans/bash-it-roadmap-2025.md)** - 6-month technical debt reduction plan with phases and success metrics\n\nThese documents guide ongoing maintenance, issue triage, and code quality improvements.\n","vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md":"# git plugin\n\nThe git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).\n\nTo use it, add `git` to the plugins array in your zshrc file:\n\n```zsh\nplugins=(... git)\n```\n\n## Aliases\n\n| Alias                | Command                                                                                                                          |\n|:---------------------|:---------------------------------------------------------------------------------------------------------------------------------|\n| g                    | git                                                                                                                              |\n| ga                   | git add                                                                                                                          |\n| gaa                  | git add --all                                                                                                                    |\n| gapa                 | git add --patch                                                                                                                  |\n| gau                  | git add --update                                                                                                                 |\n| gav                  | git add --verbose                                                                                                                |\n| gap                  | git apply                                                                                                                        |\n| gapt                 | git apply --3way                                                                                                                 |\n| gb                   | git branch                                                                                                                       |\n| gba                  | git branch -a                                                                                                                    |\n| gbd                  | git branch -d                                                                                                                    |\n| gbda                 | git branch --no-color --merged \\| grep -vE \"^([+*]\\|\\s*($(git_main_branch)\\|$(git_develop_branch))\\s*$)\" \\| xargs git branch -d 2>/dev/null |\n| gbD                  | git branch -D                                                                                                                    |\n| gbl                  | git blame -b -w                                                                                                                  |\n| gbnm                 | git branch --no-merged                                                                                                           |\n| gbr                  | git branch --remote                                                                                                              |\n| gbs                  | git bisect                                                                                                                       |\n| gbsb                 | git bisect bad                                                                                                                   |\n| gbsg                 | git bisect good                                                                                                                  |\n| gbsr                 | git bisect reset                                                                                                                 |\n| gbss                 | git bisect start                                                                                                                 |\n| gc                   | git commit -v                                                                                                                    |\n| gc!                  | git commit -v --amend                                                                                                            |\n| gcn!                 | git commit -v --no-edit --amend                                                                                                  |\n| gca                  | git commit -v -a                                                                                                                 |\n| gca!                 | git commit -v -a --amend                                                                                                         |\n| gcan!                | git commit -v -a --no-edit --amend                                                                                               |\n| gcans!               | git commit -v -a -s --no-edit --amend                                                                                            |\n| gcam                 | git commit -a -m                                                                                                                 |\n| gcas                 | git commit -a -s                                                                                                                 |\n| gcasm                | git commit -a -s -m                                                                                                                  |\n| gcsm                 | git commit -s -m                                                                                                                 |\n| gcb                  | git checkout -b                                                                                                                  |\n| gcf                  | git config --list                                                                                                                |\n| gcl                  | git clone --recurse-submodules                                                                                                   |\n| gclean               | git clean -id                                                                                                                    |\n| gpristine            | git reset --hard && git clean -dffx                                                                                              |\n| gcm                  | git checkout $(git_main_branch)                                                                                                  |\n| gcd                  | git checkout $(git_develop_branch)                                                                                               |\n| gcmsg                | git commit -m                                                                                                                    |\n| gco                  | git checkout                                                                                                                     |\n| gcor                 | git checkout --recurse-submodules                                                                                                |\n| gcount               | git shortlog -sn                                                                                                                 |\n| gcp                  | git cherry-pick                                                                                                                  |\n| gcpa                 | git cherry-pick --abort                                                                                                          |\n| gcpc                 | git cherry-pick --continue                                                                                                       |\n| gcs                  | git commit -S                                                                                                                    |\n| gd                   | git diff                                                                                                                         |\n| gdca                 | git diff --cached                                                                                                                |\n| gdcw                 | git diff --cached --word-diff                                                                                                    |\n| gdct                 | git describe --tags $(git rev-list --tags --max-count=1)                                                                         |\n| gds                  | git diff --staged                                                                                                                |\n| gdt                  | git diff-tree --no-commit-id --name-only -r                                                                                      |\n| gdnolock             | git diff $@ \":(exclude)package-lock.json\" \":(exclude)&ast;.lock\"                                                                 |\n| gdu                  | git diff @{u}                                                                                                                    |\n| gdv                  | git diff -w $@ \\| view -                                                                                                         |\n| gdw                  | git diff --word-diff                                                                                                             |\n| gf                   | git fetch                                                                                                                        |\n| gfa                  | git fetch --all --prune                                                                                                          |\n| gfg                  | git ls-files \\| grep                                                                                                             |\n| gfo                  | git fetch origin                                                                                                                 |\n| gg                   | git gui citool                                                                                                                   |\n| gga                  | git gui citool --amend                                                                                                           |\n| ggf                  | git push --force origin $(current_branch)                                                                                        |\n| ggfl                 | git push --force-with-lease origin $(current_branch)                                                                             |\n| ggl                  | git pull origin $(current_branch)                                                                                                |\n| ggp                  | git push origin $(current_branch)                                                                                                |\n| ggpnp                | ggl && ggp                                                                                                                       |\n| ggpull               | git pull origin \"$(git_current_branch)\"                                                                                          |\n| ggpur                | ggu                                                                                                                              |\n| ggpush               | git push origin \"$(git_current_branch)\"                                                                                          |\n| ggsup                | git branch --set-upstream-to=origin/$(git_current_branch)                                                                        |\n| ggu                  | git pull --rebase origin $(current_branch)                                                                                       |\n| gpsup                | git push --set-upstream origin $(git_current_branch)                                                                             |\n| ghh                  | git help                                                                                                                         |\n| gignore              | git update-index --assume-unchanged                                                                                              |\n| gignored             | git ls-files -v \\| grep \"^[[:lower:]]\"                                                                                           |\n| git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk                                                                   |\n| gk                   | gitk --all --branches                                                                                                            |\n| gke                  | gitk --all $(git log -g --pretty=%h)                                                                                             |\n| gl                   | git pull                                                                                                                         |\n| glg                  | git log --stat                                                                                                                   |\n| glgp                 | git log --stat -p                                                                                                                |\n| glgg                 | git log --graph                                                                                                                  |\n| glgga                | git log --graph --decorate --all                                                                                                 |\n| glgm                 | git log --graph --max-count=10                                                                                                   |\n| glo                  | git log --oneline --decorate                                                                                                     |\n| glol                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'                           |\n| glols                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat                    |\n| glod                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'                           |\n| glods                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short              |\n| glola                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all                     |\n| glog                 | git log --oneline --decorate --graph                                                                                             |\n| gloga                | git log --oneline --decorate --graph --all                                                                                       |\n| glp                  | git log --pretty=\\<format\\>                                                                                                      |\n| gm                   | git merge                                                                                                                        |\n| gmom                 | git merge origin/$(git_main_branch)                                                                                              |\n| gmtl                 | git mergetool --no-prompt                                                                                                        |\n| gmtlvim              | git mergetool --no-prompt --tool=vimdiff                                                                                         |\n| gmum                 | git merge upstream/$(git_main_branch)                                                                                            |\n| gma                  | git merge --abort                                                                                                                |\n| gp                   | git push                                                                                                                         |\n| gpd                  | git push --dry-run                                                                                                               |\n| gpf                  | git push --force-with-lease                                                                                                      |\n| gpf!                 | git push --force                                                                                                                 |\n| gpoat                | git push origin --all && git push origin --tags                                                                                  |\n| gpr                  | git pull --rebase                                                                                                                |\n| gpu                  | git push upstream                                                                                                                |\n| gpv                  | git push -v                                                                                                                      |\n| gr                   | git remote                                                                                                                       |\n| gra                  | git remote add                                                                                                                   |\n| grb                  | git rebase                                                                                                                       |\n| grba                 | git rebase --abort                                                                                                               |\n| grbc                 | git rebase --continue                                                                                                            |\n| grbd                 | git rebase $(git_develop_branch)                                                                                                 |\n| grbi                 | git rebase -i                                                                                                                    |\n| grbm                 | git rebase $(git_main_branch)                                                                                                    |\n| grbo                 | git rebase --onto                                                                                                                |\n| grbs                 | git rebase --skip                                                                                                                |\n| grev                 | git revert                                                                                                                       |\n| grh                  | git reset                                                                                                                        |\n| grhh                 | git reset --hard                                                                                                                 |\n| groh                 | git reset origin/$(git_current_branch) --hard                                                                                    |\n| grm                  | git rm                                                                                                                           |\n| grmc                 | git rm --cached                                                                                                                  |\n| grmv                 | git remote rename                                                                                                                |\n| grrm                 | git remote remove                                                                                                                |\n| grs                  | git restore                                                                                                                      |\n| grset                | git remote set-url                                                                                                               |\n| grss                 | git restore --source                                                                                                             |\n| grst                 | git restore --staged                                                                                                             |\n| grt                  | cd \"$(git rev-parse --show-toplevel \\|\\| echo .)\"                                                                                |\n| gru                  | git reset --                                                                                                                     |\n| grup                 | git remote update                                                                                                                |\n| grv                  | git remote -v                                                                                                                    |\n| gsb                  | git status -sb                                                                                                                   |\n| gsd                  | git svn dcommit                                                                                                                  |\n| gsh                  | git show                                                                                                                         |\n| gsi                  | git submodule init                                                                                                               |\n| gsps                 | git show --pretty=short --show-signature                                                                                         |\n| gsr                  | git svn rebase                                                                                                                   |\n| gss                  | git status -s                                                                                                                    |\n| gst                  | git status                                                                                                                       |\n| gsta                 | git stash push                                                                                                                   |\n| gsta                 | git stash save                                                                                                                   |\n| gstaa                | git stash apply                                                                                                                  |\n| gstc                 | git stash clear                                                                                                                  |\n| gstd                 | git stash drop                                                                                                                   |\n| gstl                 | git stash list                                                                                                                   |\n| gstp                 | git stash pop                                                                                                                    |\n| gsts                 | git stash show --text                                                                                                            |\n| gstu                 | git stash --include-untracked                                                                                                    |\n| gstall               | git stash --all                                                                                                                  |\n| gsu                  | git submodule update                                                                                                             |\n| gsw                  | git switch                                                                                                                       |\n| gswc                 | git switch -c                                                                                                                    |\n| gts                  | git tag -s                                                                                                                       |\n| gtv                  | git tag \\| sort -V                                                                                                               |\n| gtl                  | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl                                                                       |\n| gunignore            | git update-index --no-assume-unchanged                                                                                           |\n| gunwip               | git log -n 1 \\| grep -q -c \"\\-\\-wip\\-\\-\" && git reset HEAD~1                                                                     |\n| gup                  | git pull --rebase                                                                                                                |\n| gupv                 | git pull --rebase -v                                                                                                             |\n| gupa                 | git pull --rebase --autostash                                                                                                    |\n| gupav                | git pull --rebase --autostash -v                                                                                                 |\n| glum                 | git pull upstream $(git_main_branch)                                                                                             |\n| gwch                 | git whatchanged -p --abbrev-commit --pretty=medium                                                                               |\n| gwip                 | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m \"--wip-- [skip ci]\"           |\n| gam                  | git am                                                                                                                           |\n| gamc                 | git am --continue                                                                                                                |\n| gams                 | git am --skip                                                                                                                    |\n| gama                 | git am --abort                                                                                                                   |\n| gamscp               | git am --show-current-patch                                                                                                      |\n\n### Main branch preference\n\nFollowing the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using\na branch name other than `master`. In this case, we favor the shorter, neutral and descriptive term `main`. This means\nthat any aliases and functions that previously used `master`, will use `main` if that branch exists. We do this via the\nfunction `git_main_branch`.\n\n### Deprecated aliases\n\nThese are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.\n\n| Alias  | Command                                                | Modification                                           |\n| :----- | :----------------------------------------------------- | :----------------------------------------------------- |\n| gap    | `git add --patch`                                      | new alias `gapa`                                       |\n| gcl    | `git config --list`                                    | new alias `gcf`                                        |\n| gdc    | `git diff --cached`                                    | new alias `gdca`                                       |\n| gdt    | `git difftool`                                         | no replacement                                         |\n| ggpull | `git pull origin $(current_branch)`                    | new alias `ggl` (`ggpull` still exists for now though) |\n| ggpur  | `git pull --rebase origin $(current_branch)`           | new alias `ggu` (`ggpur` still exists for now though)  |\n| ggpush | `git push origin $(current_branch)`                    | new alias `ggp` (`ggpush` still exists for now though) |\n| gk     | `gitk --all --branches`                                | now aliased to `gitk --all --branches`                 |\n| glg    | `git log --stat --max-count = 10`                      | now aliased to `git log --stat --color`                |\n| glgg   | `git log --graph --max-count = 10`                     | now aliased to `git log --graph --color`               |\n| gwc    | `git whatchanged -p --abbrev-commit --pretty = medium` | new alias `gwch`                                       |\n\n## Functions\n\n### Current\n\n| Command                | Description                                                                                              |\n|:-----------------------|:---------------------------------------------------------------------------------------------------------|\n| `grename <old> <new>`  | Rename `old` branch to `new`, including in origin remote                                                 |\n| current_branch         | Return the name of the current branch                                                                    |\n| git_current_user_name  | Returns the `user.name` config value                                                                     |\n| git_current_user_email | Returns the `user.email` config value                                                                    |\n| git_main_branch        | Returns the name of the main branch: `main` if it exists, `master` otherwise                             |\n| git_develop_branch     | Returns the name of the develop branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |\n\n### Work in Progress (WIP)\n\nThese features allow to pause a branch development and switch to another one (_\"Work in Progress\"_,  or wip). When you want to go back to work, just unwip it.\n\n| Command          | Description                                     |\n|:-----------------|:------------------------------------------------|\n| work_in_progress | Echoes a warning if the current branch is a wip |\n| gwip             | Commit wip branch                               |\n| gunwip           | Uncommit wip branch                             |\n\n### Deprecated functions\n\n| Command                | Description                             | Reason                                                          |\n|:-----------------------|:----------------------------------------|:----------------------------------------------------------------|\n| current_repository     | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias) |\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/Bash-it/bash-it/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nBash-it is a collection of community Bash commands and scripts for Bash 3.2+, providing a framework for aliases, themes, plugins, and completions. It's structured as a modular system where components can be individually enabled or disabled.\n\n## Architecture\n\n### Core Components\n\n- **bash_it.sh**: Main entry point that initializes the framework\n- **lib/**: Core libraries providing utilities, logging, helpers, and appearance functions\n- **scripts/reloader.bash**: Component loader that sources enabled components\n- **install.sh**: Installation script with interactive and silent modes\n- **enabled/**: Symlinks to active components from available/ directories\n\n### Component Types\n\n1. **Aliases** (`aliases/available/`): Command shortcuts and convenience functions\n2. **Plugins** (`plugins/available/`): Extended functionality and integrations\n3. **Completions** (`completion/available/`): Tab completion definitions\n4. **Themes** (`themes/`): Prompt customizations and visual styles\n\n### Loading Order\n\n1. Libraries (except appearance)\n2. Global enabled directory\n3. Enabled aliases, plugins, completions\n4. Theme files (if BASH_IT_THEME is set)\n5. Custom files from BASH_IT_CUSTOM directory\n\n## Development Commands\n\n### Testing\n```bash\n# Run all tests using BATS (Bash Automated Testing System)\ntest/run\n\n# Run specific test suites\ntest/run test/bash_it test/completion test/plugins\n\n# Tests require git submodules to be initialized\ngit submodule init && git submodule update\n```\n\n### Linting and Code Quality\n\nThe project uses a gradual pre-commit system implementation via `clean_files.txt` allow-list:\n\n```bash\n# Run pre-commit hooks only on allow-listed clean files\n./lint_clean_files.sh\n\n# Run pre-commit hooks on all files (for testing new coverage)\npre-commit run --all-files\n\n# Manual shellcheck on bash files\nshellcheck **/*.bash\n\n# Format shell scripts\nshfmt -w **/*.bash\n```\n\n**Gradual Linting System**:\n- `clean_files.txt`: Allow-list of files/directories that pass all linting rules\n- `lint_clean_files.sh`: Runs pre-commit hooks only on allow-listed files\n- When modifying files NOT in `clean_files.txt`, ensure they pass linting before adding them to the allow-list\n- Before creating a PR, add newly cleaned files to `clean_files.txt` to expand coverage\n- This system allows gradual improvement of code quality across the large codebase\n\n**Vendor Directory Policy**:\n- Files in `vendor/` are treated as immutable external dependencies\n- Pre-commit hooks exclude vendor files via `.pre-commit-config.yaml` global exclude pattern\n- `clean_files.txt` does not include vendor shell scripts, only `.gitattributes`\n- CI and local linting will skip vendor files entirely\n\n### Component Management\n```bash\n# Enable/disable components\nbash-it enable alias git\nbash-it enable plugin history\nbash-it enable completion docker\n\n# Show available components\nbash-it show aliases\nbash-it show plugins  \nbash-it show completions\n\n# Search components\nbash-it search docker\n```\n\n## Key Configuration\n\n### Environment Variables\n- `BASH_IT`: Base directory path\n- `BASH_IT_THEME`: Active theme name\n- `BASH_IT_CUSTOM`: Custom components directory\n- `BASH_IT_LOG_PREFIX`: Logging prefix for debug output\n\n### File Structure Conventions\n- Available components: `{type}/available/{name}.{type}.bash`\n- Enabled components: `{type}/enabled/{name}.{type}.bash` (symlinks)\n- Custom components: `custom/{name}.bash`\n- Themes: `themes/{name}/`\n\n## Development Guidelines\n\n### Git Workflow\n- **NEVER commit directly to master branch**\n- Master should always stay in sync with `origin/master`\n- Always create a feature branch for new work: `git checkout -b feature/feature-name`\n- Keep feature branches focused on a single issue/feature\n- Create separate branches for separate features\n- Push feature branches with upstream tracking: `git push -u fork feature-branch-name`\n  - This allows manual pushes later with just `git push`\n  - Use `--force-with-lease` for rebased branches\n\n### Component Development\n- Use composure metadata: `about`, `group`, `author`, `example`\n- Follow naming convention: `{name}.{type}.bash`\n- Test components before submitting\n- Components should be modular and not conflict with others\n\n### Testing Components\n- Each component type has dedicated test files in `test/`\n- Use BATS framework for shell script testing\n- Test files follow pattern: `{component}.bats`\n\n### Code Standards\n- Use shellcheck for linting\n- Follow existing code style in the repository\n- Add appropriate metadata using composure functions\n- Components should handle missing dependencies gracefully\n- **Prefix sensitive commands with `command`** to bypass user aliases:\n  - `command mv` instead of `mv` (users may have `alias mv='mv -i'`)\n  - `command grep` instead of `grep` (users may have custom grep flags)\n  - `command rm` instead of `rm` (users may have `alias rm='rm -i'`)\n  - Apply to any command that could be aliased and break core functionality\n  - This prevents surprises from user's alias configurations in bash-it core functions\n- **Use parameter expansion with default for potentially unset variables**:\n  - `${VARIABLE-}` instead of `$VARIABLE` when variable may be unset\n  - Prevents errors when `set -u` is active in user's shell\n  - Examples: `${BASH_VERSION-}`, `${HOME-}`, `${PATH-}`\n  - Critical for variables checked in conditionals: `if [ -n \"${BASH_VERSION-}\" ]`\n  - This defensive practice ensures scripts work regardless of user's shell options\n\n## Project Planning & Roadmaps\n\nStrategic planning documents are maintained in `docs/plans/`:\n\n- **[Quick Reference](docs/plans/bash-it-quick-reference.md)** - TL;DR summary of current issues and action items\n- **[Comprehensive Issue Analysis](docs/plans/bash-it-issues-comprehensive-analysis.md)** - Detailed breakdown of all open issues with categorization and recommendations\n- **[2025 Roadmap](docs/plans/bash-it-roadmap-2025.md)** - 6-month technical debt reduction plan with phases and success metrics\n\nThese documents guide ongoing maintenance, issue triage, and code quality improvements.\n","isInternal":false,"tokens":1392,"sizeBytes":6196},{"name":"README.md","path":"vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md","rawUrl":"https://raw.githubusercontent.com/Bash-it/bash-it/HEAD/vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md","title":"git Documentation","category":"plugin-manifest","format":"markdown","content":"# git plugin\n\nThe git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).\n\nTo use it, add `git` to the plugins array in your zshrc file:\n\n```zsh\nplugins=(... git)\n```\n\n## Aliases\n\n| Alias                | Command                                                                                                                          |\n|:---------------------|:---------------------------------------------------------------------------------------------------------------------------------|\n| g                    | git                                                                                                                              |\n| ga                   | git add                                                                                                                          |\n| gaa                  | git add --all                                                                                                                    |\n| gapa                 | git add --patch                                                                                                                  |\n| gau                  | git add --update                                                                                                                 |\n| gav                  | git add --verbose                                                                                                                |\n| gap                  | git apply                                                                                                                        |\n| gapt                 | git apply --3way                                                                                                                 |\n| gb                   | git branch                                                                                                                       |\n| gba                  | git branch -a                                                                                                                    |\n| gbd                  | git branch -d                                                                                                                    |\n| gbda                 | git branch --no-color --merged \\| grep -vE \"^([+*]\\|\\s*($(git_main_branch)\\|$(git_develop_branch))\\s*$)\" \\| xargs git branch -d 2>/dev/null |\n| gbD                  | git branch -D                                                                                                                    |\n| gbl                  | git blame -b -w                                                                                                                  |\n| gbnm                 | git branch --no-merged                                                                                                           |\n| gbr                  | git branch --remote                                                                                                              |\n| gbs                  | git bisect                                                                                                                       |\n| gbsb                 | git bisect bad                                                                                                                   |\n| gbsg                 | git bisect good                                                                                                                  |\n| gbsr                 | git bisect reset                                                                                                                 |\n| gbss                 | git bisect start                                                                                                                 |\n| gc                   | git commit -v                                                                                                                    |\n| gc!                  | git commit -v --amend                                                                                                            |\n| gcn!                 | git commit -v --no-edit --amend                                                                                                  |\n| gca                  | git commit -v -a                                                                                                                 |\n| gca!                 | git commit -v -a --amend                                                                                                         |\n| gcan!                | git commit -v -a --no-edit --amend                                                                                               |\n| gcans!               | git commit -v -a -s --no-edit --amend                                                                                            |\n| gcam                 | git commit -a -m                                                                                                                 |\n| gcas                 | git commit -a -s                                                                                                                 |\n| gcasm                | git commit -a -s -m                                                                                                                  |\n| gcsm                 | git commit -s -m                                                                                                                 |\n| gcb                  | git checkout -b                                                                                                                  |\n| gcf                  | git config --list                                                                                                                |\n| gcl                  | git clone --recurse-submodules                                                                                                   |\n| gclean               | git clean -id                                                                                                                    |\n| gpristine            | git reset --hard && git clean -dffx                                                                                              |\n| gcm                  | git checkout $(git_main_branch)                                                                                                  |\n| gcd                  | git checkout $(git_develop_branch)                                                                                               |\n| gcmsg                | git commit -m                                                                                                                    |\n| gco                  | git checkout                                                                                                                     |\n| gcor                 | git checkout --recurse-submodules                                                                                                |\n| gcount               | git shortlog -sn                                                                                                                 |\n| gcp                  | git cherry-pick                                                                                                                  |\n| gcpa                 | git cherry-pick --abort                                                                                                          |\n| gcpc                 | git cherry-pick --continue                                                                                                       |\n| gcs                  | git commit -S                                                                                                                    |\n| gd                   | git diff                                                                                                                         |\n| gdca                 | git diff --cached                                                                                                                |\n| gdcw                 | git diff --cached --word-diff                                                                                                    |\n| gdct                 | git describe --tags $(git rev-list --tags --max-count=1)                                                                         |\n| gds                  | git diff --staged                                                                                                                |\n| gdt                  | git diff-tree --no-commit-id --name-only -r                                                                                      |\n| gdnolock             | git diff $@ \":(exclude)package-lock.json\" \":(exclude)&ast;.lock\"                                                                 |\n| gdu                  | git diff @{u}                                                                                                                    |\n| gdv                  | git diff -w $@ \\| view -                                                                                                         |\n| gdw                  | git diff --word-diff                                                                                                             |\n| gf                   | git fetch                                                                                                                        |\n| gfa                  | git fetch --all --prune                                                                                                          |\n| gfg                  | git ls-files \\| grep                                                                                                             |\n| gfo                  | git fetch origin                                                                                                                 |\n| gg                   | git gui citool                                                                                                                   |\n| gga                  | git gui citool --amend                                                                                                           |\n| ggf                  | git push --force origin $(current_branch)                                                                                        |\n| ggfl                 | git push --force-with-lease origin $(current_branch)                                                                             |\n| ggl                  | git pull origin $(current_branch)                                                                                                |\n| ggp                  | git push origin $(current_branch)                                                                                                |\n| ggpnp                | ggl && ggp                                                                                                                       |\n| ggpull               | git pull origin \"$(git_current_branch)\"                                                                                          |\n| ggpur                | ggu                                                                                                                              |\n| ggpush               | git push origin \"$(git_current_branch)\"                                                                                          |\n| ggsup                | git branch --set-upstream-to=origin/$(git_current_branch)                                                                        |\n| ggu                  | git pull --rebase origin $(current_branch)                                                                                       |\n| gpsup                | git push --set-upstream origin $(git_current_branch)                                                                             |\n| ghh                  | git help                                                                                                                         |\n| gignore              | git update-index --assume-unchanged                                                                                              |\n| gignored             | git ls-files -v \\| grep \"^[[:lower:]]\"                                                                                           |\n| git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk                                                                   |\n| gk                   | gitk --all --branches                                                                                                            |\n| gke                  | gitk --all $(git log -g --pretty=%h)                                                                                             |\n| gl                   | git pull                                                                                                                         |\n| glg                  | git log --stat                                                                                                                   |\n| glgp                 | git log --stat -p                                                                                                                |\n| glgg                 | git log --graph                                                                                                                  |\n| glgga                | git log --graph --decorate --all                                                                                                 |\n| glgm                 | git log --graph --max-count=10                                                                                                   |\n| glo                  | git log --oneline --decorate                                                                                                     |\n| glol                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'                           |\n| glols                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat                    |\n| glod                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'                           |\n| glods                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short              |\n| glola                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all                     |\n| glog                 | git log --oneline --decorate --graph                                                                                             |\n| gloga                | git log --oneline --decorate --graph --all                                                                                       |\n| glp                  | git log --pretty=\\<format\\>                                                                                                      |\n| gm                   | git merge                                                                                                                        |\n| gmom                 | git merge origin/$(git_main_branch)                                                                                              |\n| gmtl                 | git mergetool --no-prompt                                                                                                        |\n| gmtlvim              | git mergetool --no-prompt --tool=vimdiff                                                                                         |\n| gmum                 | git merge upstream/$(git_main_branch)                                                                                            |\n| gma                  | git merge --abort                                                                                                                |\n| gp                   | git push                                                                                                                         |\n| gpd                  | git push --dry-run                                                                                                               |\n| gpf                  | git push --force-with-lease                                                                                                      |\n| gpf!                 | git push --force                                                                                                                 |\n| gpoat                | git push origin --all && git push origin --tags                                                                                  |\n| gpr                  | git pull --rebase                                                                                                                |\n| gpu                  | git push upstream                                                                                                                |\n| gpv                  | git push -v                                                                                                                      |\n| gr                   | git remote                                                                                                                       |\n| gra                  | git remote add                                                                                                                   |\n| grb                  | git rebase                                                                                                                       |\n| grba                 | git rebase --abort                                                                                                               |\n| grbc                 | git rebase --continue                                                                                                            |\n| grbd                 | git rebase $(git_develop_branch)                                                                                                 |\n| grbi                 | git rebase -i                                                                                                                    |\n| grbm                 | git rebase $(git_main_branch)                                                                                                    |\n| grbo                 | git rebase --onto                                                                                                                |\n| grbs                 | git rebase --skip                                                                                                                |\n| grev                 | git revert                                                                                                                       |\n| grh                  | git reset                                                                                                                        |\n| grhh                 | git reset --hard                                                                                                                 |\n| groh                 | git reset origin/$(git_current_branch) --hard                                                                                    |\n| grm                  | git rm                                                                                                                           |\n| grmc                 | git rm --cached                                                                                                                  |\n| grmv                 | git remote rename                                                                                                                |\n| grrm                 | git remote remove                                                                                                                |\n| grs                  | git restore                                                                                                                      |\n| grset                | git remote set-url                                                                                                               |\n| grss                 | git restore --source                                                                                                             |\n| grst                 | git restore --staged                                                                                                             |\n| grt                  | cd \"$(git rev-parse --show-toplevel \\|\\| echo .)\"                                                                                |\n| gru                  | git reset --                                                                                                                     |\n| grup                 | git remote update                                                                                                                |\n| grv                  | git remote -v                                                                                                                    |\n| gsb                  | git status -sb                                                                                                                   |\n| gsd                  | git svn dcommit                                                                                                                  |\n| gsh                  | git show                                                                                                                         |\n| gsi                  | git submodule init                                                                                                               |\n| gsps                 | git show --pretty=short --show-signature                                                                                         |\n| gsr                  | git svn rebase                                                                                                                   |\n| gss                  | git status -s                                                                                                                    |\n| gst                  | git status                                                                                                                       |\n| gsta                 | git stash push                                                                                                                   |\n| gsta                 | git stash save                                                                                                                   |\n| gstaa                | git stash apply                                                                                                                  |\n| gstc                 | git stash clear                                                                                                                  |\n| gstd                 | git stash drop                                                                                                                   |\n| gstl                 | git stash list                                                                                                                   |\n| gstp                 | git stash pop                                                                                                                    |\n| gsts                 | git stash show --text                                                                                                            |\n| gstu                 | git stash --include-untracked                                                                                                    |\n| gstall               | git stash --all                                                                                                                  |\n| gsu                  | git submodule update                                                                                                             |\n| gsw                  | git switch                                                                                                                       |\n| gswc                 | git switch -c                                                                                                                    |\n| gts                  | git tag -s                                                                                                                       |\n| gtv                  | git tag \\| sort -V                                                                                                               |\n| gtl                  | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl                                                                       |\n| gunignore            | git update-index --no-assume-unchanged                                                                                           |\n| gunwip               | git log -n 1 \\| grep -q -c \"\\-\\-wip\\-\\-\" && git reset HEAD~1                                                                     |\n| gup                  | git pull --rebase                                                                                                                |\n| gupv                 | git pull --rebase -v                                                                                                             |\n| gupa                 | git pull --rebase --autostash                                                                                                    |\n| gupav                | git pull --rebase --autostash -v                                                                                                 |\n| glum                 | git pull upstream $(git_main_branch)                                                                                             |\n| gwch                 | git whatchanged -p --abbrev-commit --pretty=medium                                                                               |\n| gwip                 | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m \"--wip-- [skip ci]\"           |\n| gam                  | git am                                                                                                                           |\n| gamc                 | git am --continue                                                                                                                |\n| gams                 | git am --skip                                                                                                                    |\n| gama                 | git am --abort                                                                                                                   |\n| gamscp               | git am --show-current-patch                                                                                                      |\n\n### Main branch preference\n\nFollowing the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using\na branch name other than `master`. In this case, we favor the shorter, neutral and descriptive term `main`. This means\nthat any aliases and functions that previously used `master`, will use `main` if that branch exists. We do this via the\nfunction `git_main_branch`.\n\n### Deprecated aliases\n\nThese are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.\n\n| Alias  | Command                                                | Modification                                           |\n| :----- | :----------------------------------------------------- | :----------------------------------------------------- |\n| gap    | `git add --patch`                                      | new alias `gapa`                                       |\n| gcl    | `git config --list`                                    | new alias `gcf`                                        |\n| gdc    | `git diff --cached`                                    | new alias `gdca`                                       |\n| gdt    | `git difftool`                                         | no replacement                                         |\n| ggpull | `git pull origin $(current_branch)`                    | new alias `ggl` (`ggpull` still exists for now though) |\n| ggpur  | `git pull --rebase origin $(current_branch)`           | new alias `ggu` (`ggpur` still exists for now though)  |\n| ggpush | `git push origin $(current_branch)`                    | new alias `ggp` (`ggpush` still exists for now though) |\n| gk     | `gitk --all --branches`                                | now aliased to `gitk --all --branches`                 |\n| glg    | `git log --stat --max-count = 10`                      | now aliased to `git log --stat --color`                |\n| glgg   | `git log --graph --max-count = 10`                     | now aliased to `git log --graph --color`               |\n| gwc    | `git whatchanged -p --abbrev-commit --pretty = medium` | new alias `gwch`                                       |\n\n## Functions\n\n### Current\n\n| Command                | Description                                                                                              |\n|:-----------------------|:---------------------------------------------------------------------------------------------------------|\n| `grename <old> <new>`  | Rename `old` branch to `new`, including in origin remote                                                 |\n| current_branch         | Return the name of the current branch                                                                    |\n| git_current_user_name  | Returns the `user.name` config value                                                                     |\n| git_current_user_email | Returns the `user.email` config value                                                                    |\n| git_main_branch        | Returns the name of the main branch: `main` if it exists, `master` otherwise                             |\n| git_develop_branch     | Returns the name of the develop branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |\n\n### Work in Progress (WIP)\n\nThese features allow to pause a branch development and switch to another one (_\"Work in Progress\"_,  or wip). When you want to go back to work, just unwip it.\n\n| Command          | Description                                     |\n|:-----------------|:------------------------------------------------|\n| work_in_progress | Echoes a warning if the current branch is a wip |\n| gwip             | Commit wip branch                               |\n| gunwip           | Uncommit wip branch                             |\n\n### Deprecated functions\n\n| Command                | Description                             | Reason                                                          |\n|:-----------------------|:----------------------------------------|:----------------------------------------------------------------|\n| current_repository     | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias) |\n","isInternal":false,"tokens":3527,"sizeBytes":31799}],"systemPromptSnippet":"<yakaai_skills repo=\"Bash-it/bash-it\">\n<!-- File: CLAUDE.md (Tokens: ~1392 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Project Overview\n\nBash-it is a collection of community Bash commands and scripts for Bash 3.2+, providing a framework for aliases, themes, plugins, and completions. It's structured as a modular system where components can be individually enabled or disabled.\n\n## Architecture\n\n### Core Components\n\n- **bash_it.sh**: Main entry point that initializes the framework\n- **lib/**: Core libraries providing utilities, logging, helpers, and appearance functions\n- **scripts/reloader.bash**: Component loader that sources enabled components\n- **install.sh**: Installation script with interactive and silent modes\n- **enabled/**: Symlinks to active components from available/ directories\n\n### Component Types\n\n1. **Aliases** (`aliases/available/`): Command shortcuts and convenience functions\n2. **Plugins** (`plugins/available/`): Extended functionality and integrations\n3. **Completions** (`completion/available/`): Tab completion definitions\n4. **Themes** (`themes/`): Prompt customizations and visual styles\n\n### Loading Order\n\n1. Libraries (except appearance)\n2. Global enabled directory\n3. Enabled aliases, plugins, completions\n4. Theme files (if BASH_IT_THEME is set)\n5. Custom files from BASH_IT_CUSTOM directory\n\n## Development Commands\n\n### Testing\n```bash\n# Run all tests using BATS (Bash Automated Testing System)\ntest/run\n\n# Run specific test suites\ntest/run test/bash_it test/completion test/plugins\n\n# Tests require git submodules to be initialized\ngit submodule init && git submodule update\n```\n\n### Linting and Code Quality\n\nThe project uses a gradual pre-commit system implementation via `clean_files.txt` allow-list:\n\n```bash\n# Run pre-commit hooks only on allow-listed clean files\n./lint_clean_files.sh\n\n# Run pre-commit hooks on all files (for testing new coverage)\npre-commit run --all-files\n\n# Manual shellcheck on bash files\nshellcheck **/*.bash\n\n# Format shell scripts\nshfmt -w **/*.bash\n```\n\n**Gradual Linting System**:\n- `clean_files.txt`: Allow-list of files/directories that pass all linting rules\n- `lint_clean_files.sh`: Runs pre-commit hooks only on allow-listed files\n- When modifying files NOT in `clean_files.txt`, ensure they pass linting before adding them to the allow-list\n- Before creating a PR, add newly cleaned files to `clean_files.txt` to expand coverage\n- This system allows gradual improvement of code quality across the large codebase\n\n**Vendor Directory Policy**:\n- Files in `vendor/` are treated as immutable external dependencies\n- Pre-commit hooks exclude vendor files via `.pre-commit-config.yaml` global exclude pattern\n- `clean_files.txt` does not include vendor shell scripts, only `.gitattributes`\n- CI and local linting will skip vendor files entirely\n\n### Component Management\n```bash\n# Enable/disable components\nbash-it enable alias git\nbash-it enable plugin history\nbash-it enable completion docker\n\n# Show available components\nbash-it show aliases\nbash-it show plugins  \nbash-it show completions\n\n# Search components\nbash-it search docker\n```\n\n## Key Configuration\n\n### Environment Variables\n- `BASH_IT`: Base directory path\n- `BASH_IT_THEME`: Active theme name\n- `BASH_IT_CUSTOM`: Custom components directory\n- `BASH_IT_LOG_PREFIX`: Logging prefix for debug output\n\n### File Structure Conventions\n- Available components: `{type}/available/{name}.{type}.bash`\n- Enabled components: `{type}/enabled/{name}.{type}.bash` (symlinks)\n- Custom components: `custom/{name}.bash`\n- Themes: `themes/{name}/`\n\n## Development Guidelines\n\n### Git Workflow\n- **NEVER commit directly to master branch**\n- Master should always stay in sync with `origin/master`\n- Always create a feature branch for new work: `git checkout -b feature/feature-name`\n- Keep feature branches focused on a single issue/feature\n- Create separate branches for separate features\n- Push feature branches with upstream tracking: `git push -u fork feature-branch-name`\n  - This allows manual pushes later with just `git push`\n  - Use `--force-with-lease` for rebased branches\n\n### Component Development\n- Use composure metadata: `about`, `group`, `author`, `example`\n- Follow naming convention: `{name}.{type}.bash`\n- Test components before submitting\n- Components should be modular and not conflict with others\n\n### Testing Components\n- Each component type has dedicated test files in `test/`\n- Use BATS framework for shell script testing\n- Test files follow pattern: `{component}.bats`\n\n### Code Standards\n- Use shellcheck for linting\n- Follow existing code style in the repository\n- Add appropriate metadata using composure functions\n- Components should handle missing dependencies gracefully\n- **Prefix sensitive commands with `command`** to bypass user aliases:\n  - `command mv` instead of `mv` (users may have `alias mv='mv -i'`)\n  - `command grep` instead of `grep` (users may have custom grep flags)\n  - `command rm` instead of `rm` (users may have `alias rm='rm -i'`)\n  - Apply to any command that could be aliased and break core functionality\n  - This prevents surprises from user's alias configurations in bash-it core functions\n- **Use parameter expansion with default for potentially unset variables**:\n  - `${VARIABLE-}` instead of `$VARIABLE` when variable may be unset\n  - Prevents errors when `set -u` is active in user's shell\n  - Examples: `${BASH_VERSION-}`, `${HOME-}`, `${PATH-}`\n  - Critical for variables checked in conditionals: `if [ -n \"${BASH_VERSION-}\" ]`\n  - This defensive practice ensures scripts work regardless of user's shell options\n\n## Project Planning & Roadmaps\n\nStrategic planning documents are maintained in `docs/plans/`:\n\n- **[Quick Reference](docs/plans/bash-it-quick-reference.md)** - TL;DR summary of current issues and action items\n- **[Comprehensive Issue Analysis](docs/plans/bash-it-issues-comprehensive-analysis.md)** - Detailed breakdown of all open issues with categorization and recommendations\n- **[2025 Roadmap](docs/plans/bash-it-roadmap-2025.md)** - 6-month technical debt reduction plan with phases and success metrics\n\nThese documents guide ongoing maintenance, issue triage, and code quality improvements.\n\n<!-- File: vendor/github.com/ohmyzsh/ohmyzsh/plugins/git/README.md (Tokens: ~3527 | Category: plugin-manifest) -->\n# git plugin\n\nThe git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).\n\nTo use it, add `git` to the plugins array in your zshrc file:\n\n```zsh\nplugins=(... git)\n```\n\n## Aliases\n\n| Alias                | Command                                                                                                                          |\n|:---------------------|:---------------------------------------------------------------------------------------------------------------------------------|\n| g                    | git                                                                                                                              |\n| ga                   | git add                                                                                                                          |\n| gaa                  | git add --all                                                                                                                    |\n| gapa                 | git add --patch                                                                                                                  |\n| gau                  | git add --update                                                                                                                 |\n| gav                  | git add --verbose                                                                                                                |\n| gap                  | git apply                                                                                                                        |\n| gapt                 | git apply --3way                                                                                                                 |\n| gb                   | git branch                                                                                                                       |\n| gba                  | git branch -a                                                                                                                    |\n| gbd                  | git branch -d                                                                                                                    |\n| gbda                 | git branch --no-color --merged \\| grep -vE \"^([+*]\\|\\s*($(git_main_branch)\\|$(git_develop_branch))\\s*$)\" \\| xargs git branch -d 2>/dev/null |\n| gbD                  | git branch -D                                                                                                                    |\n| gbl                  | git blame -b -w                                                                                                                  |\n| gbnm                 | git branch --no-merged                                                                                                           |\n| gbr                  | git branch --remote                                                                                                              |\n| gbs                  | git bisect                                                                                                                       |\n| gbsb                 | git bisect bad                                                                                                                   |\n| gbsg                 | git bisect good                                                                                                                  |\n| gbsr                 | git bisect reset                                                                                                                 |\n| gbss                 | git bisect start                                                                                                                 |\n| gc                   | git commit -v                                                                                                                    |\n| gc!                  | git commit -v --amend                                                                                                            |\n| gcn!                 | git commit -v --no-edit --amend                                                                                                  |\n| gca                  | git commit -v -a                                                                                                                 |\n| gca!                 | git commit -v -a --amend                                                                                                         |\n| gcan!                | git commit -v -a --no-edit --amend                                                                                               |\n| gcans!               | git commit -v -a -s --no-edit --amend                                                                                            |\n| gcam                 | git commit -a -m                                                                                                                 |\n| gcas                 | git commit -a -s                                                                                                                 |\n| gcasm                | git commit -a -s -m                                                                                                                  |\n| gcsm                 | git commit -s -m                                                                                                                 |\n| gcb                  | git checkout -b                                                                                                                  |\n| gcf                  | git config --list                                                                                                                |\n| gcl                  | git clone --recurse-submodules                                                                                                   |\n| gclean               | git clean -id                                                                                                                    |\n| gpristine            | git reset --hard && git clean -dffx                                                                                              |\n| gcm                  | git checkout $(git_main_branch)                                                                                                  |\n| gcd                  | git checkout $(git_develop_branch)                                                                                               |\n| gcmsg                | git commit -m                                                                                                                    |\n| gco                  | git checkout                                                                                                                     |\n| gcor                 | git checkout --recurse-submodules                                                                                                |\n| gcount               | git shortlog -sn                                                                                                                 |\n| gcp                  | git cherry-pick                                                                                                                  |\n| gcpa                 | git cherry-pick --abort                                                                                                          |\n| gcpc                 | git cherry-pick --continue                                                                                                       |\n| gcs                  | git commit -S                                                                                                                    |\n| gd                   | git diff                                                                                                                         |\n| gdca                 | git diff --cached                                                                                                                |\n| gdcw                 | git diff --cached --word-diff                                                                                                    |\n| gdct                 | git describe --tags $(git rev-list --tags --max-count=1)                                                                         |\n| gds                  | git diff --staged                                                                                                                |\n| gdt                  | git diff-tree --no-commit-id --name-only -r                                                                                      |\n| gdnolock             | git diff $@ \":(exclude)package-lock.json\" \":(exclude)&ast;.lock\"                                                                 |\n| gdu                  | git diff @{u}                                                                                                                    |\n| gdv                  | git diff -w $@ \\| view -                                                                                                         |\n| gdw                  | git diff --word-diff                                                                                                             |\n| gf                   | git fetch                                                                                                                        |\n| gfa                  | git fetch --all --prune                                                                                                          |\n| gfg                  | git ls-files \\| grep                                                                                                             |\n| gfo                  | git fetch origin                                                                                                                 |\n| gg                   | git gui citool                                                                                                                   |\n| gga                  | git gui citool --amend                                                                                                           |\n| ggf                  | git push --force origin $(current_branch)                                                                                        |\n| ggfl                 | git push --force-with-lease origin $(current_branch)                                                                             |\n| ggl                  | git pull origin $(current_branch)                                                                                                |\n| ggp                  | git push origin $(current_branch)                                                                                                |\n| ggpnp                | ggl && ggp                                                                                                                       |\n| ggpull               | git pull origin \"$(git_current_branch)\"                                                                                          |\n| ggpur                | ggu                                                                                                                              |\n| ggpush               | git push origin \"$(git_current_branch)\"                                                                                          |\n| ggsup                | git branch --set-upstream-to=origin/$(git_current_branch)                                                                        |\n| ggu                  | git pull --rebase origin $(current_branch)                                                                                       |\n| gpsup                | git push --set-upstream origin $(git_current_branch)                                                                             |\n| ghh                  | git help                                                                                                                         |\n| gignore              | git update-index --assume-unchanged                                                                                              |\n| gignored             | git ls-files -v \\| grep \"^[[:lower:]]\"                                                                                           |\n| git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk                                                                   |\n| gk                   | gitk --all --branches                                                                                                            |\n| gke                  | gitk --all $(git log -g --pretty=%h)                                                                                             |\n| gl                   | git pull                                                                                                                         |\n| glg                  | git log --stat                                                                                                                   |\n| glgp                 | git log --stat -p                                                                                                                |\n| glgg                 | git log --graph                                                                                                                  |\n| glgga                | git log --graph --decorate --all                                                                                                 |\n| glgm                 | git log --graph --max-count=10                                                                                                   |\n| glo                  | git log --oneline --decorate                                                                                                     |\n| glol                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'                           |\n| glols                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat                    |\n| glod                 | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'                           |\n| glods                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short              |\n| glola                | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all                     |\n| glog                 | git log --oneline --decorate --graph                                                                                             |\n| gloga                | git log --oneline --decorate --graph --all                                                                                       |\n| glp                  | git log --pretty=\\<format\\>                                                                                                      |\n| gm                   | git merge                                                                                                                        |\n| gmom                 | git merge origin/$(git_main_branch)                                                                                              |\n| gmtl                 | git mergetool --no-prompt                                                                                                        |\n| gmtlvim              | git mergetool --no-prompt --tool=vimdiff                                                                                         |\n| gmum                 | git merge upstream/$(git_main_branch)                                                                                            |\n| gma                  | git merge --abort                                                                                                                |\n| gp                   | git push                                                                                                                         |\n| gpd                  | git push --dry-run                                                                                                               |\n| gpf                  | git push --force-with-lease                                                                                                      |\n| gpf!                 | git push --force                                                                                                                 |\n| gpoat                | git push origin --all && git push origin --tags                                                                                  |\n| gpr                  | git pull --rebase                                                                                                                |\n| gpu                  | git push upstream                                                                                                                |\n| gpv                  | git push -v                                                                                                                      |\n| gr                   | git remote                                                                                                                       |\n| gra                  | git remote add                                                                                                                   |\n| grb                  | git rebase                                                                                                                       |\n| grba                 | git rebase --abort                                                                                                               |\n| grbc                 | git rebase --continue                                                                                                            |\n| grbd                 | git rebase $(git_develop_branch)                                                                                                 |\n| grbi                 | git rebase -i                                                                                                                    |\n| grbm                 | git rebase $(git_main_branch)                                                                                                    |\n| grbo                 | git rebase --onto                                                                                                                |\n| grbs                 | git rebase --skip                                                                                                                |\n| grev                 | git revert                                                                                                                       |\n| grh                  | git reset                                                                                                                        |\n| grhh                 | git reset --hard                                                                                                                 |\n| groh                 | git reset origin/$(git_current_branch) --hard                                                                                    |\n| grm                  | git rm                                                                                                                           |\n| grmc                 | git rm --cached                                                                                                                  |\n| grmv                 | git remote rename                                                                                                                |\n| grrm                 | git remote remove                                                                                                                |\n| grs                  | git restore                                                                                                                      |\n| grset                | git remote set-url                                                                                                               |\n| grss                 | git restore --source                                                                                                             |\n| grst                 | git restore --staged                                                                                                             |\n| grt                  | cd \"$(git rev-parse --show-toplevel \\|\\| echo .)\"                                                                                |\n| gru                  | git reset --                                                                                                                     |\n| grup                 | git remote update                                                                                                                |\n| grv                  | git remote -v                                                                                                                    |\n| gsb                  | git status -sb                                                                                                                   |\n| gsd                  | git svn dcommit                                                                                                                  |\n| gsh                  | git show                                                                                                                         |\n| gsi                  | git submodule init                                                                                                               |\n| gsps                 | git show --pretty=short --show-signature                                                                                         |\n| gsr                  | git svn rebase                                                                                                                   |\n| gss                  | git status -s                                                                                                                    |\n| gst                  | git status                                                                                                                       |\n| gsta                 | git stash push                                                                                                                   |\n| gsta                 | git stash save                                                                                                                   |\n| gstaa                | git stash apply                                                                                                                  |\n| gstc                 | git stash clear                                                                                                                  |\n| gstd                 | git stash drop                                                                                                                   |\n| gstl                 | git stash list                                                                                                                   |\n| gstp                 | git stash pop                                                                                                                    |\n| gsts                 | git stash show --text                                                                                                            |\n| gstu                 | git stash --include-untracked                                                                                                    |\n| gstall               | git stash --all                                                                                                                  |\n| gsu                  | git submodule update                                                                                                             |\n| gsw                  | git switch                                                                                                                       |\n| gswc                 | git switch -c                                                                                                                    |\n| gts                  | git tag -s                                                                                                                       |\n| gtv                  | git tag \\| sort -V                                                                                                               |\n| gtl                  | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl                                                                       |\n| gunignore            | git update-index --no-assume-unchanged                                                                                           |\n| gunwip               | git log -n 1 \\| grep -q -c \"\\-\\-wip\\-\\-\" && git reset HEAD~1                                                                     |\n| gup                  | git pull --rebase                                                                                                                |\n| gupv                 | git pull --rebase -v                                                                                                             |\n| gupa                 | git pull --rebase --autostash                                                                                                    |\n| gupav                | git pull --rebase --autostash -v                                                                                                 |\n| glum                 | git pull upstream $(git_main_branch)                                                                                             |\n| gwch                 | git whatchanged -p --abbrev-commit --pretty=medium                                                                               |\n| gwip                 | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m \"--wip-- [skip ci]\"           |\n| gam                  | git am                                                                                                                           |\n| gamc                 | git am --continue                                                                                                                |\n| gams                 | git am --skip                                                                                                                    |\n| gama                 | git am --abort                                                                                                                   |\n| gamscp               | git am --show-current-patch                                                                                                      |\n\n### Main branch preference\n\nFollowing the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using\na branch name other than `master`. In this case, we favor the shorter, neutral and descriptive term `main`. This means\nthat any aliases and functions that previously used `master`, will use `main` if that branch exists. We do this via the\nfunction `git_main_branch`.\n\n### Deprecated aliases\n\nThese are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.\n\n| Alias  | Command                                                | Modification                                           |\n| :----- | :----------------------------------------------------- | :----------------------------------------------------- |\n| gap    | `git add --patch`                                      | new alias `gapa`                                       |\n| gcl    | `git config --list`                                    | new alias `gcf`                                        |\n| gdc    | `git diff --cached`                                    | new alias `gdca`                                       |\n| gdt    | `git difftool`                                         | no replacement                                         |\n| ggpull | `git pull origin $(current_branch)`                    | new alias `ggl` (`ggpull` still exists for now though) |\n| ggpur  | `git pull --rebase origin $(current_branch)`           | new alias `ggu` (`ggpur` still exists for now though)  |\n| ggpush | `git push origin $(current_branch)`                    | new alias `ggp` (`ggpush` still exists for now though) |\n| gk     | `gitk --all --branches`                                | now aliased to `gitk --all --branches`                 |\n| glg    | `git log --stat --max-count = 10`                      | now aliased to `git log --stat --color`                |\n| glgg   | `git log --graph --max-count = 10`                     | now aliased to `git log --graph --color`               |\n| gwc    | `git whatchanged -p --abbrev-commit --pretty = medium` | new alias `gwch`                                       |\n\n## Functions\n\n### Current\n\n| Command                | Description                                                                                              |\n|:-----------------------|:---------------------------------------------------------------------------------------------------------|\n| `grename <old> <new>`  | Rename `old` branch to `new`, including in origin remote                                                 |\n| current_branch         | Return the name of the current branch                                                                    |\n| git_current_user_name  | Returns the `user.name` config value                                                                     |\n| git_current_user_email | Returns the `user.email` config value                                                                    |\n| git_main_branch        | Returns the name of the main branch: `main` if it exists, `master` otherwise                             |\n| git_develop_branch     | Returns the name of the develop branch: `dev`, `devel`, `development` if they exist, `develop` otherwise |\n\n### Work in Progress (WIP)\n\nThese features allow to pause a branch development and switch to another one (_\"Work in Progress\"_,  or wip). When you want to go back to work, just unwip it.\n\n| Command          | Description                                     |\n|:-----------------|:------------------------------------------------|\n| work_in_progress | Echoes a warning if the current branch is a wip |\n| gwip             | Commit wip branch                               |\n| gunwip           | Uncommit wip branch                             |\n\n### Deprecated functions\n\n| Command                | Description                             | Reason                                                          |\n|:-----------------------|:----------------------------------------|:----------------------------------------------------------------|\n| current_repository     | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias) |\n</yakaai_skills>"}