{"id":13632041,"url":"https://github.com/qw3rtman/gg","last_synced_at":"2025-05-15T07:03:40.724Z","repository":{"id":28024046,"uuid":"31519188","full_name":"qw3rtman/gg","owner":"qw3rtman","description":"Git Goodies: At-A-Glance, Efficient, and Aesthetically Pleasing Git Shortcuts","archived":false,"fork":false,"pushed_at":"2024-06-11T19:40:01.000Z","size":1283,"stargazers_count":1372,"open_issues_count":14,"forks_count":50,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-04-11T19:56:11.373Z","etag":null,"topics":["git"],"latest_commit_sha":null,"homepage":"https://git.io/goodies","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qw3rtman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-03-02T02:05:34.000Z","updated_at":"2025-04-09T07:33:47.000Z","dependencies_parsed_at":"2024-06-19T05:18:11.528Z","dependency_job_id":null,"html_url":"https://github.com/qw3rtman/gg","commit_stats":{"total_commits":501,"total_committers":14,"mean_commits":"35.785714285714285","dds":0.07185628742514971,"last_synced_commit":"14e45a8e946eb7a04ebacc07e3a1f1f4235b1cd8"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qw3rtman%2Fgg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qw3rtman%2Fgg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qw3rtman%2Fgg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qw3rtman%2Fgg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qw3rtman","download_url":"https://codeload.github.com/qw3rtman/gg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253992536,"owners_count":21996127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git"],"created_at":"2024-08-01T22:02:49.248Z","updated_at":"2025-05-15T07:03:40.677Z","avatar_url":"https://github.com/qw3rtman.png","language":"Shell","funding_links":[],"categories":["Shell","Tools"],"sub_categories":["Bash"],"readme":"Git Goodies\n===========\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"http://nimit.io/images/gg/gg.gif\"/\u003e\u003c/p\u003e\n\n`gg` helps you *work with `git` more efficiently*, saving you keystrokes for your most prized projects.\n\nThink of `gg` as a wrapper for the `git` commands that you run all the time; a wrapper that adds functionality and is aesthetically pleasing.\n\n### Hold up. Aren't these basically Git aliases?\nThere's more to the package than just shortcuts or aliases.\n\nFor example, the `gg s` command presents you with an easy to look at a quick glance status of your repository. In addition, there are aesthetic changes that increase the intuitiveness of Git itself.\n\nHere's a screenshot of the `gg s` command in action:\n\n![`gg s`](http://nimit.io/images/gg/s.png)\n\nYou can see the current local branch and its respective remote branch, the latest commit hash and message, the local repository's position in relation with the respective remote repository (alerting you that you should push two commits to reach up-to-date status with the remote repository), the status of staging and commits, and the commits that waiting to be pushed.\n\n**All of this from one four character command.**\n\n## Installation\n**Linux/OSX**\n```sh\ncurl -fsSL git.io/gg.sh | bash\n```\n(HTTPS installation also available via `curl -fsSL https://git.io/gg.sh | bash`)\n\nAll this installation script does is download the `gg` script, make it an executable, and copy it to your $PATH (/usr/local/bin). For copying to your $PATH, it may require you to enter your password. If there is a better way to do this, please send in a pull request.\n\nIf you don't feel comfortable executing a random script, [its source is available here](https://github.com/qw3rtman/gg/blob/master/install.sh).\n\n**To take advantage of user-specific features (such as `gg cl \u003cyour-repository\u003e`), make sure you `git config --global --add gg.username \u003cyour-username\u003e`.**\n\n**If you use [`oh-my-zsh`](https://github.com/robbyrussell/oh-my-zsh), `gg` is already aliased to `git gui citool`. If you don't use this alias, you can unalias it in your `.zshrc` file by adding `unalias gg` at the end of `.zshrc`.**\n\n`gg` relies solely on `git` and attempts to use built-in Shell features over external programs, such as using Bash substitution instead of `sed`.\n\n**Windows:**  \n\nNote: This assumes that you already have the `git` installed on your system and\nit is configured to be used on the command line.\n\n* Open a Command Prompt window and navigate to a folder included in your PATH.\n* Run the following commands\n```\npowershell -Command \"(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/qw3rtman/gg/master/bin/gg', 'gg')\"\npowershell -Command \"(New-Object Net.WebClient).DownloadFile('https://raw.githubusercontent.com/qw3rtman/gg/master/bin/gg.cmd', 'gg.cmd')\"\n```\n* Open a new Command Prompt window and enjoy.\n\n## Usage\n\n```\n\n  usage:\n    gg [options] [COMMAND] [args]\n\n  commands:\n    gg                              Display this help information\n    gg i                            Initialize new Git repository\n    gg ig                           List available .gitignore templates\n    gg ig \u003ctemplate\u003e                Add .gitignore file from \u003ctemplate\u003e\n    gg igf \u003cfile ...\u003e               Add all \u003cfile\u003e(s) to .gitignore\n    gg cl \u003curl\u003e                     Clone repository from \u003curl\u003e\n    gg a                            Add all files\n    gg a \u003cfile ...\u003e                 Add all \u003cfile\u003e(s)\n    gg c \u003cmessage\u003e                  Add all files and commit with \u003cmessage\u003e\n    gg cn \u003cmessage\u003e                 Commit with \u003cmessage\u003e\n    gg uc \u003ccount\u003e                   Go back (uncommit) \u003ccount\u003e commits\n    gg rc \u003cmessage\u003e                 Add all files and recommit (amend) with \u003cmessage\u003e\n    gg rcn \u003cmessage\u003e                Recommit (amend) with \u003cmessage\u003e\n    gg p                            Push all commits to remote\n    gg pl                           Pull all commits from remote\n    gg f                            Fetch all commits from remote\n    gg s                            Display repository status\n    gg l                            Display repository commit log\n    gg b                            List all branches in repository\n    gg b \u003cbranch\u003e                   Create and checkout \u003cbranch\u003e\n    gg ch                           List all branches in repository\n    gg ch \u003cbranch\u003e                  Checkout \u003cbranch\u003e\n    gg in \u003chash\u003e                    Display info about \u003chash\u003e\n\n  options:\n    -V, --version                   Output current version of Git Goodies\n    -h, --help                      Display this help information\n\n```\n\n### Initializing repositories\n\n![`gg i`](http://nimit.io/images/gg/init.png)\n\n* `gg i`\n* `gg init`\n\n### Adding a template to .gitignore\n\n![`gg ig`](http://nimit.io/images/gg/ignore_template.png)\n\n* `gg ig \u003ctemplate\u003e`\n* `gg ignore \u003ctemplate\u003e`\n\n*Templates provided by [.gitignore.io](https://www.gitignore.io/)*\n\n### Adding a file to .gitignore\n\n![`gg igf`](http://nimit.io/images/gg/ignore_file.png)\n\n* `gg igf \u003cfile ...\u003e`\n* `gg ignorefile \u003cfile ...\u003e`\n\n### Cloning a repository\n\n![`gg cl`](http://nimit.io/images/gg/clone.png)\n\n* `gg cl \u003curl\u003e`\n* `gg clone \u003curl\u003e`\n\n* `gg cl \u003cgithub-username/repository\u003e`\n* `gg clone \u003cgithub-username/repository\u003e`\n\n* `gg cl \u003cyour-repository\u003e` (if you have user-specific features enabled by `git config --global --add gg.username \u003cyour-username\u003e`)\n* `gg clone \u003cyour-repository\u003e` (if you have user-specific features enabled by `git config --global --add gg.username \u003cyour-username\u003e`)\n\n*The URL can be provided in any format (SSH, HTTP, etc.)*\n\n### Adding all files\n\n![`gg a`](http://nimit.io/images/gg/add.png)\n\n* `gg a`\n* `gg add`\n\n### Adding specific files\n\n![`gg a`](http://nimit.io/images/gg/add_file.png)\n\n* `gg a \u003cfile ...\u003e`\n* `gg add \u003cfile ...\u003e`\n\n### Adding all and committing\n\n![`gg c`](http://nimit.io/images/gg/commit.png)\n\n* `gg c \u003cmessage\u003e`\n* `gg commmit \u003cmessage\u003e`\n\n*If no \u003cmessage\u003e is provided, a generic one listing all files modified/added will be generated.*\n\n### Committing\n\n![`gg cn`](http://nimit.io/images/gg/commit_no_add.png)\n\n* `gg cn \u003cmessage\u003e`\n\n*If no \u003cmessage\u003e is provided, a generic one listing all files modified/added will be generated.*\n\n### Uncommiting (resetting: `git reset HEAD~count`)\n\n![`gg back`](http://nimit.io/images/gg/uncommit.png)\n\n* `gg uc \u003ccount\u003e`\n* `gg uncommit \u003ccount\u003e`\n* `gg back \u003ccount\u003e`\n\n*If no \u003ccount\u003e is provided, 1 will be used.*\n\n### Adding all and recommitting (amending: `git commit --amend`)\n\n![`gg am`](http://nimit.io/images/gg/amend.png)\n\n* `gg rc \u003cmessage\u003e`\n* `gg recommit \u003cmessage\u003e`\n* `gg am \u003cmessage\u003e`\n* `gg amend \u003cmessage\u003e`\n\n*If no \u003cmessage\u003e is provided, a generic one listing all files modified/added will be generated.*\n\n### Recommitting (amending: `git commit --amend`)\n\n![`gg am`](http://nimit.io/images/gg/amend_no_add.png)\n\n* `gg rcn \u003cmessage\u003e`\n* `gg amn \u003cmessage\u003e`\n\n*If no \u003cmessage\u003e is provided, a generic one listing all files modified/added will be generated.*\n\n### Pushing\n\n![`gg p`](http://nimit.io/images/gg/push.png)\n\n* `gg p`\n* `gg push`\n\n### Pulling\n\n![`gg pl`](http://nimit.io/images/gg/pull.png)\n\n* `gg pl`\n* `gg pull`\n\n### Fetching\n\n![`gg f`](http://nimit.io/images/gg/fetch.png)\n\n* `gg f`\n* `gg fetch`\n\n### Getting repository status\n\n![`gg s`](http://nimit.io/images/gg/status.png)\n\n* `gg s`\n* `gg status`\n\n### Displaying commit log\n\n![`gg l`](http://nimit.io/images/gg/log.png)\n\n* `gg l`\n* `gg log`\n\n### Listing all branches\n\n![`gg b`](http://nimit.io/images/gg/branch.png)\n\n* `gg b`\n* `gg ch`\n\n### Checking out existing branch\n\n![`gg ch`](http://nimit.io/images/gg/checkout.png)\n\n* `gg ch \u003cbranch\u003e`\n\n### Creating and checking out new branch\n\n![`gg b`](http://nimit.io/images/gg/branch_checkout.png)\n\n* `gg b \u003cbranch\u003e`\n\n### Displaying commit info\n\n![`gg in`](http://nimit.io/images/gg/info.png)\n\n* `gg in \u003chash\u003e`\n* `gg info \u003chash\u003e`\n* `gg view \u003chash\u003e`\n\n*If no \u003chash\u003e is provided, HEAD (last commit) will be used.*\n\n### Displaying **Git Goodies** version\n\n![`gg -V`](http://nimit.io/images/gg/version.png)\n\n* `gg -V`\n* `gg --version`\n\n### Displaying **Git Goodies** help\n\n![`gg -h`](http://nimit.io/images/gg/help.png)\n\n* `gg`\n* `gg -h`\n* `gg --help`\n* `gg help`\n\n## Contributing\n\nContributions are always welcome, from a typo in the README to an enhancement of a feature to a completely new feature itself.\n\nAvoid [code smells](http://blog.codinghorror.com/code-smells/), [create reusable code](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), and follow the loosely-modeled coding standard found in the current code.\n\nFork the code, make a new branch, and send in a pull request.\n\nSee the [TODO](#todo) below for some contributions you can work on!\n\n## TODO\n\n* Integrate with GitHub (Issue [#34](https://github.com/qw3rtman/gg/issues/34))\n* Add pretty graphs (Issue [#51](https://github.com/qw3rtman/gg/issues/51))\n* Some form of persistent user profile (Issue [#57](https://github.com/qw3rtman/gg/issues/57))\n* Shortcut to quickly setup new repository (Issue [#65](https://github.com/qw3rtman/gg/issues/65))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqw3rtman%2Fgg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqw3rtman%2Fgg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqw3rtman%2Fgg/lists"}