{"id":13528756,"url":"https://github.com/joseluisq/gitnow","last_synced_at":"2025-04-05T20:06:00.029Z","repository":{"id":45126972,"uuid":"200592061","full_name":"joseluisq/gitnow","owner":"joseluisq","description":"Speed up your Git workflow. :tropical_fish:","archived":false,"fork":false,"pushed_at":"2023-11-25T22:25:48.000Z","size":221,"stargazers_count":350,"open_issues_count":6,"forks_count":22,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-04-14T05:36:13.385Z","etag":null,"topics":["bitbucket","fish-packages","fish-shell","git","git-workflow","github","keybindings","semver","ssh"],"latest_commit_sha":null,"homepage":"https://github.com/joseluisq/gitnow","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/joseluisq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":"joseluisq","custom":"paypal.me/joseluisqs"}},"created_at":"2019-08-05T06:04:05.000Z","updated_at":"2024-04-11T08:24:58.000Z","dependencies_parsed_at":"2023-12-20T16:13:25.260Z","dependency_job_id":"52d3841d-ee0a-4a26-a482-720a7585210e","html_url":"https://github.com/joseluisq/gitnow","commit_stats":{"total_commits":162,"total_committers":15,"mean_commits":10.8,"dds":0.191358024691358,"last_synced_commit":"91bda1d0ffad2d68b21a1349f9b55a8cb5b54f35"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fgitnow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fgitnow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fgitnow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joseluisq%2Fgitnow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joseluisq","download_url":"https://codeload.github.com/joseluisq/gitnow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245938756,"owners_count":20697086,"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":["bitbucket","fish-packages","fish-shell","git","git-workflow","github","keybindings","semver","ssh"],"created_at":"2024-08-01T07:00:23.933Z","updated_at":"2025-04-05T20:05:59.996Z","avatar_url":"https://github.com/joseluisq.png","language":"Shell","readme":"# GitNow ![CI](https://github.com/joseluisq/gitnow/workflows/CI/badge.svg?branch=master) [![Releases](https://img.shields.io/github/release/joseluisq/gitnow.svg?label=latest)](https://github.com/joseluisq/gitnow/releases)\n\n\u003e Speed up your Git workflow. 🐠\n\nGitNow contains a command set that provides high-level operations on the top of [Git](https://git-scm.com/book/en/v2). \u003cbr\u003e\nA [Fish shell](https://fishshell.com/) alternative inspired by [git-friendly](https://github.com/jamiew/git-friendly).\n\n## Install\n\n__Stable:__\n\n[Paket](https://github.com/joseluisq/paket)\n\n```sh\npaket add joseluisq/gitnow@2.12.0\n```\n\n[Fisher](https://github.com/jorgebucaran/fisher)\n\n\n```sh\nfisher install joseluisq/gitnow@2.12.0\n```\n\n[Fundle](https://github.com/danhper/fundle)\n\n```sh\nfundle plugin joseluisq/gitnow --url 'git@github.com:joseluisq/gitnow.git#tags/2.12.0'\n```\n\n__Latest changes:__\n\n```sh\npaket add joseluisq/gitnow\n\n# Or\nfisher install joseluisq/gitnow\n\n# Or\nfundle plugin joseluisq/gitnow\n```\n\n\u003csmall\u003e_**Note:** Use that method if you don't want to wait for a new release._\u003c/small\u003e\n\n## Commands\n\n| Command | Shortcut | Description |\n|---|---|---|\n| [gitnow](#gitnow) | | Show available commands and version info.\n| __Git__ | | |\n| [state](#state) | Alt + S | Show the working tree status in a compact way. |\n| [stage](#stage) | Alt + E | Stage files in current working directory. |\n| [unstage](#unstage) | Ctrl + E | Unstage files in current working directory. |\n| [show](#show) | Alt + M | Show commit detail objects. |\n| [untracked](#untracked) | | Check for untracked files and directories. |\n| [commit](#commit) | | Commit changes to the repository. |\n| [commit-all](#commit-all) | Alt + C | Add and commit all changes to the repository. |\n| [tag](#tag) | | List and create release tag versions following Semver 2.0. |\n| [pull](#pull) | Alt + D | Pull changes from remote server but saving uncommitted changes. |\n| [push](#push) | Alt + P | Push commit changes to remote repository. |\n| [upstream](#upstream) | Alt + U | Commit all changes and push them to remote server. |\n| [move](#move) | | Moves from current branch to another but stashing your changes. |\n| [merge](#merge) | | Merges a local branch into the active one. |\n| [assume](#assume) | | Ignores changes in certain files temporarily. |\n| [logs](#logs) | Alt + L | Shows logs in a fancy way. |\n| __Gitflow__ | | |\n| [feature](#feature) (1) | Alt + F | Creates a new _feature_ ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch. |\n| [hotfix](#hotfix) (1) | Alt + H | Creates a new _hotfix_ ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch. |\n| [bugfix](#bugfix) (1) | | Creates a new _bugfix_ ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch. |\n| [release](#release) (1) | | Creates a new _release_ ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch. |\n| __Bonus__ | | |\n| [github](#github) | | Clone a _GitHub_ repository using SSH. |\n| [bitbucket](#bitbucket) | | Clone a _Bitbucket Cloud_ repository using SSH. |\n\n**Note:**\n\n- (1) This command key binding can creates a new branch taking as name some text of the clipboard (optional).\n\n## Tips\n\n- Skip the password request creating a SSH key for your [Github](https://help.github.com/en/articles/connecting-to-github-with-ssh) or [Bitbucket](https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html) account.\n- SSH setup is required for using `github` and `bitbucket` commands.\n- Take advantage of keybindings in order to get faster operations.\n\n## Gitnow configuration file\n\nTo configure Gitnow just copy the [.gitnow](conf.d/.gitnow) default file and place it in your home directory (`~/.gitnow`).\n\n### Options\n\nThe **_[ options ]_** section contains some options in order to adjust centain Gitnow behaviour.\n\nFor more details about the options please take a look at [.gitnow](conf.d/.gitnow) file content.\n\n### Keybindings\n\nThe [.gitnow](conf.d/.gitnow) file contains a **_[ keybindings ]_** section with default shortcuts (key-value pairs).\nBut you can add, edit or remove keybindings on demand. If you want custom keybindings for your commands just run [fish_key_reader](https://fishshell.com/docs/current/cmds/fish_key_reader.html) in your terminal, then press the key or key's combinations to get the right characters sequence and finally set it to your preferred command in your `~/.gitnow` file.\n\n## Usage\n\n### gitnow\n\nShow available commands and version info.\n\n```sh\ngitnow\n```\n\n### state\n\nShow the working tree status in compact way.\n\n```sh\nstate\nCurrent working tree status:\n## master...origin/master\n M README.md\n M conf.d/gitnow.fish\n```\n\n### stage\n\nStage files in current working directory.\n\n__Note:__ This command does `git add .` by default. Add your `git add` flags as usual to overwrite it.\n\n```sh\n# a) git add . (by default)\nstage\n# b) custom 1\nstage README.md LICENSE.md\n# c) custom 2\nstage . --ignore-errors\n```\n\n### unstage\n\nUnstage files in current working directory.\n\n__Note:__ This command does `git reset .` by default. Add your `git reset` flags as usual to overwrite it.\n\n```sh\n# a) git reset . (by default)\nunstage\n# b) custom 1\nunstage README.md LICENSE.md\n# c) custom 2\nunstage --soft HEAD\n```\n\n### show\n\nShow commit detail objects.\n\n__Note:__ This command does `git show --compact-summary HEAD` by default. Add your `git show` flags as usual to overwrite it.\n\n```sh\n# a) Default\nshow\n# b) Custom flags\nshow --compact-summary HEAD~1\n```\n\n### untracked\n\nCheck for untracked files and directories that could be removed of current working directory.\n\n__Notes:__\n\n- This command does `git clean --dry-run -d` only.\n- It doesn't remove anything, just makes a clean checking of files and directories that could be removed.\n- No flags are supported.\n\n```sh\nuntracked\n# Would remove .file1\n# Would remove dir1/\n# Would remove file2\n```\n\n### commit\n\nCommit changes to the repository.\n\n__Note:__ This command does `git commit` only. Add your `git commit` flags as usual to overwrite it.\n\n```sh\ncommit\ncommit README.md\ncommit .\ncommit --amend\n```\n\n### commit-all\n\nAdd and commit all changes to the repository.\n\n__Note:__ This command does `stage` and then `commit .`. No flags supported.\n\n```sh\n# stage \u0026\u0026 commit .\ncommit-all\n```\n\n### tag\n\nList and create release tag versions following [The Semantic Versioning 2.0.0](https://semver.org/).\n\n#### Show information about Tag options\n\n```sh\ntag -h                                                                                                                                          (13s 251ms)\n# NAME\n#       Gitnow: tag - List or tag commits following The Semantic Versioning 2.0.0 (Semver) [1]\n#       [1] https://semver.org/\n# EXAMPLES\n#       List tags: tag\n#       Custom tag: tag \u003cmy tag name\u003e\n#       Semver tag: tag --major\n# OPTIONS:\n#       Without options all tags are listed in a lexicographic order and tag names are treated as versions\n#       -x --major         Tag auto-incrementing a major version number\n#       -y --minor         Tag auto-incrementing a minor version number\n#       -z --patch         Tag auto-incrementing a patch version number\n#       -l --latest        Show only the latest Semver release tag version (no suffixed ones or others)\n#       -h --help          Show information about the options for this command\n```\n\n#### List all available tags\n\nTags are listed in a lexicographic order and tag names are treated as versions.\n\n```sh\ntag\n```\n\n#### Get latest Semver release tag name\n\n\u003e **Note:** This option gets only the latest *Semver release version* tag name but no any suffixed version ones or another kind of version names. The same apply when you create correlative Semver tags. See next section.\n\n```sh\ntag --latest\n```\n\n#### Create Semver correlative tag names\n\n\u003e **Note:** Following commands take care about optional `v` prefixed tag names.\n\u003e So for example if a `v1.0.0` is found as latest major then the next correlative tag name major will be `v2.0.0`.\n\u003e Otherwise for example if a `1.0.0` is found as latest minor then the next correlative tag name minor will be `1.1.0`.\n\n```sh\n# Create a correlative Semver major tag\ntag --major\n# Create a correlative Semver minor tag\ntag --minor\n# Create a correlative Semver patch tag\ntag --patch\n```\n\n#### Create custom tag names\n\n```sh\ntag \u003csome tag name\u003e\n```\n\n### pull\n\nPull changes from remote server but saving uncommitted changes.\n\nThis command makes this for you:\n\n- Save your uncommitted changes locally using `--autostash` option.\n- Local changes you made will be rebased (`---rebase` option) on top of the remote changes.\n- Return your uncommitted changes locally again.\n\n__Auto mode:__\n\n- `pull`\n- `pull \u003cbranch_name\u003e`\n- `pull \u003cremote_origin\u003e \u003cbranch_name\u003e`\n\n__Manual mode:__\n\n- `pull \u003cremote_origin\u003e \u003cbranch_name\u003e --verbose`\n\n```sh\npull\n📥 Pulling changes\nArguments mode: Auto\nDefault arguments: --rebase --autostash\nRemote: origin (https://github.com/joseluisq/gitnow.git)\nBranch: master\n\nFrom https://github.com/joseluisq/gitnow\n * branch            master     -\u003e FETCH_HEAD\nCreated autostash: 473315a\nHEAD is now at 9de2f93 update commands\nCurrent branch master is up to date.\nApplied autostash.\n```\n\n### push\n\nPush commit changes to remote repository.\n\n__Note:__ This command is equivalent to `git push --set-upstream [your arguments...]`.\n\n```sh\n# Auto mode (current origin and branch)\npush\n# Manual mode\npush \u003corigin_name\u003e \u003cbranch_name\u003e \u003c--some_other_flags\u003e\n```\n\n### upstream\n\nCommit all changes and push them to remote server.\n\n__Note:__ This command does `commit-all` and then `push`. No flags supported.\n\n```sh\nupstream\n```\n\n### move\n\nSwitch from current branch to another but stashing uncommitted changes\n\n__Note:__ This command does `git stash` then `git checkout \u003cother_branch\u003e` and finally `git stash pop` (possible to disable). It also takes care that `\u003cother_branch\u003e` matches with the existing local branches.\n\n__Additional options:__\n\n- Use `-u` (or `--upstream`) flag to fetch a remote branch.\n- Use `-n` (or `--no-apply-stash`) flag to prevent stashed changes to be applied.\n\n```sh\nmove other_branch\n\n# Branch `ghost_branch` was not found. No possible to switch.\nmove ghost_branch\n\n# With -u flag the branch will be fetched from remote origin.\nmove -u feature/new_remote_branch\n\n# With -n flag stashed changes will not be applied.\nmove -n feature/new_remote_branch\n\n# Possible to combine two option flags\nmove -un feature/another_remote_branch\n```\n\n### merge\n\nMerge a local branch into the active one\n\n__Note:__ This command does a simple `git merge \u003cother branch\u003e`.\n\n__Additional options:__\n\n- Use `-a` (or `--abort`) flag instead of a branch name to abort a conflicted merge.\n- Use `-c` (or `--continue`) flag instead of a branch name to continue a merge.\n\n```sh\nmerge other_branch\n\n# Local branch ghost_branch was not found. Not possible to merge.\nmerge ghost_branch\n\n# With -a flag the conflicted merge will be aborted.\nmerge -a\n```\n\n### assume\n\nIgnore changes in certain files temporarily.\n\n__Note:__ This command performs `git update-index --[no-]assume-unchanged` to ignore changes in certain files temporarily or revert those changes back.\n\n__Options:__\n\n- `-n` `--no-assume`: No assume unchanged files to be ignored (revert option)\n- `-h` `--help`: Show information about the options for this command\n\n```sh\n# a) Ignore files temporarily\nassume Cargo.toml README.md\n\n# b) Revert file ignored changes\nassume -n Cargo.toml README.md\n```\n\n### feature\n\nCreates a new feature ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch.\n\n__Note:__ Your new branch will always be lowercase without special characters or whitespaces (underscores instead).\n\n```sh\nfeature feat1\n# \u003e feature/feat1\nfeature \"This is my New FEATURE Branch\"\n# \u003e feature/this_is_my_new_feature_branch\n```\n\n### hotfix\n\nCreates a new hotfix ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch.\n\n__Note:__ Your new branch will always be lowercase without special characters or whitespaces (underscores instead).\n\n```sh\nhotfix fix1\n# \u003e hotfix/fix1\nhotfix \"This is my New FIX Branch\"\n# \u003e hotfix/this_is_my_new_fix_branch\n```\n\n### bugfix\n\nCreates a new bugfix ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch.\n\n__Note:__ Your new branch will always be lowercase without special characters or whitespaces (underscores instead).\n\n```sh\nbugfix fix1\n# \u003e bugfix/fix1\nbugfix \"This is my New bugFIX Branch\"\n# \u003e bugfix/this_is_my_new_bugfix_branch\n```\n\n### release\n\nCreates a new release ([Gitflow](https://github.com/nvie/gitflow)) branch from current branch.\n\n__Note:__ Your new branch will always be lowercase without special characters or whitespaces (underscores instead).\n\n```sh\nrelease fix1\n# \u003e release/fix1\nrelease \"This is my New release Branch\"\n# \u003e release/this_is_my_new_bugfix_branch\n```\n\n### logs\n\nShows logs in a fancy way.\n\n__Note:__ This command does `git log HEAD` by default using a pretty format. Add your `git log` flags as usual to overwrite it.\n\n```sh\n# shows all logs (default)\nlogs\n\n# shows logs using git log parameters and flags (custom)\nlogs 8b09088\nlogs --before \"yesterday\" --after=\"1 week ago\"\n```\n\n### github\n\nClone a GitHub repository using SSH.\n\nExamples:\n\n```sh\ngithub username/repo-name\ngithub username repo-name\n\n# requires a `user.github` username Git config entry\ngithub repo-name\n```\n\n### bitbucket\n\nClone a Bitbucket Cloud repository using SSH.\n\nExamples:\n\n```sh\nbitbucket username/repo-name\nbitbucket username repo-name\n\n# requires a `user.bitbucket` username Git config entry\nbitbucket repo-name\n```\n\n__Note:__ For cloning some repo only, it's necessary to set your Github or Bitbucket username to global config before like:\n\n```sh\n# a) GitHub\ngit config --global user.github \"your_username\"\n# b) Bitbucket\ngit config --global user.bitbucket \"your_username\"\n```\n\n## Bonus\n\n- [Git Cheat Sheet](https://github.com/joseluisq/git-cheat-sheet/) — Another Git cheat sheet yet.\n- [Git useful aliases](https://github.com/joseluisq/git-useful-aliases) — Set of useful Git aliases.\n- [Gitflow](https://github.com/nvie/gitflow)\n\n## Contributions\n\n[Pull requests](https://github.com/joseluisq/gitnow/pulls) and [issues](https://github.com/joseluisq/gitnow/issues) are welcome.\n\n## License\nMIT license\n\n© 2016-present [Jose Quintana](http://github.com/joseluisq)\n","funding_links":["https://github.com/sponsors/joseluisq","paypal.me/joseluisqs"],"categories":["Plugins","Shell","应用相关"],"sub_categories":["git"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoseluisq%2Fgitnow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoseluisq%2Fgitnow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoseluisq%2Fgitnow/lists"}