[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[Makefile]\nindent_style = tab\n\n[*.patch]\ntrim_trailing_whitespace = false\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.html]\ntrim_trailing_whitespace = false\n\n[*.py]\nindent_size = 4\n\n[*.bats]\nindent_style = tab\nindent_size = 4\n\n[tests/*.sh]\nindent_style = tab\nindent_size = 4\n"
  },
  {
    "path": ".github/.ignore_words",
    "content": "gool\nCant\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--\n\nNote\n\n* Mark the PR as draft until it's ready to be reviewed.\n* Please update the documentation to reflect the changes made in the PR.\n* If the command is covered by tests under ./tests, please add/update tests for any changes unless you have a good reason. \n* Make a new commit to resolve conversations instead of `push -f`.\n* To resolve merge conflicts, merge from the `main` branch instead of rebasing over `main`.\n* Please wait for the reviewer to mark a conversation as resolved.\n\n-->\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check out code.\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: 'Get Changed Files'\n        id: 'files'\n        run: |\n          CHANGED_FILES=$(git diff --name-only \"${BASE_SHA:-$BEFORE_SHA}...${HEAD_SHA:-$GITHUB_REF}\")\n          echo \"::notice::Changed files: $CHANGED_FILES\"\n          {\n            echo \"added_modified<<EOF\"\n            echo \"$CHANGED_FILES\"\n            echo \"EOF\"\n          } >> \"$GITHUB_OUTPUT\"\n        env:\n          BASE_SHA: ${{ github.event.pull_request.base.sha }}\n          HEAD_SHA: ${{ github.event.pull_request.head.sha }}\n          BEFORE_SHA: \"${{ github.event.before }}\"\n      - uses: 'actions/setup-go@v6'\n        with:\n          go-version: '1.20'\n      - name: 'Install EditorConfig Lint'\n        run: go install 'github.com/editorconfig-checker/editorconfig-checker/cmd/editorconfig-checker@latest'\n      - name: 'Check EditorConfig Lint'\n        run: echo \"$FILES\" | xargs ~/go/bin/editorconfig-checker\n        env:\n          # NOTE: use env to pass the output in order to avoid possible injection attacks\n          FILES: \"${{ steps.files.outputs.added_modified }}\"\n      - name: checkstyle\n        run: ./scripts/checkstyle.py\n      - name: Shellcheck\n        run: shellcheck --severity=error bin/* ./*.sh\n      - name: Lint and format Python with Ruff\n        uses: astral-sh/ruff-action@v3\n\n  typo:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check out code.\n        uses: actions/checkout@v6\n      - name: Install poetry\n        run: pip install poetry\n      - name: Set up Python\n        uses: actions/setup-python@v6\n        with:\n          cache: 'poetry'\n          cache-dependency-path: \"tests/pyproject.toml\"\n          python-version-file: \"tests/pyproject.toml\"\n      - name: Install dependencies\n        run: |\n          cd tests || exit\n          poetry install --only dev\n      - name: spell check\n        run: |\n          cd tests\n          git grep --cached -l '' .. | \\\n            grep -v -e 'History\\.md' -e 'AUTHORS' -e 'man/.*\\.1' -e 'man/.*\\.html' | \\\n            xargs poetry run codespell --ignore-words=../.github/.ignore_words\n\n  test-pytest:\n    name: 'Test with Pytest'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n        with:\n           submodules: recursive\n      - name: Install poetry\n        run: pip install poetry\n      - name: Set up Python\n        uses: actions/setup-python@v6\n        with:\n          python-version: '3.12'\n          cache: 'poetry'\n          cache-dependency-path: \"tests/pyproject.toml\"\n          python-version-file: \"tests/pyproject.toml\"\n      - name: Install Python Dependencies\n        run: |\n          cd tests || exit\n          poetry install --only test\n      - name: Test with Pytest\n        run: |\n          cd tests\n          poetry run pytest\n\n  test-bats:\n    name: 'Test with Bats'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n        with:\n           submodules: recursive\n      - name: Setup Bats\n        id: setup-bats\n        uses: bats-core/bats-action@4.0.0\n        with:\n          bats-version: 'v1.8.1'\n      - name: Test with Bats\n        env:\n         BATS_LIB_PATH: ${{ steps.setup-bats.outputs.lib-path }}\n         TERM: xterm\n        run: bats ./tests\n\n  build:\n    strategy:\n      fail-fast: false\n      matrix:\n        platform:\n          - ubuntu-latest\n          - macos-latest\n    runs-on: ${{ matrix.platform }}\n    steps:\n      - name: Check out code.\n        uses: actions/checkout@v6\n      - name: Linux Install\n        if: matrix.platform == 'ubuntu-latest'\n        run: sudo apt-get install -y bsdmainutils\n      - name: Script\n        run: ./check_integrity.sh\n      - name: Brew release\n        if: matrix.platform == 'macos-latest'\n        run: |\n          mkdir ../release && git archive --format=tar.gz HEAD > ../release/git-extras-release.tar.gz\n          cd ../release\n          tar -xzf git-extras-release.tar.gz && make PREFIX=$(pwd) INSTALL_VIA=brew\n          ./bin/git-extras update | grep \"brew upgrade git-extras\"\n"
  },
  {
    "path": ".github/workflows/stale.yaml",
    "content": "name: \"Maintenance: Close Stale PRs\"\non:\n  schedule:\n    - cron: \"30 1 * * *\"\n\npermissions:\n  pull-requests: \"write\"\n\njobs:\n  stale:\n    runs-on: \"ubuntu-latest\"\n    if: github.repository_owner == 'tj'\n    steps:\n      - uses: \"actions/stale@v10\"\n        with:\n          close-pr-message: \"This PR was closed because it has been stalled for 365 days with no activity. Feel free to make a new PR if you wish to continue\"\n          days-before-pr-stale: 350\n          days-before-pr-close: 15\n"
  },
  {
    "path": ".gitignore",
    "content": ".venv/\n__pycache__/\ncoverage/\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"vendor/bats-all\"]\n\tpath = vendor/bats-all\n\turl = https://github.com/hyperupcall/bats-all\n"
  },
  {
    "path": ".pytest.ini",
    "content": "[pytest]\nminversion = 7.4\naddopts = -ra -q\ntestpaths = tests\nfaulthandler_timeout = 5\n"
  },
  {
    "path": "AUTHORS",
    "content": "git-extras is written and maintained by various contributors:\n\nMaintainers\n```````````\n- TJ Holowaychuk <tj@vision-media.ca>\n- Hemanth.HM <hemanth.hm@gmail.com>\n- Nimit Kalra <me@nimit.io>\n- Nicolai Skogheim <nicolai.skogheim@gmail.com>\n- spacewander <spacewanderlzx@gmail.com>\n- Edwin Kofler <edwin@kofler.dev>\n- Leroy <vanpipy@gmail.com>\n\nPatches and Suggestions\n```````````````````````\n- Jonhnny Weslley\n- Tobias Fendin\n- LeeW\n- timfeirg\n- Niklas Schlimm\n- nickl-\n- CJ\n- Paul Wise\n- Damien Tardy-Panis\n- Mark Eissler\n- Yuriy VG\n- Leila Muhtasib\n- Richard Fearn\n- Bill Wood\n- Jesús Espino\n- Rémy HUBSCHER\n- go2null\n- Andrew Janke\n- David Baumgold\n- Jan Schulz\n- Kenneth Reitz\n- Leroy\n- Mark Pitman\n- Peter Benjamin\n- Günther Grill\n- Luke Childs\n- Sasha Khamkov\n- equt\n- oikarinen\n- vyas\n- Don Harper\n- Pierre Ayoub\n- Robin Winslow\n- Ross Smith II\n- Yi EungJun\n- dependabot[bot]\n- grindhold\n- wyattscarpenter\n- Aggelos Orfanakos\n- Camille Reynders\n- Carlos Prado\n- Chris Hall\n- Damian Krzeminski\n- NANRI\n- Alexander Krasnukhin\n- Phally\n- Rico Sta. Cruz\n- Takuma Yamaguchi\n- thomas menzel\n- vr8ce\n- Brian J Brennan\n- Dominik Gedon\n- Hogan Long\n- Ivan Malopinsky\n- Jonathan \"Duke\" Leto\n- Julio Napurí\n- Justin Dugger\n- Nils Winkler\n- Philipp Klose\n- Raphael Boidol\n- Richard Russon\n- Sam Bostock\n- Vladimir Jimenez\n- gisphm\n- jacobherrington\n- overengineer\n- phigoro\n- wooorm\n- Alexis GRIMALDI\n- Allan Odgaard\n- Andre Cerqueira\n- Austin Ziegler\n- Beth Skurrie\n- Brice Dutheil\n- Curtis McEnroe\n- David Rogers\n- Devin Withers\n- Domenico Rotiroti\n- Evan Grim\n- Florian H\n- Gert Van Gool\n- Guillaume Seren\n- Hozefa\n- Igor Ostapenko\n- Jean Jordaan\n- Joshua Li\n- Justin Guenther\n- Kylie McClain\n- Marc Harter\n- Matiss\n- Nate Jones\n- Newell Zhu\n- Patryk Małek\n- Paul Schreiber\n- Richard Littauer\n- Tjaart van der Walt\n- Tom Vincent\n- Wil Moore III\n- William Montgomery\n- Ye Lin Aung\n- luozexuan\n- roxchgt\n- soffolk\n- 0xflotus\n- Abdullah\n- Adam Parkin\n- Adriaan Zonnenberg\n- Akim Demaille\n- Alessandro Pagiaro\n- Alex McHale\n- Aloxaf\n- Amir Tocker\n- Ammar Najjar\n- Amory Meltzer\n- Andreas Duering\n- Andrei Petcu\n- Andrew Griffiths\n- Andrew Marcinkevičius\n- Andrew Starr-Bochicchio\n- Andrew Sullivan Cant\n- Andrey Elizarov\n- Angel Aguilera\n- Antoine Beaupré\n- Aurélien Scoubeau\n- Balazs Nadasdi\n- Ben Parnell\n- Beni Ben Zikry\n- Brandon Zylstra\n- Brian Goad\n- Brian Murrell\n- Bruno Sutic\n- Caleb Maclennan\n- Carl Casbolt\n- Carlos Rodríguez\n- Christophe Badoit\n- Ciro Nunes\n- CleanMachine1\n- CodeByZach\n- Craig MacGregor\n- Dan Goodliffe\n- Dan Jackson\n- Dan Kilman\n- Daniel Bruder\n- Daniel Lublin\n- Daniel Schildt\n- Dave James Miller\n- David Hartmann\n- Dominic Barnes\n- Dung Quang\n- Edward Betts\n- Eli Schwartz\n- Emil Kjelsrud\n- François M\n- George Crabtree\n- Gerrit-K\n- Greg Allen\n- Guilhem Saurel\n- Guillermo Rauch\n- Gunnlaugur Thor Briem\n- Hasse Ramlev Hansen\n- Heiko Becker\n- Isaac Mungai\n- J.C. Yamokoski\n- Jack O. Wasey\n- James Manning\n- James Zhu\n- Jan Krueger\n- Jared Baur\n- Jarod Stewart\n- Jason Young\n- Jens K. Mueller\n- Jeremy Lin\n- Jesse Sipprell\n- Jianjin Fan\n- Jobin Kurian\n- Johannes Ewald\n- John Evans\n- John Hoffmann\n- Jon Ander Peñalba\n- Josh McKinney\n- Joshua Appelman\n- José María Gutiérrez @TheTechOddBug\n- Katrin Leinweber\n- Kevin Woo\n- Konstantin Schukraft\n- Kurban Mallachiev\n- Leandro López\n- Lone\n- Luis Miguel Hernanz\n- Maarten Winter\n- Marco Glasbergen\n- Matan Rosenberg\n- Mathieu D. (MatToufoutu)\n- Matt\n- Matt Colyer\n- Matt Headley\n- Matthew Avant\n- Mattias Andersson\n- Michael Komitee\n- Michael Matuzak\n- Michele Bologna\n- Montak Oleg\n- Moritz Grauel\n- Nate Eagleson\n- Nate Fischer\n- Nathan Rajlich\n- Nick Campbell\n- Nick Payne\n- Nicolas Kosinski\n- Niklas Fiekas\n- Oliver Kopp\n- Orestis\n- Peter Bittner\n- Piotr Górski\n- Prayag Verma\n- Przemek Kitszel\n- R. Martinho Fernandes\n- Raphael Fleischlin\n- Rasmus Wriedt Larsen\n- René\n- Revisor\n- Riceball LEE\n- Rob Kennedy\n- Robin von Bülow\n- Ryan Bohn\n- Sachin Gupta\n- Sam Thursfield\n- Sandro\n- Sascha Andres\n- SchleimKeim\n- Sean Molenaar\n- Sebastian Gniazdowski\n- Sebastián Mancilla\n- Simon Tate\n- Stefan VanBuren\n- Stephen Mathieson\n- Steve Mao\n- Stu Feldt\n- SukkaW\n- Tim Preston\n- Timothy Hwang\n- Tin Lai\n- Todd Wolfson\n- Tom Andrade\n- Tom Ashworth\n- Tony\n- TweeKane\n- Valérian Galliat\n- Vitaly Chikunov\n- Wei Lee\n- Wei Wu\n- Wen Sun\n- Wiktor Żurawik\n- Xavier Krantz\n- Xiaopei Li\n- Zeeshan Ahmed\n- ax1036\n- creynders\n- dead-horse\n- eszabpt\n- fengkx\n- jykntr\n- kang\n- meza\n- neydroid\n- nulltask\n- sgleizes\n- tfendin\n- tiemonl\n- zentarul\n- zeroDivisible\n- zhiyanfoo\n- Áron Hoffmann\n- Étienne BERSAC\n- ☃ pitr\n- 单元源\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThanks for contributing! Please read this document before you make a PR.\n\n## Supported Platforms\n\nAny changes must support the following platforms:\n\n- macOS\n- Linux\n- OpenBSD (You may need to browse their man page)\n\nYour change must also be compatible with the dependency constraints that we specify in [Installation](./Installation.md). If you aren't sure if a feature is compatible, check the manual or release notes. For example, the Bash changelog is [here](https://git.savannah.gnu.org/cgit/bash.git/tree/NEWS?h=devel).\n\nIf you aren't able to test your new command on a platform, make that clear in your PR; someone else may be able to test it on their system.\n\n## Adding a New Command\n\nLet's say you wish to add a new command. Assuming your new command is named `foo`:\n\n1. Write a bash script under `./bin` called `git-foo`. The script should be started with `#!/usr/bin/env bash`.\n2. Read `./man/Readme.md` and write documentation for `git-foo`.\n3. Don't forget to introduce it in `Commands.md`.\n4. Update `./etc/git-extras-completion.zsh`. Just follow existing code.\n5. (Optional) Update `./etc/bash_completion.sh`.\n6. (Optional) Update `./etc/git-extras.fish`.\n7. (Optional) Add a test under `./tests`.\n8. Run `./check_integrity.sh foo` to check if all done. (You may also run `./check_integrity.sh` to check all commands.)\n\nYou are welcome to open up an issue to discuss new commands or features before opening a pull request.\n\n## Submitting a pull request\n\nPlease follow the suggestion in `./.github/PULL_REQUEST_TEMPLATE.md`.\n"
  },
  {
    "path": "Commands.md",
    "content": "\n - [`git abort`](#git-abort)\n - [`git alias`](#git-alias)\n - [`git archive-file`](#git-archive-file)\n - [`git authors`](#git-authors)\n - [`git browse`](#git-browse)\n - [`git browse-ci`](#git-browse-ci)\n - [`git bulk`](#git-bulk)\n - [`git brv`](#git-brv)\n - [`git changelog`](#git-changelog)\n - [`git clear`](#git-clear)\n - [`git clear-soft`](#git-clear-soft)\n - [`git coauthor`](#git-coauthor)\n - [`git commits-since`](#git-commits-since)\n - [`git continue`](#git-continue)\n - [`git contrib`](#git-contrib)\n - [`git count`](#git-count)\n - [`git cp`](#git-cp)\n - [`git create-branch`](#git-create-branch)\n - [`git delete-branch`](#git-delete-branch)\n - [`git delete-merged-branches`](#git-delete-merged-branches)\n - [`git delete-squashed-branches`](#git-delete-squashed-branches)\n - [`git delete-submodule`](#git-delete-submodule)\n - [`git delete-tag`](#git-delete-tag)\n - [`git delta`](#git-delta)\n - [`git effort`](#git-effort)\n - [`git extras`](#git-extras)\n - [`git feature`](#git-feature)\n - [`git force-clone`](#git-force-clone)\n - [`git fork`](#git-fork)\n - [`git fresh-branch`](#git-fresh-branch)\n - [`git get`](#git-get)\n - [`git gh-pages`](#git-gh-pages)\n - [`git graft`](#git-graft)\n - [`git guilt`](#git-guilt)\n - [`git ignore`](#git-ignore)\n - [`git ignore-io`](#git-ignore-io)\n - [`git info`](#git-info)\n - [`git local-commits`](#git-local-commits)\n - [`git lock`](#git-lock)\n - [`git locked`](#git-locked)\n - [`git magic`](#git-magic)\n - [`git merge-into`](#git-merge-into)\n - [`git merge-repo`](#git-merge-repo)\n - [`git missing`](#git-missing)\n - [`git mr`](#git-mr)\n - [`git obliterate`](#git-obliterate)\n - [`git paste`](#git-paste)\n - [`git pr`](#git-pr)\n - [`git psykorebase`](#git-psykorebase)\n - [`git pull-request`](#git-pull-request)\n - [`git reauthor`](#git-reauthor)\n - [`git rebase-patch`](#git-rebase-patch)\n - [`git release`](#git-release)\n - [`git rename-branch`](#git-rename-branch)\n - [`git rename-file`](#git-rename-file)\n - [`git rename-tag`](#git-rename-tag)\n - [`git rename-remote`](#git-rename-remote)\n - [`git repl`](#git-repl)\n - [`git reset-file`](#git-reset-file)\n - [`git root`](#git-root)\n - [`git rscp`](#git-scp)\n - [`git scp`](#git-scp)\n - [`git sed`](#git-sed)\n - [`git setup`](#git-setup)\n - [`git show-merged-branches`](#git-show-merged-branches)\n - [`git show-tree`](#git-show-tree)\n - [`git show-unmerged-branches`](#git-show-unmerged-branches)\n - [`git stamp`](#git-stamp)\n - [`git squash`](#git-squash)\n - [`git standup`](#git-standup)\n - [`git summary`](#git-summary)\n - [`git sync`](#git-sync)\n - [`git touch`](#git-touch)\n - [`git undo`](#git-undo)\n - [`git unlock`](#git-unlock)\n - [`git utimes`](#git-utimes)\n - [`git unwip`](#git-unwip)\n - [`git wip`](#git-wip)\n\n## git extras\n\nThe main `git-extras` command.\n\nOutput the current `--version`:\n\n```bash\n$ git extras --version\n```\n\nList available commands:\n\n```bash\n$ git extras --help\n```\n\nUpdate to the latest `git-extras`:\n\n```bash\n$ git extras update\n```\n## git gh-pages\n\nSets up the `gh-pages` branch.  (See [GitHub Pages](https://pages.github.com/) documentation.)\n\n## git feature\n\nCreate/Merge the given feature branch `name`:\n\n```bash\n$ git feature dependencies\n```\n\nTo Setup a remote tracking branch:\n\n```bash\n$ git feature dependencies -r upstream\n```\n_Note_: If no remote name is passed with the `-r` option, it will push to _origin_.\n\nAfterwards, the same command will check it out:\n\n```bash\n$ git checkout master\n$ git feature dependencies\n```\n\nWhen finished, we can `feature finish` to merge it into the current branch:\n\n```bash\n$ git checkout master\n$ git feature finish dependencies\n```\n\n_Note_: If a remote is setup to track the branch, it will be deleted.\n\n## git contrib\n\nOutput `author`'s contributions to a project:\n\n```bash\n$ git contrib visionmedia\nvisionmedia (18):\n  Export STATUS_CODES\n  Replaced several Array.prototype.slice.call() calls with Array.prototype.unshift.call()\n  Moved help msg to node-repl\n  Added multiple arg support for sys.puts(), print(), etc.\n  Fix stack output on socket error\n  ...\n```\n\n## git summary\n\nOutputs a repo or path summary:\n\n```bash\n$ git summary\n\nproject     : git-extras\nrepo age    : 10 months ago\nbranch      : master\nlast active : 3 weeks ago\nactive on   : 93 days\ncommits     : 163\nfiles       : 93\nuncommitted : 3\nauthors     :\n   97   Tj Holowaychuk          59.5%\n   37   Jonhnny Weslley         22.7%\n    8   Kenneth Reitz           4.9%\n    5   Aggelos Orfanakos       3.1%\n    3   Jonathan \"Duke\" Leto    1.8%\n    2   Gert Van Gool           1.2%\n    2   Domenico Rotiroti       1.2%\n    2   Devin Withers           1.2%\n    2   TJ Holowaychuk          1.2%\n    1   Nick Campbell           0.6%\n    1   Alex McHale             0.6%\n    1   Jason Young             0.6%\n    1   Jens K. Mueller         0.6%\n    1   Guillermo Rauch         0.6%\n```\n\nThis command can also take a *committish*, and will print a summary for commits in\nthe committish range:\n\n```bash\n$ git summary v42..\n```\n\nThis command can also take an options `--line`, will print a summary by lines\n\n```bash\n$ git summary --line\n\nproject  : git-extras\n lines    : 8420\n authors  :\n 2905 Tj Holowaychuk            34.5%\n 1901 Jonhnny Weslley           22.6%\n 1474 nickl-                    17.5%\n  653 Leila Muhtasib            7.8%\n  275 Tony                      3.3%\n  267 Jesús Espino             3.2%\n  199 Philipp Klose             2.4%\n  180 Michael Komitee           2.1%\n  178 Tom Vincent               2.1%\n  119 TJ Holowaychuk            1.4%\n  114 Damian Krzeminski         1.4%\n   66 Kenneth Reitz             0.8%\n   22 Not Committed Yet         0.3%\n   17 David Baumgold            0.2%\n   12 Brian J Brennan           0.1%\n    6 Leandro López            0.1%\n    6 Jan Krueger               0.1%\n    6 Gunnlaugur Thor Briem     0.1%\n    3 Hogan Long                0.0%\n    3 Curtis McEnroe            0.0%\n    3 Alex McHale               0.0%\n    3 Aggelos Orfanakos         0.0%\n    2 Phally                    0.0%\n    2 NANRI                     0.0%\n    2 Moritz Grauel             0.0%\n    1 Jean Jordaan              0.0%\n    1 Daniel Schildt            0.0%\n```\n\nThe `--line` option can also take a path, which will print a filtered summary for that folder or file.\n\nThe option `--output-style` tries to put as much summary information of the repo into defined styled way as possible.\nThis is how the `tabular` output style and `oneline` output style look like\n\n```bash\n$ git summary --output-style tabular\n# Repo     | Age       | Last active | Active on | Commits | Uncommitted | Branch\ngit-extras | 13 years  | 7 hours ago | 807 days  | 1703    | 3           | master\n\n$ git summary --output-style oneline\ngit-extras / age: 13 years / last active: 7 hours ago / active on 807 days / commits: 1703 / uncommitted: 3 / branch: master\n```\n\n## git effort\n\n  Displays \"effort\" statistics, currently just the number of commits per file, showing highlighting where the most activity is. The \"active days\" column is the total number of days which contributed modifications to this file.\n\n```\nnode (master): git effort --above 15 {src,lib}/*\n```\n\n  If you wish to ignore files with commits `<=` a value you may use `--above`:\n\n```\n$ git effort --above 5\n```\n\n  If you wish to see only the commits in the last month you may use `--since` (it supports the same syntax like `git log --since`):\n\n```\n $ git effort -- --since='last month'\n```\n\n  By default `git ls-files` is used, however you may pass one or more files to `git-effort(1)`, for example:\n\n```\n$ git effort bin/* lib/*\n```\n\n## git bulk\n\n`git bulk` adds convenient support for operations that you want to execute on multiple git repositories.\n\n  * simply register workspaces that contain multiple git repos in their directory structure\n  * run any git command on the repositories of the registered workspaces in one command to `git bulk`\n  * use the \"guarded mode\" to check on each execution\n\n```bash\nusage: git bulk [-g] ([-a]|[-w <ws-name>]) <git command>\n       git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>)\n       git bulk --removeworkspace <ws-name>\n       git bulk --addcurrent <ws-name>\n       git bulk --purge\n       git bulk --listall\n```\n\n  Register a workspace so that `git bulk` knows about it (it will be registered in your `.gitconfig`):\n\n```bash\n$ git bulk --addworkspace personal ~/workspaces/personal\n```\n\n  Notice that `<ws-root-directory>` must be an absolute path (or an environment variable pointing to an absolute path).\n  In the case of a **single quoted environment variable**, it will be dereferenced at `git-bulk` runtime, suitable for dynamic workspaces (*e.g.*, defined in your `.bashrc`).\n  As an illustration:\n\n```bash\n$ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'\n```\n\n  With option `--from` the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.\n\n```bash\n$ git bulk --addworkspace projectX ~/workspaces/projectx --from https://github.com/x/project-x.git\n\n# OR with a file containing many repositories on each line:\n$ git bulk --addworkspace projectX ~/workspaces/projectx --from ~/workspaces/repositories.txt\n```\nwith `repositories.txt` be like:\n```\nhttps://github.com/x/project-x-1.git\nhttps://github.com/x/project-x-2.git\nhttps://github.com/x/project-x-3.git\n```\n\n  Register the current directory as a workspace to `git bulk`\n\n```bash\n$ git bulk --addcurrent personal\n```\n\n  List all registered workspaces:\n\n```bash\n$ git bulk --listall\nbulkworkspaces.personal /Users/niklasschlimm/workspaces/personal\n\n```\n\n  Run a git command on the repositories of the current workspace:\n\n```bash\n$ git bulk fetch\n```\n\n![fetchdemo](https://cloud.githubusercontent.com/assets/876604/23709805/e8178406-041a-11e7-9a0c-01de5fbf8944.png)\n\n  Run a git command on one specific workspace and its repositories:\n\n```bash\n$ git bulk -w personal fetch\n```\n\n  Run a git command on all workspaces and their repositories:\n\n```bash\n$ git bulk -a fetch\n```\n\n  Run a git command but ask user for confirmation on every execution (guarded mode):\n\n```bash\n$ git bulk -g fetch\n```\n\n  Remove a registered workspace:\n\n```bash\n$ git bulk --removeworkspace personal\n```\n  Remove all registered workspaces:\n\n```bash\n$ git bulk --purge\n```\n\n## git brv\n\nPretty listing of branches sorted by the date of their last commit.\n\n```bash\n$ git brv\n2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n```\n\nWhen your repo has many branches, it can be more convenient to see this list in reverse. This can be set as the default by setting the git-extras.brv.reverse git option to true.\n\n```bash\n$ git brv --reverse\n2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n```\n\n## git repl\n\nGit read-eval-print-loop. Lets you run `git` commands without typing 'git'.\n\nCommands can be prefixed with an exclamation mark (!) to be interpreted as\na regular command.\n\nType `exit`, `quit`, or `q` to end the repl session.\n\nAny arguments to git repl will be taken as the first command to execute in\nthe repl.\n\n### CONFIGURATION\n\nCommands entered in a repl session will be saved to a history file and be available in\nfuture sessions, similar to a shell or programming language repl. By default,\nthere is one global history file, ~/.git_repl_history. You can specify that your projects\neach have their own independent history file. This file will be saved in .git_repl_history\nat the top level of the repo, and will need to be added to the repo or global .gitignore.\n\n```bash\n# remove the --global flag to configure only an individual project to have its own history file\ngit config --global git-extras.repl.use-local-history \"true\"\n```\n\nYou can specify a default command to run when hitting enter:\n\n```bash\ngit config --global git-extras.repl.on-enter-command \"git status -sb\"\n```\n\nYou can configure which character is used at the end of the prompt: (default `>`):\n\n```bash\ngit config --global git-extras.repl.prompt-character \"±\"\n```\n\nYou can specify the prefix for the prompt, or remove it (default `git`):\n\n```bash\ngit config --global git-extras.repl.prefix \"\"\n```\n\nYou can have the name of the current git repo shown in the prompt (default `false`):\n\n```bash\ngit config --global git-extras.repl.show-project-name \"true\"\n```\n\n```bash\n$ git repl\ngit version 2.34.1\ngit-extras version 7.3.0\nType 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl.\n\ngit (master)> ls-files\nHistory.md\nMakefile\nReadme.md\nbin/git-changelog\nbin/git-count\nbin/git-delete-branch\nbin/git-delete-tag\nbin/git-ignore\nbin/git-release\n\ngit (master)> !echo Straight from the shell!\nStraight from the shell!\n\ngit (master)> quit\n```\n\n## git coauthor\n\nAdd a co-author to the last commit\n\n```bash\n$ git coauthor user user@email.com\n\n[master b62ceae] Add documentation files\n Date: Sat Aug 17 17:33:53 2019 -0500\n 2 files changed, 145 insertions(+), 0 deletions(-)\n create mode 100644 README.md\n create mode 100644 CONTRIBUTING.md\n\n $ git log -1\n\ncommit b62ceae2685e6ece071f3c3754e9b77fd0a35c88 (HEAD -> master)\nAuthor: user person <userperson@email.com>\nDate:   Sat Aug 17 17:33:53 2019 -0500\n\n    Add documentation files\n\n    Co-authored-by: user <user@email.com>\n```\n\n## git commits-since\n\nList commits since `date` (defaults to \"last week\"):\n\n```bash\n$ git commits-since\n... changes since last week\nTJ Holowaychuk - Fixed readme\nTJ Holowaychuk - Added git-repl\nTJ Holowaychuk - Added git-delete-tag\nTJ Holowaychuk - Added git-delete-branch\n\n$ git commits-since yesterday\n... changes since yesterday\nTJ Holowaychuk - Fixed readme\n```\n\n## git count\n\nOutput commit count:\n\n```bash\n$ git count\n\ntotal 1844\n```\n\nOutput detailed commit count:\n\n```bash\n$ git count --all\n\nvisionmedia (1285)\nTj Holowaychuk (430)\nAaron Heckmann (48)\ncsausdev (34)\nciaranj (26)\nGuillermo Rauch (6)\nBrian McKinney (2)\nNick Poulden (2)\nBenny Wong (2)\nJustin Lilly (1)\nisaacs (1)\nAdam Sanderson (1)\nViktor Kelemen (1)\nGregory Ritter (1)\nGreg Ritter (1)\newoudj (1)\nJames Herdman (1)\nMatt Colyer (1)\n\ntotal 1844\n```\n\n## git fork\n\nFork the given github &lt;repo&gt;. Like clone but forks first.\n\n```Shell\n$ git fork https://github.com/LearnBoost/expect.js\n```\n\nor just:\n\n```Shell\n$ git fork LearnBoost/expect.js\n```\n\nDoes the following:\n- forks the repo (prompts for github username and pass)\n- clones the repo into the current directory\n- adds the original repo as a remote so can track upstream changes\n- all remotes refs use git over ssh if configured, otherwise https will be used\n\n\n```Shell\n$ cd expect.js && git remote -v\norigin          git@github.com:<user>/expect.js (fetch)\norigin          git@github.com:<user>/expect.js (push)\nupstream        git@github.com:LearnBoost/expect.js (fetch)\nupstream        git@github.com:LearnBoost/expect.js (push)\n```\n\n## git force-clone\n\nIf the clone target directory exists and is a git repository, reset its\ncontents to a clone of the remote.\n\n``` bash\n$ git force-clone [-b {branch_name}] {remote_url} {destination_path}\n$ git force-clone -b master https://github.com/tj/git-extras ./target-directory\n```\n\n**CAUTION**: If the repository exists, this will destroy *all* local changes\nto the repository - changed files will be reset and local branches will be\nremoved.\n\n[More information](man/git-force-clone.md).\n\n## git release\n\nRelease commit with the given &lt;tag&gt; and other options:\n\n```bash\n$ git release 0.1.0\n```\n\nIf you are using [semver](https://semver.org) in your project, you could also use the command below:\n(Run `git help release` for more information)\n\n```bash\n$ git release --semver major/minor/patch\n```\n\nDoes the following:\n\n  - Executes _.git/hooks/pre-release.sh_ (if present), passing it the given tag and remain arguments\n  - Commits changes (to changelog etc) with message \"Release &lt;tag&gt;\"\n  - Tags with the given &lt;tag&gt;\n  - Push the branch / tags\n  - Executes _.git/hooks/post-release.sh_ (if present), passing it the given tag and remain arguments\n\n\n## git rename-branch\n\nRename a branch locally, and sync to remote via `git push`.\n\n```\n# renames any branch\n$ git rename-branch old-name new-name\n\n# renames current branch\n$ git rename-branch new-name\n```\n\n## git rename-file\n\nRename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.\nIt combines the functionality of the `mv` command and `git mv`. This is particularly useful for renaming files or directories\nto change only their case, which might not be detected by Git on case-insensitive filesystems.\n\n```bash\n# Rename a file\ngit rename-file old_filename new_filename\n\n# Rename a directory\ngit rename-file old_directory new_directory\n```\n\n## git rename-tag\n\nRename a tag (locally and remotely).\n```\n$ git tag test\n$ git push --tags\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver.com:myuser/myrepository.git\n    * [new tag]         test -> test\n$ git tag\ntest\n$ git rename-tag test test2\nDeleted tag 'test' (was 1111111)\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver.com:myuser/myrepository.git\n    * [new tag]         test2 -> test2\nremote: warning: Deleting a non-existent ref.\nTo git@myserver.com:myuser/myrepository.git\n    - [deleted]         refs/tag/test\n$ git tag\ntest2\n```\n\n## git rename-remote\n\nRename a git remote regardless of name conflict, and then list current git remotes.\n```\n$ git remote -v\norigin\tgit@myserver.com:myuser/foo.git (fetch)\norigin\tgit@myserver.com:myuser/foo.git (push)\nupstream\tgit@myserver.com:myuser/bar.git (fetch)\nupstream\tgit@myserver.com:myuser/bar.git (push)\n$ git-rename-remote upstream origin\norigin\tgit@myserver.com:myuser/bar.git (fetch)\norigin\tgit@myserver.com:myuser/bar.git (push)\n```\n\n## git reauthor\n\nRewrite history to change author's identity.\n\nReplace the personal email and name of Jack to his work ones\n```bash\n$ git reauthor --old-email jack@perso.me --correct-email jack@work.com --correct-name 'Jack Foobar'\n```\n\nReplace the email and name of Jack to the ones defined in the Git config\n```bash\n$ git reauthor --old-email jack@perso.me --use-config\n```\n\nReplace only the email of Jack (keep the name already used)\n```bash\n$ git reauthor --old-email jack@perso --correct-email jack@perso.me\n```\n\nChange only the committer email of Jack (keep the author email already used)\n```bash\n$ git reauthor --old-email jack@perso.me --correct-email jack@work.com --type committer\n```\n\nSet Jack's identity as the only one of the whole repository\n```bash\n$ git reauthor --all --correct-email jack@perso.me --correct-name Jack\n```\n\nSet Jack as the only committer of the whole repository (keeps authors)\n```bash\n$ git reauthor --all --correct-email jack@perso.me --correct-name Jack --type committer\n```\n\n\n## git alias\n\nDefine, search and show aliases.\n\nDefine a new alias:\n\n```bash\n$ git alias last \"cat-file commit HEAD\"\n```\n\nSearch for aliases that match a pattern (one argument):\n\n```bash\n$ git alias ^la\nlast = cat-file commit HEAD\n```\n\nShow all aliases (no arguments):\n\n```bash\n$ git alias\ns = status\namend = commit --amend\nrank = shortlog -sn --no-merges\nwhatis = show -s --pretty='tformat:%h (%s, %ad)' --date=short\nwhois = !sh -c 'git log -i -1 --pretty=\"format:%an <%ae>\n```\n\n## git ignore\n\nToo lazy to open up `.gitignore`?  Me too!\n\n```bash\n$ git ignore build \"*.o\" \"*.log\"\n... added 'build'\n... added '*.o'\n... added '*.log'\n```\n\nWithout any patterns, `git-ignore` displays currently ignored patterns in both your global and your local `.gitignore` files:\n\n```bash\n$ git ignore\nGlobal gitignore: /Users/foo/.gitignore_global\n*~\n.metadata\n---------------------------------\nLocal gitignore: .gitignore\nbuild\n*.o\n*.log\n```\n\nTo show just the global or just the local file's contents, you can use the following optional parameters:\n\n* `-g` or `--global` to show just the global file\n* `-l` or `--local` to show just the local file\n* `-p` or `--private` to show just the repository's file\n\n```bash\n$ git ignore -g\nGlobal gitignore: /Users/foo/.gitignore_global\n*~\n.metadata\n```\n\n```bash\n$ git ignore -l\nLocal gitignore: .gitignore\nbuild\n*.o\n*.log\n```\n\n## git ignore-io\n\nGenerate sample gitignore file from [gitignore.io](https://www.toptal.com/developers/gitignore)\n\nWithout option, `git ignore-io <type>` shows the sample gitignore of specified types on screen.\n\n```bash\n$ git ignore-io vim\n\n    # Created by https://www.toptal.com/developers/gitignore/api/vim\n\n    ### Vim ###\n    [._]*.s[a-w][a-z]\n    [._]s[a-w][a-z]\n    *.un~\n    Session.vim\n    .netrwhist\n    *~\n```\n\nTo export it to `.gitignore` file you can use the following options:\n\n* `-a` or `--append` to append the result to `.gitignore`\n* `-r` or `--replace` to export `.gitignore` with the result\n\n```bash\n$ git ignore-io vim python\n```\n\nFor efficiency, `git ignore-io` store all available types at `~/.gi_list`.\nTo list all the available types:\n\n* `-l` or `-L` : These two options will show the list in different format. Just try it.\n\nYou can also search type from the list by:\n\n* `-s <word>` or `--search <word>`\n\n```bash\n$ git ignore-io -s ja\n\n    django\n    jabref\n    java\n    ninja\n```\n\n\n## git info\n\nShow information about the repo:\n\n```bash\n$ git info\n\n    ## Remote URLs:\n\n    origin              git@github.com:sampleAuthor/git-extras.git (fetch)\n    origin              git@github.com:sampleAuthor/git-extras.git (push)\n\n    ## Remote Branches:\n\n    origin/HEAD -> origin/master\n    origin/myBranch\n\n    ## Local Branches:\n\n    myBranch\n    * master\n\n    ## Submodule(s):\n\n      a234567 path2submodule1/submodule1 (branch/tag)\n    + b234567 path2submodule2/submodule2 (branch/tag)\n    - c234567 path2submodule3/submodule3 (branch/tag)\n      e234567 path2submodule4/submodule4 (branch/tag)\n\n    ## Most Recent Commit:\n\n    commit e3952df2c172c6f3eb533d8d0b1a6c77250769a7\n    Author: Sample Author <sampleAuthor@gmail.com>\n\n    Added git-info command.\n\n    ## Configuration (.git/config):\n\n    color.diff=auto\n    color.status=auto\n    color.branch=auto\n    user.name=Sample Author\n    user.email=sampleAuthor@gmail.com\n    core.repositoryformatversion=0\n    core.filemode=true\n    core.bare=false\n    core.logallrefupdates=true\n    core.ignorecase=true\n    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*\n    remote.origin.url=git@github.com:mub/git-extras.git\n    branch.master.remote=origin\n    branch.master.merge=refs/heads/master\n\n```\n\nIf you wish to omit the config section, you may use `--no-config`:\n\n```bash\n$ git info --no-config\n```\n\n## git cp\n\nCopy a file to another one keeping its history and allowing for merge conflicts handling.\n\n```bash\n$ git cp README.md README.rst\n```\n\n## git create-branch\n\nCreate local branch `name`:\n\n```bash\n$ git create-branch development\n```\n\nCreate local branch `name` and setup a remote tracking branch in `origin`:\n\n```bash\n$ git create-branch -r development\n```\n\nCreate local branch `name` and setup a remote tracking branch in `upstream`:\n\n```bash\n$ git create-branch -r upstream development\n```\n\n## git delete-branch\n\nDelete local and remote branch `name`:\n\n```bash\n$ git delete-branch integration\n```\n\n## git delete-submodule\n\nDelete submodule `name`:\n\n```bash\n$ git delete-submodule lib/foo\n```\n\n## git delete-tag\n\nDelete local and remote tag `name`:\n\n```bash\n$ git delete-tag 0.0.1\n```\n\n## git delete-merged-branches\n\nDeletes branches that are listed in `git branch --merged`.\n\n```bash\n$ git delete-merged-branches\nDeleted feature/themes (was c029ab3).\nDeleted feature/live_preview (was a81b002).\nDeleted feature/dashboard (was 923befa).\n...\n```\n\n## git delete-squashed-branches\n\nDeletes branches that have been \"squashed-merged\" into a specified branch; this branch will be checked out as a side-effect. If no branch is specified, then it will default to the current checked out branch.\n\n```bash\n$ (feature-branch) git delete-squashed-branches main\nDeleted branch dependabot/bundler/kramdown-2.3.1 (was 1d3fb00).\nDeleted branch dependabot/bundler/rexml-3.2.5 (was a7e4052).\n$ (main) git ...\n```\n\n## git fresh-branch\n\nCreate empty local branch `docs`:\n\n```bash\n$ git fresh-branch docs\n```\n\n## git get\n\nClone repository into a subdirectory of the configured path, `\"$HOME/some-dir\"`:\n\n```bash\n$ git config --global --add git-extras.get.clone-path \"$HOME/some-dir\"\n$ git get 'https://github.com/hyperupcall/bake'\n```\n\n## git guilt\n\nCalculate the change in blame between two revisions\n\n```bash\n# Find blame delta over the last three weeks\n$ git guilt `git log --until=\"3 weeks ago\" --format=\"%H\" -n 1` HEAD\nPaul Schreiber                +++++++++++++++++++++++++++++++++++++++++++++(349)\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(113)\nMark Eissler                  ++++++++++++++++++++++++++\nCJ                            +++++\nnickl-                        -\nJesse Sipprell                -\nEvan Grim                     -\nBen Parnell                   -\nhemanth.hm                    --\n```\n\n## git merge-into\n\nMerge `src` branch into `dest`, and keep yourself on current branch. If `src` branch not given, it will merge current one to `dest`:\n\n```bash\n$ git merge-into [src] dest\n```\n\n## git graft\n\nMerge commits from `src-branch` into `dest-branch`.\n\n```bash\n$ git graft new_feature master\n```\n\n## git squash\n\nMerge commits from `src-branch` into the current branch as a _single_ commit.\nAlso works if a commit reference from the current branch is provided.\nWhen `[msg]` is given `git-commit(1)` will be invoked with that message. This is\nuseful when small individual commits within a topic branch are irrelevant and\nyou want to consider the topic as a single change.\n\n```bash\n$ git squash fixed-cursor-styling\n$ git squash fixed-cursor-styling \"Fixed cursor styling\"\n$ git squash 95b7c52\n$ git squash HEAD~3\n$ git squash HEAD~3 \"Work on a feature\"\n```\n\n## git authors\n\nPopulates the file matching `authors|contributors -i` with the authors of commits, according to the number of commits per author.\n\nSee the [\"MAPPING AUTHORS\" section](https://git-scm.com/docs/git-shortlog#_mapping_authors) of **git-shortlog**(1) to coalesce together commits by the same person.\n\nUpdating AUTHORS file:\n\n```bash\n$ git authors && cat AUTHORS\n\nTJ Holowaychuk <tj@vision-media.ca>\nhemanth.hm <hemanth.hm@gmail.com>\nJonhnny Weslley <jw@jonhnnyweslley.net>\nnickl- <github@jigsoft.co.za>\nLeila Muhtasib <muhtasib@gmail.com>\n```\n\nListing authors:\n\n```bash\n$ git authors --list\n\nTJ Holowaychuk <tj@vision-media.ca>\nhemanth.hm <hemanth.hm@gmail.com>\nJonhnny Weslley <jw@jonhnnyweslley.net>\nnickl- <github@jigsoft.co.za>\nLeila Muhtasib <muhtasib@gmail.com>\n```\n\nListing authors without email:\n\n```bash\n$ git authors --list --no-email\n\nTJ Holowaychuk\nhemanth.hm\nJonhnny Weslley\nnickl-\nLeila Muhtasib\n```\n\n## git changelog\n\nGenerates a changelog from git(1) tags (annotated or lightweight) and commit messages. Existing changelog files with filenames that begin with _Change_ or _History_ will be identified automatically with a case insensitive match pattern and existing content will be appended to the new output generated--this behavior can be disabled by specifying the prune option (-p|--prune-old). The generated file will be opened in **$EDITOR** when set.\n\nIf no tags exist, then all commits are output; if tags exist, then only the most-recent commits are output up to the last identified tag. This behavior can be changed by specifying one or both of the range options (-f|--final-tag and -s|--start-tag).\n\nThe following options are available:\n\n```bash\n  -a, --all                 Retrieve all commits (ignores --start-tag, --final-tag)\n  -l, --list                Display commits as a list, with no titles\n  -t, --tag                 Tag label to use for most-recent (untagged) commits\n  -f, --final-tag           Newest tag to retrieve commits from in a range\n  -s, --start-tag           Oldest tag to retrieve commits from in a range\n  -n, --no-merges           Suppress commits from merged branches\n  -p, --prune-old           Replace existing Changelog entirely with new content\n  -x, --stdout              Write output to stdout instead of to a Changelog file\n  -h, --help, ?             Usage help\n```\n\nType `git changelog --help` for basic usage or `man git-changelog` for more information.\n\n**NOTE:** By default, `git changelog` will concatenate the content of any detected changelog to its output. Use the `-p` option to prevent this behavior.\n\n### Examples\n\nGenerate a new changelog consisting of all commits since the last tag, use the tag name _1.5.2_ for the title of this recent commits section (the date will be generated automatically as today's date):\n\n```bash\n$ git changelog --tag 1.5.2 && cat History.md\n\n1.5.2 / 2015-03-15\n==================\n\n* Docs for git-ignore. Closes #3\n* Merge branch 'ignore'\n* Added git-ignore\n* Fixed <tag> in docs\n* Install docs\n* Merge branch 'release'\n* Added git-release\n* Passing args to git shortlog\n* Added --all support to git-count\n```\n\nList all commits since the last tag:\n\n```bash\n$ git changelog --list\n\n* Docs for git-ignore. Closes #3\n* Merge branch 'ignore'\n* Added git-ignore\n* Fixed <tag> in docs\n* Install docs\n* Merge branch 'release'\n* Added git-release\n* Passing args to git shortlog\n* Added --all support to git-count\n```\n\nList all commits since the beginning:\n\n```bash\n$ git changelog --list --all\n\n* Docs for git-ignore. Closes #3\n* Merge branch 'ignore'\n* Added git-ignore\n* Fixed <tag> in docs\n* Install docs\n* Merge branch 'release'\n* Added git-release\n* Passing args to git shortlog\n* Added --all support to git-count\n...\n<many many commits>\n...\n* Install docs.\n* Merge branch 'release'.\n* Added 'git-release'.\n* Fixed readme.\n* Passing args to git shortlog.\n* Initial commit\n```\n\n## git undo\n\nRemove the latest commit:\n\n```bash\ngit undo\n```\n\nRemove the latest 3 commits:\n\n```bash\ngit undo 3\n```\n\n## git sed\n\nRun grep as directed but replace the given files with the pattern.\n\nFor example,\n```bash\n$ git sed 'this' 'that'\n$ git sed 'this' 'that' g\n$ git sed 'this' 'that' -- path/ path2/\n```\n\n## git setup\n\nSet up a git repository (if one doesn't exist), add all files, and make an initial commit. `dir` defaults to the current working directory.\n\n## git scp\n\nA convenient way to copy files from the current working tree to the working directory of a remote repository. If a `<commits>...` is provided, only files that has changed within the commit range will be copied.\n\nInternally this script uses `rsync` and not `scp` as the name suggests.\n\n`git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory.\n\n### Examples\n\n Copy unstaged files to remote. Useful when you want to make quick test without making any commits\n\n    $ git scp staging\n\n Copy staged and unstaged files to remote\n\n    $ git scp staging HEAD\n\n Copy files that has been changed in the last commit, plus any staged or unstaged files to remote\n\n    $ git scp staging HEAD~1\n\n Copy files that has been changed between now and a tag\n\n    $ git scp staging v1.2.3\n\n Copy specific files\n\n    $ git scp staging index.html .gitignore .htaccess\n\n Copy specific directory\n\n    $ git scp staging js/vendor/\n\n## git show-merged-branches\n\nShow all branches merged in to current HEAD.\n\n## git show-unmerged-branches\n\nShow all branches **not** merged in to current HEAD.\n\n## git show-tree\n\nShow the decorated graph view of one liner summarized commits from all branches.\nFor example, running `git show-tree` will display:\n```\n*   4b57684 (HEAD, develop) Merge branch upstream master.\n|\\\n| *   515e94a Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n| |\\\n| | * 815db8b (nickl/git-extras-html-hyperlinks, git-extras-html-hyperlinks) help ronn make hyperlinks.\n| * | 7398d10 (nickl/develop) Fix #127 git-ignore won't add duplicates.\n| |/\n| | * ab72c1e (refs/stash) WIP on develop: 5e943f5 Fix #127 git-ignore won't add duplicates.\n| |/\n|/|\n* | 730ca89 (bolshakov) Rebase bolshakov with master\n|/\n* 60f8371 (origin/master, origin/HEAD, master) Merge pull request #126 from agrimaldi/fix-changelog-last-tag\n...\n```\n\nBe free to try it for yourself!\n\n\n## git stamp\n\nStamp the last commit message\n\nCommit message is\n\n```bash\nFix timezone bug\n```\n\nReference the issues numbers from your bug tracker\n\n```bash\n$ git stamp Issue FOO-123\n\ncommit 787590e42c9bacd249f3b79faee7aecdc9de28ec\nAuthor: Jack <jack@work.com>\nCommit: Jack <jack@work.com>\n\n    Fix timezone bug\n\n    Issue FOO-123\n\n$ git stamp Issue FOO-456 \\#close\n\ncommit f8d920511e052bea39ce2088d1d723b475aeff87\nAuthor: Jack <jack@work.com>\nCommit: Jack <jack@work.com>\n\n    Fix timezone bug\n\n    Issue FOO-123\n\n    Issue FOO-456 #close\n```\n\nLink to its review page\n\n```bash\n$ git stamp Review https://reviews.foo.org/r/4567/\n\ncommit 6c6bcf43bd32a76e37b6fc9708d3ff0ae723c7da\nAuthor: Jack <jack@work.com>\nCommit: Jack <jack@work.com>\n\n    Fix timezone bug\n\n    Issue FOO-123\n\n    Issue FOO-456 #close\n\n    Review https://reviews.foo.org/r/4567/\n```\n\nReplace previous issues with a new one\n(Note that the identifier is case insensitive)\n\n```bash\n$ git stamp --replace issue BAR-123\n\ncommit 2b93c56b2340578cc3478008e2cadb05a7bcccfa\nAuthor: Jack <jack@work.com>\nCommit: Jack <jack@work.com>\n\n    Fix timezone bug\n\n    Review https://reviews.foo.org/r/4567/\n\n    issue BAR-123\n```\n\n\n## git standup\n\nRecall what you did or find what someone else did in a given range of time.\nFor instance, recall John's commits since last week(7 days ago):\n```\ngit standup -a John -d 7\n```\n\n## git touch\n\nCall `touch` on the given file, and add it to the current index. One-step creation of new files.\n\n## git obliterate\n\nCompletely remove a file from the repository, including past commits and tags.\n\n```bash\ngit obliterate secrets.json\n```\n\n## git local-commits\n\nList all commits on the local branch that have not yet been sent to origin. Any additional arguments will be passed directly to git log.\n\n## git archive-file\n\nCreates a zip archive of the current git repository. The name of the archive will depend on the current HEAD of your git repository.\n\n## git missing\n\nPrint out which commits are on one branch or the other but not both. Optionally, you can specify a path to limit the comparison to a specific directory or file.\n\n```bash\n$ git missing master\n< d14b8f0 only on current checked out branch\n> 97ef387 only on master\n```\n\n```bash\n$ git missing master -- src/\n< ed52989 only on current branch, in src/ directory\n> 7988c4b only on master, in src/ directory\n```\n\n## git lock\n\nLock a local file `filename`:\n\n```bash\n$ git lock config/database.yml\n```\n\n## git locked\n\nList local locked files:\n\n```bash\n$ git locked\nconfig/database.yml\n```\n\n## git unlock\n\nUnlock a local file `filename`\n\n```bash\n$ git unlock config/database.yml\n```\n\n## git reset-file\n\nReset one file to `HEAD` or certain commit\n\nReset one file to HEAD\n\n```bash\n$ git reset-file .htaccess\n```\n\nor reset one file to certain commit\n\n```bash\n$ git reset-file .htaccess dc82b19\n```\n\n## git mr\n\nChecks out a merge request from GitLab. Usage: `git mr <ID|URL> [REMOTE]`.\nDefault remote is `origin`.\n\n``` bash\n$ git mr 51\nFrom gitlab.com:owner/repository\n * [new ref]         refs/merge-requests/51/head -> mr/51\nSwitched to branch 'mr/51'\n```\n\nWith full URL, the head is fetched from a temporary remote pointing to the base URL.\n\n``` bash\n$ git mr https://gitlab.com/owner/repository/merge_requests/51\nFrom gitlab.com:owner/repository\n * [new ref]         refs/merge-requests/51/head -> mr/51\nSwitched to branch 'mr/51'\n```\n\nJust like [git pr](#git-pr), `git mr` accepts a `clean` argument to trash all\n`mr/` branches. Ensure current branch is not one.\n\n## git paste\n\nSends commits to a pastebin site using pastebinit.\n\nBy default it sends the commits between your current branch\nand the branch your current branch is based on (the upstream branch).\n\n``` bash\n$ git paste\nhttps://paste.debian.net/1234567/\n```\n\nAll options are passed to `git format-patch --stdout`\nso you can also pass options understood by `git-rev-parse(1)`\nin order to select a different set of commits.\n\n``` bash\n$ git paste @^\nhttps://paste.debian.net/1234567/\n```\n\nSee the [pastebinit documentation](https://manpages.debian.org/pastebinit)\nfor information about how to chose a different pastebin site to the default.\n\n## git pr\n\nChecks out a pull request from GitHub\n\n```bash\n$ git pr 226\nFrom https://github.com/tj/git-extras\n * [new ref]       refs/pulls/226/head -> pr/226\nSwitched to branch 'pr/226'\n```\n\nTo use a remote other than `origin`, e.g. `upstream` if you're working in a fork, specify it as the second parameter:\n\n```bash\n$ git pr 226 upstream\nFrom https://github.com/tj/git-extras\n * [new ref]       refs/pulls/226/head -> pr/226\nSwitched to branch 'pr/226'\n```\n\nYou can also checkout a pull request based on a GitHub url\n\n```bash\n$ git pr https://github.com/tj/git-extras/pull/453\nFrom https://github.com/tj/git-extras\n * [new ref]         refs/pull/453/head -> pr/453\nSwitched to branch 'pr/453'\n```\n\nTo remove all local pull request branches, provide the magic `clean` parameter:\n\n```bash\n$ git pr clean\nDeleted branch 'pr/226' (was 1234567).\n```\n\n## git root\n\nshow the path to root directory of git repo\n\n```bash\n$ pwd\n.../very-deep-from-root-directory\n$ cd `git root`\n$ git add . && git commit\n```\n\n## git delta\n\nLists files that differ from another branch.\n\n```bash\n$ touch README.md\n$ git setup\n$ git checkout -b hello\n$ echo hello >> README.md\n$ git delta\nREADME.md\n$ touch Makefile\n$ git add Makefile\n$ git delta\nMakefile\nREADME.md\n```\n\n## git clear\n\nDoes a hard reset and deletes all untracked files from the working directory, including those in .gitignore.\n\n## git clear-soft\n\nDoes a hard reset and deletes all untracked files from the working directory, excluding those in .gitignore.\n\n## git merge-repo\n\nMerges two repository histories.\n\n```bash\n$ git merge-repo other-repo.git master new_dir\n```\n\nThe above merges `other-repo.git`'s  `master` branch into the current repository's `new_dir` directory.\n\n```bash\n$ git merge-repo git@github.com:tj/git-extras.git master .\n```\n\nThe above merges a remote repo's `master` branch into the current repository's directory, not preserving history.\n\n\n## git psykorebase\n\nRebase a branch on top of another using a merge commit and only one conflict handling.\n\n```bash\n$ git psykorebase master\n```\n\nThe above rebase the current branch on top of `master` branch .\n\n```bash\n$ git psykorebase --continue\n```\n\nThe above continue the rebase after conflicts have been handled.\n\n```bash\n$ git psykorebase master feature\n```\n\nThe above rebase `feature` branch on top of `master` branch\n\n## git pull-request\n\nCreate pull request via commandline.\n\n## git rebase-patch\n\nGiven you have a patch that doesn't apply to the current HEAD, but you know it applied to some commit in the past,\n`git rebase-patch` will help you find that commit and do a rebase.\n\nFor example,\n```\n$ git rebase-patch test.patch\nTrying to find a commit the patch applies to...\nPatch applied to dbcf408dd26 as 7dc8b23ae1a\nFirst, rewinding head to replay your work on top of it...\nApplying: test.patch\nUsing index info to reconstruct a base tree...\nFalling back to patching base and 3-way merge...\nAuto-merging README.txt\n```\n\nThen your last commit has the changes of the patch and is named `test.patch`.\n\n## git sync\n\nSync local branch with its remote branch\n\n```bash\n$ git sync\n```\n\nSync local branch with origin/master\n\n```bash\n$ git sync origin master\n```\n\n## git browse\n\nOpens the current git repository website in your default web browser.\n\n```bash\n$ git browse\n\n$ git browse upstream\n```\n\n## git browse-ci\n\nOpens the current git repository CI website (e.g. GitHub Actions, GitLab CI,\nBitbucket Pipelines) in your default web browser.\n\n```bash\n$ git browse-ci\n\n$ git browse-ci upstream\n```\n\n## git utimes\n\nChange files modification time to their last commit date. Does not touch files that are in the working tree or index.\n\nThe `--newer` flag preserves the original modification time of files that were committed from the local repo, by only touching files that are newer than their last commit date.\n\n```bash\ngit-extras$ ls -l bin | head\ntotal 308\n-rwxr-xr-x 1 vt vt   489 Jul 28  2015 git-alias\n-rwxr-xr-x 1 vt vt  1043 Nov  8 13:56 git-archive-file\n-rwxr-xr-x 1 vt vt   970 Nov  8 13:56 git-authors\n-rwxr-xr-x 1 vt vt   267 Nov  8 13:56 git-back\n-rwxr-xr-x 1 vt vt   899 Nov  8 13:56 git-browse\n-rwxr-xr-x 1 vt vt  1932 Nov  8 13:56 git-brv\n-rwxr-xr-x 1 vt vt  6282 Nov  8 13:56 git-bulk\n-rwxr-xr-x 1 vt vt 18561 Nov  8 13:56 git-changelog\n-rwxr-xr-x 1 vt vt   215 Nov  8 13:56 git-clear\n\ngit-extras$ git utimes --newer\n+ touch -d 2020-05-22T10:40:29+08:00 bin/git-archive-file\n+ touch -d 2017-05-05T16:02:09+08:00 bin/git-authors\n+ touch -d 2020-02-23T11:41:54+08:00 bin/git-back\n+ touch -d 2020-06-23T09:31:21+10:00 bin/git-browse\n+ touch -d 2020-01-15T10:46:19+01:00 bin/git-brv\n+ touch -d 2019-12-21T13:35:59+08:00 bin/git-bulk\n+ touch -d 2019-09-05T12:41:38+08:00 bin/git-changelog\n+ touch -d 2016-11-19T16:41:19+00:00 bin/git-clear\n[...]\n\ngit-extras$ ls -l bin | head\ntotal 308\n-rwxr-xr-x 1 vt vt   489 Jul 28  2015 git-alias\n-rwxr-xr-x 1 vt vt  1043 May 22 05:40 git-archive-file\n-rwxr-xr-x 1 vt vt   970 May  5  2017 git-authors\n-rwxr-xr-x 1 vt vt   267 Feb 23  2020 git-back\n-rwxr-xr-x 1 vt vt   899 Jun 23 02:31 git-browse\n-rwxr-xr-x 1 vt vt  1932 Jan 15  2020 git-brv\n-rwxr-xr-x 1 vt vt  6282 Dec 21  2019 git-bulk\n-rwxr-xr-x 1 vt vt 18561 Sep  5  2019 git-changelog\n-rwxr-xr-x 1 vt vt   215 Nov 19  2016 git-clear\n```\n\nNote above, that because of the `--newer` flag, the file `git-alias` was not touched since its modified date is earlier than the commit date.\n\n## git abort\n\nAbort current revert, rebase, merge or cherry-pick, without the need to find exact command in history.\n\n## git magic\n\nCommits changes with a generated message.\n\n## git continue\n\nContinue current revert, rebase, merge or cherry-pick, without the need to find exact command in history.\n\n## git wip\n\nCreate a Work In Progress(WIP) commit, which will include all changes in the\nworking directory. (i.e., changes to existing files, new files, removed files)\n\n```bash\n$ git wip\n```\n\n## git unwip\n\nUndo a Work In Progress(WIP) commit and put all of those changes back into the\nworking directory.\n\n```bash\n$ git unwip\n```\n"
  },
  {
    "path": "History.md",
    "content": "\n7.4.0 / 2025-06-19\n==================\n\n  * Format comparisons, functions, and redirections to be consistent (#1201)\n  * add git-wip and git-unwip (#669)\n  * chore(deps): bump bats-core/bats-action from 3.0.0 to 3.0.1\n  * Mostly finish pytest to Bats conversion (#1200)\n  * Implement half of tests in Bats (#1187)\n  * Add stale bot for old PRs (#1186)\n  * feat(git-bulk): add new option to not follow hidden directories (#1195)\n  * Feat: allow git-summary showing full path of repository (#1193)\n  * feat(git-bulk): add new option to no follow symlinks (#1194)\n  * docs(git-bulk): Add zsh completion (#1190)\n  * fix(git-bulk): fix workspace selection when cd fails (#1197)\n  * fix(git-bulk): quiet find errors by default (#1196)\n  * fix(git-bulk): fix a bad integer expression (#1198)\n  * chore(deps): bump astral-sh/ruff-action from 2 to 3 (#1189)\n  * Fix all ShellCheck errors and add to CI (#1179)\n  * chore(deps): bump astral-sh/ruff-action from 1 to 2 (#1188)\n  * fix(ci): use poetry (#1183)\n  * Delete etc/test.fish (#1185)\n  * feat: add git-continue (#1176)\n  * feat: add ruff linter with ci check (#1182)\n  * fix(ci): missing dollar sign (#1184)\n  * fix(github-actions): changed files output for editorcondig-checker (#1180)\n  * Revert \"feat: add ruff linter with ci check (#1178)\" (#1181)\n  * feat: add ruff linter with ci check (#1178)\n  * Support `GITHUB_TOKEN` var for `git-fork` and `git-pull-request` (#1177)\n  * Bump version to 7.4.0-dev (#1175)\n\n7.3.0 / 2024-10-20\n==================\n\n  * Fix stripping trailing forward slash for git-get (#1172)\n  * Change git-cp to use cleaner branch approach (#1169)\n  * Improve warning for `git clear` (#1168)\n  * Enhance `git-repl` (#1160)\n  * Update some documentation that was out of sync (#1164)\n  * Use filetimes in check_integrity (#1162)\n  * Update git-alias.md: add brs to prevent incorrect line behavior (#1161)\n  * Update git-bulk.md: use correct stylization in synopsis (#1163)\n  * Update git-repl.md: typo: \"let's\" for \"lets\" (#1158)\n  * Update instructions for the OpenSUSE installation (#1157)\n  * Add pathspec support in `git-missing` (#1156)\n  * feat: add rename-file command (#1149)\n  * Update Commands.md (#1148)\n  * fix: git-summary commit count (#1147)\n  * tests: update dependencies (#1142)\n  * chore(deps): bump masesgroup/retrieve-changed-files from 2 to 3 (#1144)\n  * chore(deps): bump actions/setup-go from 4 to 5 (#1143)\n  * ci: add dependabot update for GitHub actions (#1141)\n  * ci: update actions (#1140)\n  * Bump version to 7.3.0-dev (#1139)\n\n7.2.0 / 2024-04-21\n==================\n\n  * refactor: test utils and simplify the case code (#1136)\n  * Add --proceed flag to git-delete-squashed-branches (#1134) (#1135)\n  * test(browse-ci): add unit tests (#1130)\n  * test(git-browse): add unit tests (#1127)\n  * feat: add reverse option to git-brv (#1123)\n  * fix(utimes): change /dev/stdin to -\n  * fix(utimes): Support filenames with backspaces, etc. (#1122)\n  * chore: add poetry to handle the tests of the git extras (#1121)\n  * Fix typo in ci.yml (#1120)\n  * Fix: harden utimes, use single quotes (#1109)\n  * Fix: patch git-utimes (fixes #1118) (#1119)\n  * add pull request manner (#1113)\n  * maintenance: Add my name as maintainer in AUTHORS (#1117)\n  * test(git-authors): add unit test (#1098)\n  * Add more comprensive dependencies (#1111)\n  * fix: git-standup find error (tj#1106) (#1110)\n  * Improve defaults for testing suite (#1104)\n  * feat: Speed up utimes (#1108)\n  * Overhaul CONTRIBUTING document (#1103)\n  * Bump version to 7.2.0-dev (#1099)\n\n7.1.0 / 2023-10-28\n==================\n\n  * git-cp: don't stop execution when merge.ff is not set (#1096)\n  * Allow `git cp` to create destination folder automatically (#1091)\n  * fix: Use `-iname` and expressions instead of `-iregex` (#1094)\n  * change installation source from master to main (#1092)\n  * test(git-archive-file): add unit test (#1084)\n  * ci: Use Go v1.20 for running `editorconfig-checker` (#1086)\n  * test(git-alias): add its unit test (#1077)\n  * makefile: Allow bypassing conflict check (#1080)\n  * fix: Restore zsh completions to working completion (#1079)\n  * fix: add missing quote in git-extras-completion.zsh (#1078)\n  * feat: Implement completion for `git coauthor` (#1074)\n  * fix: Move improvements via ShellCheck (#1075)\n  * feat(auto-test): CI with pytest (#1066)\n  * git-feature: add configurable branch separator (#1072)\n  * git-psykorebase: determine branch names with bash pattern substitution (#1073)\n  * git-cp: continue to merge when merge.ff is only (#1070)\n  * git archive-file: change base ARCHIVE_NAME (#1071)\n  * readme: Add secondary location of screencast (#1065)\n  * fix: Improve Bash hygiene (#1056)\n  * feat: Implement `git-get` command (#1045)\n  * Corrected grammar in bin/git-cp (#1061)\n  * Improve `git-ignore` command (#1047)\n  * I have made two improvements to the git-bulk: (#1054)\n  * Type properly `__gitex_command_successful` calls and capitalizate github to GitHub (#1049)\n  * Add typo checker\n  * Fix comment typo in git-authors (#1050)\n  * tweak: Fix typos (#1046)\n  * Makefile: init SYSCONFDIR before using it (#1044)\n  * Makefile: tune MANPREFIX configuration for FreeBSD (#1043)\n  * Makefile: set bash COMPL_DIR to FreeBSD expected defaults (#1042)\n  * Bump version to 7.1.0-dev (#1041)\n\n7.0.0 / 2023-04-20\n==================\n\n  * git-delete-tag: should not be quoted\n  * Add the current branch git summary (#1034)\n  * chore: Improve Bash variously (#1032)\n  * Change the oneline option to a tebular version in the git summary (#1031)\n  * chore: Remove `X`-style equality comparisons (#1028)\n  * chore: Various Bash improvements (#1029)\n  * fix: No longer pollute env with `GREP_OPTIONS`\n  * tweak editor config (#1027)\n  * revert the completion dir change on MacOS (#1026)\n  * Update gitignore.io urls to Toptal urls (#1025)\n  * Add EditorConfig file (#1022)\n  * Make the bulk output slimmer (#1020)\n  * chore: Fix more Bash inconsistencies (#1021)\n  * Repo status overview (#1017)\n  * Replace egrep with grep -E (#1019)\n  * chore: More Bash improvements and removing deprecations (#1016)\n  * chore: Improve quoting and builtin usage (#1015)\n  * Add summary fields (#1013)\n  * Fix quiet mode of the bulk command (#1014)\n  * git-summary: remove stray \\ in grep call (#1010)\n  * Allow to run git-extras within git-bulk (#1008)\n  * Make git-summary accept multiple paths for the --lines argument (#1005)\n  * Makefile: ensure bash is used instead of /bin/sh (#1004)\n  * fix base branch in the pull-request command (#1003)\n  * Update docs for git abort change (#1000)\n  * Bump version to 6.6.0-dev (#997)\n\n6.5.0 / 2022-10-06\n==================\n\n  * git root: show '.' when using with -r in the root dir (#995)\n  * git standup: work as expected when no configured (#996)\n  * rephrase question depending on switch (#984)\n  * Include revert conflicts in git abort (#992)\n  * fix(git-effort):fork: retry: Resource temporarily unavailable #979 (#990)\n  * git-sync --force will sync without interaction (#989)\n  * fix(git-cp): keep the history of the files\n  * git-bulk: previous refactor redirected $PWD to stderr by mistake\n  * Fix lazy loading bash_completion from XDG_DATA_DIRS\n  * Minor changes to man/git-standup.md\n  * Replaced -g and -A with -F gpg|authordate\n  * fix(bin/git-browse): fix commit hash\n  * fix(bin/git-browse): fix bitbucket url\n  * feat: open website at file & line number or range\n  * #970 standup added -A flag for author date\n  * update docs due to formatting error in git-utimes man page\n  * update per shellcheck advice\n  * update git-utimes.{1,html} to add --newer flag\n  * Don't read git-extras.standup.implicit-week twice in git standup\n  * quote mod_s and git_s integer vars\n  * updates per request of spacewander\n  * Update Commands.md\n  * allow modification date updates for symbolic links\n  * add --newer flag and ignore files in the working tree or index\n  * Documented config git-extras.standup.implicit-week\n  * Minor change to git standup -w documentation\n  * Improved check if -w or -d was given to git standup\n  * Renamed config git-extras.standup.implicit-week from git-extras.standup-implicit-week\n  * Documented weekend behaviour of git standup -w\n  * docs(instllation): replace `git.io`\n  * Bump version to 6.5.0-dev\n  * Added config git-extras.standup-implicit-week for git standup\n  * Document git standup -w option\n\n6.4.0 / 2022-04-22\n==================\n\n  * Merge pull request #964 from spacewander/bro\n  * git-browse/browse-ci: use powershell.exe only when it is available\n  * Merge pull request #944 from SimonTate/feature/sem-ver-prefix\n  * Merge pull request #957 from jackwasey/quiet-or-stderr\n  * git-release: Add prefix to semver\n  * Merge pull request #959 from pbnj/feat/git-browse-ci\n  * fix: fix stderr & stdout redirect\n  * Merge pull request #962 from spacewander/gicc\n  * git-ignore-io: make sure .gi_list is created before access\n  * git-ignore: the directory of target file may not exist\n  * fix(git-browse-ci): set pipefail\n  * docs: fix docs\n  * chore: update docs & completions\n  * feat: implement git-browse-ci\n  * quiet option, errors to stderr\n  * Merge pull request #956 from tfendin/xargs-conflicting-args\n  * Removed xargs from git-effort\n  * Merge pull request #955 from katrinleinweber/summary-highlight-path-opt\n  * Highlight path option more\n  * Merge pull request #951 from tfendin/local-commits-all-remotes\n  * Updated manual for git local-commits, must track a branch\n  * Merge pull request #946 from tfendin/default_branch_logic\n  * Made local-commits work with all remotes\n  * Updated Readme.md after review\n  * Merge pull request #949 from tfendin/git-ignore-ensure-newline\n  * Added section about main branch to the Readme file\n  * Merge pull request #947 from tfendin/git-unlock-synopsis-fix\n  * Merge pull request #948 from tfendin/git-ignore-core-excludesFile\n  * Clarified comment of when newline should be added\n  * Updated git-extras manual after review.\n  * git-ignore: ensure new patterns comes after a newline\n  * Fixed bug in git-ignore which ignored config core.excludeFiles\n  * Spell corr in git-unlock synopsis\n  * Consider init.defaultBranch in git_extra_default_branch, changed default branch to main.\n  * Merge pull request #885 from spacewander/add_pkg\n  * doc: add packaging status\n  * Merge pull request #940 from overengineer/feature/magic\n  * Ignored error when git restore --staged fails when there is no commit\n  * Merge branch 'master' into merge/magic\n  * Added git-magic command\n  * Bump version to 6.4.0-dev\n\n6.3.0 / 2021-10-02\n==================\n\n  * Merge pull request #942 from spacewander/ffgd\n  * git-delete-squashed-branches: fail fast if can't checkout\n  * Merge pull request #939 from SimonTate/feature/force-clear\n  * git-clear: add force option\n  * Merge pull request #936 from tfendin/multiline_synopsis_fix\n  * Merge pull request #937 from tfendin/dedup_email_case_insensitive\n  * Merge pull request #934 from tfendin/no-merge-summary\n  * Adopted git --dedup-by-email to the project coding style\n  * summary --dedup-by-email now compares email adresses case insensitive.\n  * Updated lines under Synopsis in the manuals so they are commonly formatted\n  * Add incompability check for git summary --line --no-merges, split synopsis in its manual.\n  * Merge pull request #935 from ax1036/git-un-lock\n  * fix git (un)lock with spaced filenames\n  * Updated completion for git summary\n  * Updated documentation for git-summary --no-merges\n  * Added option --no-merges to git summary\n  * Merge pull request #932 from spacewander/git-su\n  * git-summary: support filtering `--line` with path\n  * Merge pull request #865 from pkitszel/pkitszel-git-abort\n  * Add git-abort\n  * Merge pull request #928 from duckunix/master\n  * Update point to github docs for forks from API\n  * update working\n  * git-fork | Update man/md/html pages to talk about need of the github personal access token\n  * Updated documentation (AUTHORS)\n  * bin/git-fork | updating for feedback from PR #928\n  * git-fork | update to match REST-API auth standards as of 2021-06\n  * Merge pull request #926 from nicokosi/patch-1\n  * Update install doc: Homebrew is not just for macOS\n  * Merge pull request #924 from allejo/feature/delete-squashed-branches\n  * delete-squashed-branches: Make side-effect clear in docs\n  * delete-squashed-branches: Make branch checkout side effect clear\n  * Add delete-squashed-branches command\n  * Merge pull request #923 from CleanMachine1/patch-1\n  * Picture is broken\n  * Merge pull request #920 from matan129/patch-1\n  * Ignore checked-out branches on different worktrees\n  * Merge pull request #917 from heirecka/remove-git-line-summary-man-page\n  * Bump version to 6.3.0-dev\n  * doc: Remove man page for git-line-summary\n\n6.2.0 / 2021-03-26\n==================\n\n  * Merge pull request #915 from spacewander/typo\n  * Merge pull request #914 from spacewander/xch\n  * Merge pull request #916 from spacewander/utimes\n  * fix(git-utimes): make sure it work under OS X.\n  * chore: fix typo\n  * fix(git-ignore): use $XDG_CONFIG_HOME only when it is defined\n  * Merge pull request #910 from 0xflotus/patch-1\n  * fixed small error\n  * Merge pull request #908 from nodeg/fix_installation\n  * Fix grammer\n  * Correct macOS spelling\n  * Correct openSUSE spelling and update Version\n  * Merge pull request #907 from bbenzikry/zinit-docs\n  * Update zinit docs\n  * Merge pull request #906 from prestontim/master\n  * Remove bug|refactor|chore from documentation\n  * Merge pull request #899 from spacewander/git-summary\n  * git-summary: reject invalid option\n  * ci: use checkout@v2\n  * Merge pull request #897 from spacewander/ga\n  * ci: move to GitHub Action\n  * Merge pull request #882 from vt-alt/git-utimes\n  * Merge pull request #896 from Aloxaf/fix_completion\n  * fix: zsh completion of git-coauthor command\n  * Merge pull request #895 from vanpipy/feature/optional-start-point-when-creeate-branch\n  * doc: add the usage of the parameter `--from` for create-branch and feature\n  * feat(feature): checkout from start point if exists\n  * feat(create-branch): add optional --from to set the start point\n  * Merge pull request #894 from alessandro308/merge-into-stashed\n  * Merge-into: add stash before to checkout\n  * Merge pull request #892 from equt/#891\n  * Merge pull request #888 from equt/master\n  * Merge pull request #889 from vanpipy/feature/delete-tag\n  * [ fix #891 ] Cast branch output if HEAD not exists\n  * [ feat ] Quote the default_path var\n  * [ fix ] Quote env var\n  * [ fix ] Quote the XDG_CACHE_HOME\n  * [ feat ] Use default global ignore file\n  * [ refactor ] Optimize var not existing check\n  * [ fix ] Fix hardcode ignore list file path\n  * [ feat ] Add XDG_CACHE_HOME check\n  * Merge pull request #890 from zhujian0805/master\n  * adding a format for git-contrib\n  * git-utimes: Change files modification time to their last commit date\n  * feat(delete-tag): get default remote from git config if exists\n  * Merge pull request #884 from elonderin/fix-squash-help\n  * squash help: re-ran make for extras and squash\n  * squash help: ran make man/git-extras.{html,1}\n  * squash help: ran make man/git-squash.{html,1}\n  * squash help: corrects option name in PR\n  * Merge remote-tracking branch 'u/master' into HEAD\n  * Merge pull request #886 from TheTechOddBug/master\n  * Fixing summary for --squash-msg option.\n  * Updates git-squash.md: fixes help which was unclear and had remnants from copied template it appears\n  * Bump version to 6.2.0-dev\n\n6.1.0 / 2020-09-26\n==================\n\n  * Merge pull request #878 from spacewander/default_br\n  * Merge pull request #880 from spacewander/fix_bsd_sed_regex\n  * git-info: fix regex for bsd sed\n  * Merge pull request #879 from spacewander/pass_arg\n  * feat: pass origin argument down to git execution\n  * change: migrate default branch\n  * Merge pull request #872 from yuravg/pr_typo\n  * doc: fix typo\n  * Merge pull request #869 from spacewander/typo\n  * git-back: removed\n  * fix typo\n  * Merge pull request #868 from spacewander/zsh_completion\n  * sort completion in alphabetical order\n  * remove incorrect completion\n  * git-info: add zsh completion\n  * Merge pull request #867 from yuravg/pr2source\n  * doc: fix argument description\n  * git-info: moved argument checking\n  * git-info: fix namespace\n  * doc: update derived git-info files\n  * doc: add description for git-info\n  * Add bash completion for git-info\n  * git-info: colorized headers\n  * git-info: extend configuration and commit information\n  * git-info: remove notes about git-log, git-show\n  * git-info: add info about submodules\n  * git-info: fix indentation, remove comment\n  * Merge pull request #864 from v-y-a-s/pr\n  * Grammar correction\n  * Remove $user\n  * corrections\n  * Update doc\n  * fix config message name\n  * Remove comments\n  * PR test\n  * Merge pull request #860 from soraxas/implement-fish-completions\n  * implement fish completions file\n  * Merge pull request #853 from bethesque/feat/git-browse-with-multiple-remotes\n  * feat(browse): automatically select origin remote if one exists, fallback to first otherwise\n  * Merge pull request #854 from bethesque/fix/git-browse-sed-on-mac\n  * fix(browse): update sed pattern to work on mac\n  * Bump version to 6.1.0-dev\n\n6.0.0 / 2020-06-22\n==================\n\n  * doc: remove gitter\n  * git-cp: remove trailing space\n  * Merge pull request #849 from vr8hub/undodoc\n  * Merge pull request #850 from vr8hub/newundo\n  * Tighten numeric regex\n  * Cleanup code\n  * Modify to work when only a single commit, add parameter checks\n  * Correct undo documentation to match code order of parameters\n  * Merge pull request #847 from Amorymeltzer/patch-1\n  * docs: Note flag for git extra --version\n  * Merge pull request #846 from spacewander/note\n  * doc: add a note about the package maintainer.\n  * Merge pull request #844 from ihoro/installation-via-freebsd-pkg\n  * Merge pull request #843 from spacewander/remove_git_feature\n  * break change: remove docs and other stuff of git-feature's alias\n  * Merge pull request #845 from alerque/remove-feature-aliases\n  * Remove scripts that are mere alias wrappers for git-feature\n  * docs: mention installation via FreeBSD pkg\n  * Merge pull request #840 from spacewander/archive-invalid\n  * Merge pull request #841 from sgleizes/bugfix/git-release-zsh-completion\n  * Fix missing newline escapes in git-release zsh completion\n  * git-archive-file: rename invalid chars in the output filename\n  * Merge pull request #837 from jldugger/jldugger/pr-remote-default\n  * Merge pull request #836 from jldugger/jldugger/feature-config\n  * add a default for the remote to fetch a pr from\n  * add a config setting for prefix\n  * Merge pull request #829 from cpradog/master\n  * update zsh completion for bug and refactor commands\n  * updated zsh completion script\n  * updated git-feature documentation\n  * add squash option to git-feature\n  * add squash option to git-feature\n  * Merge pull request #826 from Natim/feature/825/add-git-cp\n  * Simplify the code.\n  * Signal if the destination already exists.\n  * @spacewander review.\n  * Merge pull request #827 from Natim/fix-man-page-for-git-psykorebase\n  * Fix checks.\n  * Update man page export for git-psykorebase with ronn-ng 0.9.0\n  * @mschneiderwind review.\n  * Add documentation.\n  * Add first version of git-cp\n  * Merge pull request #824 from mapitman/master\n  * Fix documentation for git-browse\n  * Merge pull request #823 from mapitman/master\n  * Implement suggested changes from code review\n  * Add git-browse command\n  * Merge pull request #820 from spacewander/deprecate_git_back\n  * change: deprecate git-back\n  * Merge pull request #817 from bric3/adds-git-brv\n  * Fixes #770: Adds git-brv\n  * Merge pull request #816 from spacewander/git-sed-pathspec\n  * git-sed: limit paths via pathspec\n  * Bump version to 5.2.0-dev.\n\n5.1.0 / 2019-12-21\n==================\n\n  * git-bulk: support cloning from a relative path\n  * git-standuo: clarify the -a option\n  * git-paste: check pastebinit before running it\n  * git-coauthor: quote variable in the comparison\n  * git-bulk: don't disappoint shellcheck\n  * Merge pull request #812 from spacewander/git-sed-escape\n  * git-sed: escape special characters for tr\n  * Merge pull request #811 from eli-schwartz/portability\n  * build: do not require the nonstandard and unpredictable 'which' utility\n  * add repositories to workspace from source (#804)\n  * Merge pull request #810 from roxchgt/read-not-need-repo\n  * read COMMANDS_WIHOUT_REPO from not_need_git_repo file\n  * Merge pull request #806 from spacewander/retire_make_with_msys\n  * Merge pull request #808 from drasill/master\n  * git-ignore: support non-default .git directory\n  * retire the msysgit installation script\n  * Merge pull request #802 from spacewander/fix-git-bulk-arg-count\n  * git-bulk: line break is need in the SYNOPSIS doc section\n  * fix bug in allowedargcount() to not execute command if wrong args count\n  * Merge pull request #801 from spacewander/fix-delete-submodule\n  * git-delete-submodule: don't remove the history of deleted submodule\n  * Merge pull request #798 from wolviecb/signed_release\n  * Add flags -s and -u for signed tags\n  * Merge pull request #795 from spacewander/git-squash-commit-msg\n  * Merge pull request #793 from spacewander/git-standup-group-by-branch\n  * git-squash: miss completion script change\n  * git-squash: clean up shellcheck warnings\n  * git-squash: add --squash-messages to concat commit messages into one.\n  * git-standup: add option to limit the number of commit\n  * Merge pull request #789 from go2null/delete-empty-gitmodules\n  * git-delete-submodule: comment the DUMMY prefix and ignore the output of grep -v.\n  * git-standup: add separate newline between the output\n  * add PR changes\n  * add --force option to continue on error\n  * improve readability\n  * display git submodule status output before exiting\n  * check git submodule status before declaring success\n  * reorganize flow\n  * delete empty .gitmodules\n  * git-standup: add option '-B' to group the commits by branch\n  * Merge pull request #792 from spacewander/git-summary-cleanup\n  * git-summary: clean up other shellcheck warnings\n  * git-summary: fix incorrect active days when commits range is given\n  * git-summary: remove useless result function.\n  * Merge pull request #790 from spacewander/git-summary-merge-email\n  * git-summary: add --dedup-by-email to remove duplicate users\n  * Merge pull request #788 from spacewander/doc_git_summary_line\n  * git-summary: add missing example of --line option\n  * Merge pull request #787 from rvbuelow/patch-1\n  * Merge pull request #786 from mbologna/patch-1\n  * Use GIT_DIR environment variable to to set .git directory\n  * Docs: add OpenSUSE distribution information\n  * Merge pull request #784 from spacewander/git-effort-col-len\n  * git-effort: adjust column limit according to the paths\n  * Merge pull request #708 from pabs3/git-paste\n  * Regenerate docs\n  * Add git-paste for sending patches to pastebin\n  * Merge pull request #778 from pabs3/cleanups\n  * Switch from using /tmp to using mktemp\n  * Switch http URLs to https where possible\n  * Fix typos\n  * Fix an indefinite article in the documentation\n  * Merge pull request #776 from spacewander/update_git_pr_doc\n  * Merge pull request #777 from fengkx/zplugin-install-completion\n  * docs(Installation): :memo: add src in zplugin ice modifier to source the completion file\n  * git-pr: mention the limitation of -m option\n  * Merge pull request #772 from jacobherrington/add-git-coauthor\n  * Add conditional logic for linebreaks\n  * Ensure arguments exist\n  * Add git coauthor command\n  * improve the quality of the integrity check.\n  * Merge pull request #774 from jacobherrington/patch-2\n  * Bump version to 5.1.0-dev.\n  * Link to the contributing document\n\n5.0.0 / 2019-08-16\n==================\n\n  * Merge pull request #769 from spacewander/no_line_summary\n  * git-line-summary: should be the history\n  * Merge pull request #768 from bric3/fix-more-character-encoding-issues\n  * git-guilt: protect against encoding issues with LC_ALL=C\n  * Merge pull request #767 from spacewander/rename_branch_order\n  * git-rename-branch: change branch argument order\n  * Merge pull request #765 from spacewander/column_dependency\n  * Makefile: check dependencies before installation.\n  * Installation.md: add dependencies section.\n  * man/Readme.md: we don't need to update git-extras docs separately\n  * Merge pull request #763 from spacewander/strict_check_integrity\n  * check_integrity.sh: check more strickly.\n  * Merge pull request #762 from spacewander/pr_merge\n  * Merge pull request #761 from btmurrell/preference-for-create-branch\n  * implements remote pref for create-branch\n  * git-pr: add -m|--merge option to check out a merge commit\n  * impl for checking remote pref\n  * Merge pull request #754 from spacewander/prompt_passwd_before_2fa\n  * git-fork: prompt for password before 2FA code.\n  * check_integrity.sh: improve readability.\n  * Merge pull request #753 from tiemonl/GH-752_update_reauthor_documentation\n  * GH-752 updated documentation to show rename workaround\n  * Merge pull request #751 from timfeirg/master\n  * git-mv-remote: rename a remote regardless of any existing remotes\n  * Installation instructions added for CRUX (#746)\n  * Merge pull request #723 from bittner/feature/git-undo-soft-leave-changes-staged\n  * Merge pull request #744 from spacewander/git-guilt-identation\n  * git-guilt: avoid exceeding 80 columns.\n  * Bump version to 4.8.0-dev.\n  * Make `git undo -s` restore the staging area\n\n4.7.0 / 2019-02-09\n==================\n\n  * git-pr: emphasized that the remote is required when pulling multiple PRs.\n  * Merge pull request #743 from spacewander/allow_multiple_pr\n  * git-pr: accepted multiple GitHub URL or ID with remote.\n  * git-pr: added <[remote]:pr number> option.\n  * Merge pull request #740 from spacewander/tweak_man_readme\n  * doc: clarify the current working directory when building the docs.\n  * Merge pull request #739 from sleagon/master\n  * feat: Add -s(--soft) for git sync\n  * Merge pull request #738 from StuartFeldt/add-symlinks-to-bulk-command\n  * Adding support for symlink directories in bulk command\n  * Merge pull request #737 from smancill/standup-ensure-colors\n  * git-standup: ensure color usage\n  * Merge pull request #736 from spacewander/git_force_clone_not_need_git_repo\n  * misc: sort command list in alphabetical order\n  * git-force-clone: should not need git repo\n  * Merge pull request #734 from zentarul/master\n  * Fix missing double quotes after %DEBUG%\n  * install.cmd: tweak comments\n  * Merge pull request #732 from sachin-gupta/sg-mods\n  * Fix: Dev: `/E` option required with MORE for working on higher version of Windows 10 (**_Build 17134_**)\n  * Merge pull request #729 from orestisf1993/patch-1\n  * git-rename-branch: Don't fail if remote doesn't exist\n  * Bump version to 4.7.0-dev.\n\n4.6.0 / 2018-08-11\n==================\n\n  * Merge pull request #727 from spacewander/strip_caret\n  * Makefile: change the installed manpage destination in FreeBSD (#725)\n  * git-changelog: should remove ^0 suffix from the commit description.\n  * Merge pull request #722 from spacewander/git_changelog_start_commit\n  * git-changelog: add --start-commit option, like --start-tag but for commit\n  * Merge pull request #721 from spacewander/git_changelog_list_newline\n  * git-changelog: add missing newline to the plain output\n  * Merge pull request #713 from pabs3/docs\n  * Merge pull request #717 from flatcap/ignore-private\n  * optimisation of mkdir\n  * Ensure info dir exists\n  * add: git-ignore -p (private to repo)\n  * Merge pull request #716 from francoism90/patch-1\n  * Added Arch Linux\n  * Merge pull request #714 from spacewander/fix_detect_sed_i_support\n  * Documentation rebuild: git-sed.* flags argument\n  * Documentation rebuild: git-clear.html whitespace removal\n  * Documentation rebuild: git-extras.* updates\n  * Documentation rebuild: index.txt updates\n  * Documentation rebuild: dates and headers\n  * Remove one of the documentation building tools\n  * Remove some trailing whitespace\n  * Merge pull request #715 from tjaartvdwalt/master\n  * Major/Minor release should reset minor/patch versions to 0\n  * Fix greedy match of version number\n  * git-sed: fix previous bsd sed workaround\n  * Merge pull request #712 from spacewander/detect_sed_i_support\n  * git-sed: detect sed -i support and work around for the BSD sed\n  * Merge pull request #709 from pabs3/git-sed\n  * git-sed: discover a separator when the / character is used in arguments\n  * git-sed: pass the -r option to the xargs command\n  * git-sed: Allow the flags to be passed as a third argument\n  * Merge pull request #706 from MontakOleg/delete-branch\n  * Fix deleting branches without upstream\n  * Merge pull request #704 from ramlev/master\n  * Remove double path delimiters in zsh description\n  * Merge pull request #703 from psprint/master\n  * Installation.md: Zsh-plugin method which doesn't require root access\n  * Bump version to 4.6.0-dev.\n\n4.5.0 / 2018-02-18\n==================\n\n  * git-release: show message if nothing given after --semver\n  * doc: update git-extras index\n  * Merge pull request #639 from spacewander/avoid_deleting_local_upstream\n  * Merge pull request #693 from xakraz/fix-mktemp-pattern\n  * git-release: add --no-empty-commit for empty commit hater\n  * git-release: create an empty release commit if there is nothing to commit\n  * git-summary: unescape tab for linux column utility\n  * git-undo: add confirmation when `-h` is specified\n  * Fixed mktemp template to support busybox (and Alpine linux)\n  * Merge pull request #691 from koppor/patch-1\n  * Remove trailing dot of German Windows\n  * Merge pull request #690 from dominicbarnes/release-push-tags-first\n  * feat(git-release): push tags first to help ci tools not miss them\n  * Merge pull request #687 from spacewander/add_semver\n  * git-release: handle extra non-numeric prefix in tag with --semver\n  * Merge pull request #686 from spacewander/add_semver\n  * git-release: add --semver option\n  * Merge pull request #684 from spacewander/ignore_unknown_arg\n  * git-release: function usage doesn't exist, ignore unknown argument instead\n  * Merge pull request #681 from EdwardBetts/master\n  * Fix so 'git rebase-patch' is described once.\n  * Merge pull request #680 from lhernanz/master\n  * Preserve the existing user_commands in the git completion system\n  * Merge pull request #679 from spacewander/update_git_changelog_doc\n  * Merge pull request #678 from timhwang21/devs/thwang/docs-update\n  * Mention how to control changelog format in docs of git-changelog\n  * Docs> Add -- in front of cmd for git log\n  * Merge pull request #676 from gormac/master\n  * Fix 'Invalid code page' error when resetting code page at end of script\n  * Merge pull request #675 from quite/effort-cursor\n  * git-effort: restore normal (visible) cursor properly\n  * Merge pull request #674 from tj/pull-request-two-factor-auth\n  * Add GitHub two-factor auth support to git-pull-request\n  * Merge pull request #672 from mehandes/patch-1\n  * Added Nix/NixOS method of installation\n  * Merge pull request #671 from sambostock/improve-ignore-io\n  * Use local variables & format strings\n  * Fix omission when alphabetically printing ignores\n  * Remove arbitrary column limit on ignore-io\n  * Merge pull request #670 from zeeshanu/patch-1\n  * Fix typo\n  * Merge pull request #668 from isaacm/patch-1\n  * Fix typos, remove trailing whitespace\n  * install: submit brew patch to upstream\n  * Bump version to 4.5.0-dev.\n  * git-delete-branch: avoid deleting local upstream\n\n4.4.0 / 2017-07-15\n==================\n\n  * install: display absolute path of zsh completion script\n  * zsh: update completion of git bug|chore|feature|refactor|create-branch\n  * git summary: use more common way to cd to top level directory\n  * Merge pull request #664 from mapitman/master\n  * Update man page for `create-branch`\n  * Update man pages\n  * Update docs for new behavior\n  * Use \"$@\" instead of $@\n  * Consolidate feature/bug/chore/refactor logic\n  * Allow -r parameter to be in any order in command line\n  * Add ability to specify a remote\n  * Fix Issue #186\n  * fix a wrong name in installation message\n  * Merge pull request #662 from nschlimm/master\n  * Added git-bulk to not_need_git_repo\n  * fix various typos\n  * Merge pull request #659 from bersace/mr\n  * Add git-mr to checkout GitLab merge requests\n  * Merge pull request #656 from dueringa/patch-1\n  * Fix typo in git-extras\n  * Merge pull request #654 from spacewander/replace-xargs-r\n  * git-delete-merged-branches: replace xargs -r option\n  * Bump version to 4.4.0-dev.\n\n4.3.0 / 2017-05-05\n==================\n\n  * git-authors: remove trailing spaces\n  * Merge pull request #649 from adriaanzon/patch-1\n  * Merge pull request #651 from spacewander/pass-arguments-to-hooks\n  * git-release: add pre-release failure message\n  * git release: stop if pre-release hook fails\n  * git-release: update docs\n  * pass release arguments to pre/post-release scripts\n  * git-fork: Let curl exit with error code on fail\n  * Merge pull request #647 from SMillerDev/patch-1\n  * Add BSD cat support\n  * Merge pull request #646 from spacewander/upgrade-git-standup\n  * git-standup: update zsh completion\n  * git-standup: also update the docs\n  * git-standup: add sanity check to -d option and overwrite -w option\n  * git-standup: upgrade interface to catch up with kamranahmedse/git-standup\n  * Merge pull request #642 from nschlimm/git-bulk-command\n  * Typos again\n  * Corrected repository location print out and docs ws-root-directory absolute path\n  * Codereview Spacewander - whitespaces in workspace locations\n  * Merge pull request #643 from jonyamo/git-pr_clean-git-config\n  * Review from spacewander\n  * Remove slashes from git-config command\n  * Merge branch 'master' into git-bulk-command\n  * Merge pull request #636 from spacewander/fix_rename_branch\n  * Merge pull request #641 from tj/fix_pull_request_upstream\n  * git-rename-branch: use detected upstream remote\n  * git-pull-request: use detected upstream remote\n  * Better behaviour in non workspace directories\n  * Current workspace is default target of bulk operations\n  * Even shorter\n  * Code refactor\n  * bug fix in single ws mode\n  * code formatting\n  * Fix in git-bulk head\n  * New Command git-bulk initial commit\n  * Merge pull request #635 from spacewander/fix_rename_branch\n  * fix syntax & name variables better in rename-branch\n  * Merge pull request #633 from nschlimm/columnsflex\n  * taken out duplicate columns setting\n  * Optimized file length calculation\n  * Columns in git-effort adopt to file length\n  * Merge pull request #630 from jjlin/rhel/centos\n  * Add RHEL/CentOS installation\n  * Merge pull request #629 from dankilman/fix-git-effort\n  * Fix git-effort for paths starting with dash\n  * Merge pull request #626 from jldugger/jldugger/email-fallback\n  * fall back to EMAIL when user.email is not configured\n  * Merge pull request #619 from spacewander/git-summary-separator\n  * Merge pull request #624 from spacewander/has_git_commit\n  * Check commit existed before running some commands\n  * Merge pull request #615 from techjacker/master\n  * Adds SSH prompt to git fork\n  * use U+266A instead of comma as separator\n  * Merge pull request #610 from nicolaiskogheim/fix-spelling\n  * spelling: {a,an} archive. Fix #609\n  * Merge pull request #606 from spacewander/fix-git-extras-update\n  * fix git-extras update and tweak Windows detection\n  * Merge pull request #585 from tardypad/stamp\n  * Merge pull request #578 from tardypad/count_fix_extra_arguments\n  * stamp: show real looking results in Commands.md doc\n  * stamp: add warning in documentation about corner case\n  * stamp: add zsh autocompletion\n  * stamp: remove non used multiple lines error messages\n  * stamp: the message consists in all terms after the identifier\n  * stamp: identifier is case insensitive for the replacement\n  * stamp: add to Commands doc\n  * stamp: add manual\n  * stamp: add bash autocompletion\n  * stamp: add replace option\n  * stamp: display new full message as result\n  * stamp: add extra optional message parameter\n  * stamp: add basic script\n  * Merge pull request #601 from richardfearn/git-sed-spaces-in-filenames\n  * Merge pull request #603 from richardfearn/git-clear-consistent-defaults\n  * Merge pull request #602 from richardfearn/git-delete-merged-branches-fix\n  * git-clear-soft: change default yes/no option to \"no\" (as with git-clear)\n  * git-delete-merged-branches: use \"xargs -r\" to prevent error when there are no branches to delete\n  * git-sed: use \"git grep -z\" and \"xargs -0\" to cope with spaces in filenames\n  * Merge pull request #600 from richardfearn/git-fresh-branch-fix\n  * Merge pull request #599 from richardfearn/improve-yes-no-prompts\n  * git-fresh-branch: fix handling of 'yes' response when there are changes\n  * git-{clear,clear-soft,sync}: improve yes/no prompts\n  * Merge pull request #598 from richardfearn/fix-git-sed-typo\n  * Merge pull request #597 from richardfearn/commands-md-improvements\n  * git-sed: fix 'unkonwn' typo\n  * Commands.md: add link to 'git summary' in 'git line-summary' documentation\n  * Commands.md: add links to \"git bug\", etc. to index\n  * Commands.md: add 'git rscp' link to 'git scp' documentation\n  * Commands.md: put commands in alphabetical order\n  * Merge pull request #596 from richardfearn/archive-file-typo-fix\n  * Fix typo in archive-file documentation\n  * Merge pull request #595 from aaguilera/master\n  * fix: git-squash docs. Replaced 'actual' with 'current'\n  * Merge pull request #592 from spacewander/fix_integrity\n  * Add travis ci\n  * Merge pull request #594 from spacewander/fix_release\n  * show all commit messages if no tag found\n  * strip out branches like trap-effort-signals\n  * Add git-reauthor to completion script\n  * Relax #! format check\n  * Merge pull request #591 from nottrobin/force-clone\n  * Be explicit about only resetting git directories\n  * Fix branch option parsing\n  * Fix usage\n  * Use LC_ALL=C for locale consistency\n  * Remove unnecessary check\n  * git-force-clone\n  * Merge pull request #590 from bbbco/changelog-tmp-file-fix\n  * Need to remove the temp file regardless\n  * Merge pull request #589 from yelinaung/yla/typo-fixes\n  * Spelling fixes for the roon file and html files\n  * Spelling fixes\n  * Merge pull request #588 from spacewander/no-email\n  * Add --no-email to git-author\n  * Bump version to 4.3.0-dev.\n  * count: remove usage of extra arguments for detailed display\n\n4.2.0 / 2016-10-08\n==================\n\n  * remove contributors' email addresses to avoid #544\n  * promote two maintainers\n  * Merge pull request #584 from grindhold/fix-583\n  * fixes #583\n  * update docs to clarify rename-branch (#581)\n  * Make git-pr set up branch for pulling (#570)\n  * add link to ronn git repo (#575)\n  * add rename-branch command (#576)\n  * Merge pull request #569 from nicolaiskogheim/docs/repl-cleanup\n  * git-repl: improve and clean up docs\n  * Merge pull request #568 from wcmonty/master\n  * Add 'exit' to git-repl command documentation\n  * Add built in 'exit' command to git-repl\n  * Merge pull request #567 from nicolaiskogheim/git-pull-request-fix#546\n  * pull-request: should read local config if present\n  * Merge pull request #566 from nfischer/fix-man-page-typo\n  * git-release: fix typo in documentation\n  * Merge pull request #565 from nicolaiskogheim/git-missing-argument-parsing\n  * git-missing: do proper argument parsing. Fix #562\n  * Merge pull request #563 from lukechilds/improve-fork\n  * Update git-fork man page\n  * Merge pull request #564 from sorbits/patch-3\n  * Remove a non-contributor from AUTHORS\n  * Update docs to reflect new git-fork behaviour\n  * Set fork remotes using ssh if available\n  * Add git reauthor (#548)\n  * Merge pull request #555 from spacewander/contributing\n  * modify CONTRIBUTING.md again\n  * Merge pull request #557 from spacewander/check_integrity\n  * Merge pull request #561 from lukechilds/improve-json-encoding\n  * Clean up git-pull-request\n  * Improve JSON encoding\n  * Merge pull request #560 from lukechilds/patch-2\n  * Merge pull request #559 from lukechilds/patch-1\n  * Fix incorrect comment in git-fork\n  * Fix typo in Installation.md\n  * Merge pull request #558 from spacewander/fix_legacy_problem\n  * add doc for git-pull-request and others\n  * modify CONTRIBUTING.md\n  * update check_integrity with nicolaiskogheim's patch\n  * add git-release-patch to Commands.md\n  * add git-back to Commands.md\n  * regenerate git-obliterate doc\n  * follow common shebang\n  * add git-show-(un)merged-branches to Commands.md\n  * Add check integrity script\n  * Add contributing guideline\n  * Merge pull request #554 from npcode/fork-origin\n  * fork: Fetch `origin` after forking\n  * fork: Quote refs by backtick rather than single quote\n  * fork: Add git-fork.html removed by accident\n  * Merge pull request #553 from npcode/fork-origin\n  * fork: Describe the behavior if current dir is repo\n  * fork: Rename 'origin' to 'upstream' after forking\n  * Merge pull request #552 from npcode/fork-origin\n  * fork: Fork 'origin' remote repo if repo is not given\n  * Merge pull request #551 from spacewander/zsh-completion\n  * submit zsh completion script to upstream\n  * update the title of git-clear-soft\n  * Merge pull request #550 from phuu/patch-1\n  * Add note about overwriting git aliases\n  * Merge pull request #547 from svanburen/patch-1\n  * Fix typo\n  * Merge pull request #545 from spacewander/via_ssh\n  * fix git-fork by removing '.git'\n  * Merge pull request #543 from spacewander/via_ssh\n  * fix the support for forking via ssh\n  * Merge pull request #412 from spacewander/git-obliterate\n  * Merge pull request #536 from spacewander/delete_submodule\n  * Merge pull request #537 from vigilancer/master\n  * update documentation. fix \"git ignore-io\" flags\n  * Update the way to delete submodule\n  * Merge pull request #533 from Addvilz/add-git-clear-soft-modify-git-clear\n  * Edit description of git clear-soft to indicate hard reset\n  * Add git-clear-soft command \tModify git-clear to indicate default behavior of removing git ignored files\n  * Merge pull request #513 from lgastako/master\n  * Merge pull request #525 from spacewander/git-standup\n  * Merge pull request #526 from carrodher/patch-1\n  * Add Ubuntu installation\n  * add docs for git standup\n  * add git-standup\n  * Merge pull request #519 from ifdattic/patch-1\n  * Fix typo: typess => types\n  * Merge pull request #515 from ammarnajjar/fedora-install\n  * Add Fedora package-manager installation instruction\n  * Add -m flag to git-setup to set the initial commit message.\n  * Merge pull request #512 from Lee-W/master\n  * Merge pull request #1 from tj/master\n  * Fix ignore-io searching bug\n  * Merge pull request #508 from pra85/patch-1\n  * Mention initial copyright year and add contributors to copyright\n  * Merge pull request #509 from supercrabtree/master\n  * Fix typo in git-clear documentation\n  * Bump version to 4.2.0-dev.\n  * add missing git-obliterate documentation\n  * now we can specify a commit range for git-obliterate\n\n4.1.0 / 2016-01-25\n==================\n\n  * Merge pull request #503 from spacewander/fix_502\n  * Merge pull request #507 from rstacruz/git-pr-manual\n  * Regerenate git-pr.html\n  * Merge pull request #506 from rstacruz/git-pr-manual\n  * Update git PR manual to mention URLs\n  * handle GIT_EDITOR which contains space\n  * use ps -f and awk to emulate pgrep\n  * Merge pull request #500 from kumon/master\n  * add upstream check & bugfix\n  * add example of git-sync\n  * upstream is used by default\n  * Merge pull request #497 from JanSchulz/win_inst2\n  * add git-sync\n  * Merge pull request #499 from tj/add-bsd-installation\n  * Add BSD installation instructions.\n  * installation.md: Update information about column.exe\n  * install.cmd: add a check for write rights to the install folder\n  * install.cmd: properly escape the ! in the shebang line\n  * Merge pull request #496 from JanSchulz/win_inst\n  * Make the win installer more robust\n  * Merge pull request #494 from apjanke/fix-git-repo-inclusion\n  * Merge pull request #495 from JanSchulz/patch-1\n  * Update Installation.md\n  * Makefile: fix inverted list of commands that use is_git_repo\n  * Add Gitter badge.\n  * Bump version to 4.1.0-dev.\n\n4.0.0 / 2015-12-28\n==================\n\n  * Add David Rogers to AUTHORS.\n  * Merge pull request #481 from al-the-x/multi-file-touch\n  * Better USAGE message\n  * Touch multiple files supplied\n  * Use `$@` instead of `$*` re #467\n  * Update AUTHORS.\n  * Merge pull request #490 from apjanke/etc-under-prefix\n  * installation: put $SYSCONFDIR (/etc) under $PREFIX by default\n  * Merge pull request #489 from apjanke/customize-etcdir\n  * Makefile: allow customizing of SYSCONFDIR (/etc) location\n  * Merge pull request #488 from apjanke/git-clear-shebang\n  * Fix missing shebang in git-clear and missing +x on others\n  * Update all man pages.\n  * Merge pull request #479 from JanSchulz/global_gitignore\n  * Merge pull request #448 from Lee-W/master\n  * Add more info how to set global gitignore\n  * Regenerate git-changelog man pages (.html and .1) for #471.\n  * Merge pull request #471 from JanSchulz/merge-changelog\n  * git-changelog: option to only use merges\n  * Merge pull request #469 from JanSchulz/windows-install\n  * Merge pull request #468 from spacewander/use-real-purplish\n  * Use the default installation path in install.cmd\n  * use real purplish\n  * Merge pull request #466 from anarcat/master\n  * Merge pull request #465 from spacewander/fix-color\n  * add simple sed command\n  * disable color if the output is not printed to tty\n  * replace wildcard '?' to literal '?'\n  * git-scp: use portable terminal escape sequences\n  * Merge pull request #460 from apjanke/summary-defensive-locale\n  * Merge pull request #458 from apjanke/makefile-refactor-libs\n  * Merge pull request #459 from apjanke/effort-portable-colors\n  * git-summary: protect against character encoding issues with LC_ALL=C\n  * git-effort: use portable terminal escape sequences\n  * Makefile: refactor is-git-repo inclusion logic\n  * Merge pull request #454 from apjanke/makefile-escape-mktemp\n  * Makefile: escape $ used inside eval as shell variable\n  * Merge pull request #453 from jhnns/pr-url\n  * Add possibility to also checkout pull requests based on GitHub urls\n  * Merge pull request #452 from akimd/summary-locale\n  * summary: beware of locale issues, and pass options to line-summary\n  * Merge pull request #443 from Natim/patch-1\n  * Merge pull request #444 from spacewander/install_without_alias\n  * Merge pull request #446 from ssssam/fix-active-days\n  * Merge pull request #447 from RichardLitt/patch-1\n  * Update git-ignore-io mannual\n  * Replace \"export\" option with \"replace\" in git-ignore-io\n  * Remove exclamation mark\n  * Remove warning when search without word.\n  * Fix typo\n  * Add warning when there is not argument after search, append and export\n  * Fix ~/.gi_list not exist problem\n  * Alphabetized list\n  * effort, summary: Correctly estimate the number of active days\n  * Merge pull request #445 from nicolaiskogheim/straighten-up-effort\n  * effort: change order of arguments to function\n  * effort: add usage message\n  * effort: More robust argument parsing\n  * add alias conflict prompt\n  * Merge pull request #440 from spacewander/features/feature-alias\n  * Add full name for list option\n  * Fix usage error\n  * Make sure git-authors doesn't return twice the same one.\n  * update git-feature docs\n  * add alias to git-feature\n  * Modify print_last_modified_time to make it Linux compatible\n  * Merge pull request #441 from spacewander/features/remove-checkout\n  * Merge branch 'master' of https://github.com/Lee-W/git-extras\n  * Fix doc error for git-ignore-io\n  * Fix doc error for git-ignore-io\n  * Remove redundant \\n in tr\n  * Not to update list each time git-ignore-io is executed\n  * Refactor git-ignore-io and remove .gitignore\n  * Update manual and description in Commands\n  * remove duplicate checkout\n  * Generate manual using ronn for git-ignore-io\n  * Finish manual for git-ignore-io\n  * Fix typo\n  * Add description to Commands.md for git-ignore-io\n  * Implement search function or git-ignore-io\n  * Remove help from git-ignore-io\n  * Init gitignore and ignore vim osx temp files\n  * Merge gi_extension project into git extras as git-ignore-io\n  * Merge pull request #436 from nwinkler/patch-1\n  * Merge pull request #437 from nwinkler/patch-2\n  * Fixed typo in install.sh\n  * Updated documentation for git-ignore\n  * Merge pull request #435 from nwinkler/patch-1\n  * Added details to git-pr documentation\n  * Merge pull request #433 from grindhold/git-clear\n  * made more precise security-question.\n  * more concise implementation of git-clear\n  * Fix typo in variable name\n  * added git-clear to Commands.md\n  * added manpage for git-clear\n  * implemented git-clear\n  * Merge pull request #432 from stevemao/patch-1\n  * fix link of `git feature|refactor|bug|chore`\n  * Merge pull request #425 from nicolaiskogheim/makefile-fix\n  * Mark default task as .PHONY\n  * Merge pull request #430 from spacewander/git-extras\n  * make it possible to update via `git extras`\n  * Merge pull request #428 from spacewander/update-commands\n  * Merge pull request #429 from nicolaiskogheim/merge-into-ff-only\n  * merge-into: change --ff option to --ff-only. fix #421\n  * update Commands.md\n  * Merge pull request #411 from Natim/add-psykorebase-command\n  * Improve man page presentation.\n  * Add documentation.\n  * Merge pull request #426 from spacewander/update-for-new-version\n  * change 'search-term' to 'search-pattern'\n  * abort git-alias when too many arguments given.\n  * Merge pull request #423 from nicolaiskogheim/effort-paths\n  * Merge pull request #424 from nicolaiskogheim/fork-docs\n  * Merge pull request #422 from nicolaiskogheim/effort-bugfix\n  * effort docs: add note about omitting unsorted results\n  * effort docs: add example with directories\n  * effort docs: filename -> path\n  * effort docs: Adjust numbers in example\n  * effort: rename 'file' to 'path' to be more accurate\n  * Set default make task to be install\n  * fork docs: change SSH to HTTPS in example\n  * effort: fix active days always 1\n  * Merge pull request #419 from nicolaiskogheim/git-guilt\n  * Merge pull request #420 from nicolaiskogheim/git-summary\n  * line-summary: 'function f{...' -> 'f() {...'\n  * line-summary: add missing quotation marks\n  * line-summary: tighten regex\n  * summary docs: Remove --line example\n  * summary docs: explain relation to git-line-summary\n  * summary docs: use correct order of arguments\n  * guilt: remove --help option\n  * guilt: document call without arguments\n  * guilt docs: Capitalize letters\n  * guilt: Adds simplified example\n  * Merge pull request #418 from nicolaiskogheim/fork-bugfix\n  * fork: http-urls had colon instead of slash\n  * Merge pull request #416 from nicolaiskogheim/fork-docs\n  * Merge pull request #415 from nicolaiskogheim/contrib-docs\n  * fork: original->upstream in docs\n  * contrib: update docs\n  * Merge pull request #414 from nicolaiskogheim/alias-docs\n  * alias: docs\n  * Add completion for git-psykorebase.\n  * Create a bash version of git-psykorebase — Fixes #411\n  * Merge pull request #409 from nicolaiskogheim/refactor-alias\n  * alias: polish the docs\n  * alias: bugfix\n  * Merge pull request #408 from nicolaiskogheim/refactor-contrib\n  * contrib: refactor, and conform to git\n  * Merge pull request #405 from nicolaiskogheim/fix-filenames-with-spaces\n  * Merge pull request #404 from nicolaiskogheim/freebsd-fix\n  * Merge pull request #406 from nicolaiskogheim/portable-msysgit\n  * git-alias: use sed insted of colrm\n  * git-changelog: use cp instead of mv\n  * git-extras: use git-help instead of man\n  * add install script for PortableGit(msysgit)\n  * Quote variables bc of filenames with spaces\n  * Guard against 'seq 0'\n  * Fix error on FreeBSD with process substitution\n  * Pass --import-functions if required\n  * Merge pull request #403 from andreicristianpetcu/master\n  * effort: documentation for git effort --since #326\n  * Merge pull request #401 from nicolaiskogheim/effort-above-error-on-NaN\n  * effort: error on bad value to --above\n  * Merge pull request #400 from nicolaiskogheim/fix-off-by-one\n  * Merge pull request #391 from nicolaiskogheim/effort-limit-commits\n  * Merge pull request #388 from chernjie/release\n  * Merge pull request #398 from nicolaiskogheim/git-graft\n  * Merge pull request #399 from nicolaiskogheim/git-archive-file\n  * archive-file: cleaner way to get current branch\n  * graft: Require destination branch. Fix #23\n  * effort: don't count untouched files\n  * Add info about new options to man pages\n  * Add completion for more options to effort\n  * Do proper argument parsing\n  * effort: allow sending options to log. Fix #326\n  * Merge pull request #396 from tocker/bug/changelog-catch-head\n  * Catch \"HEAD -> master\" when creating the changelog\n  * Merge pull request #394 from markeissler/changelog-signal-trap\n  * Remove unused var.\n  * Merge pull request #390 from nicolaiskogheim/effort-color-relative-to-above\n  * Handle signals in git-changelog.\n  * Meke coloring respect --above. Fix 74\n  * Merge pull request #392 from nicolaiskogheim/WIP-effort-parallelize\n  * Avoid spawning subshell\n  * Remove unnecessary call to cat\n  * perf: reduce calls to git log\n  * Parallelize git-effort with xargs\n  * Alter options to git log. Remove pipe\n  * cd man && ./manning-up.sh && git diff --stat | grep ' 2 ' | awk '{print }' | xargs git checkout --\n  * Merge pull request #386 from rstacruz/patch-2\n  * Use https for git-fork\n  * Merge pull request #385 from gisphm/master\n  * added windows installation section in the Installation.md\n  * format install.cmd\n  * add install.cmd for installation on windows\n  * Merge pull request #383 from Somasis/master\n  * Makefile: Use a more portable mktemp invocation\n  * Using shorter URL\n  * Merge pull request #381 from spacewander/master\n  * installation with curl and bash\n  * Merge pull request #380 from spacewander/master\n  * keep installation silent\n  * Merge pull request #378 from spacewander/master\n  * update installation in `git-extras update`\n  * Merge pull request #377 from go2null/master\n  * FIXes location of `--` for `grep`\n  * FIXes 'mktemp' to work again on Linux\n  * Merge pull request #373 from zlx/feature/document_line_summary\n  * Document for git-line-summary\n  * Merge pull request #372 from spacewander/patch-1\n  * install the latest release version of git-extras\n  * Merge pull request #370 from phigoro/master\n  * git-effort: replace \"wc | cut\" with \"wc | awk\"\n  * Merge pull request #369 from phigoro/master\n  * align hashbang of git-guilt & git-merge-into\n  * Merge pull request #368 from zlx/feature/strong_line_summary\n  * Fix Fatal for git-line-summary\n  * Merge pull request #365 from rkennedy/bug-ignore-regex2\n  * Don't treat ignored patterns as regexps\n\n3.0.0 / 2015-04-27\n==================\n\n  * Merge pull request #363 from chernjie/pre-release-docs\n  * run pre-release ./manning-up.sh\n  * Merge pull request #362 from chernjie/git-scp\n  * Updated documentation for git-scp and slight feature change\n  * Merge pull request #359 from chernjie/docs\n  * Merge pull request #361 from markeissler/better-changelog-fixes\n  * Fix git tag substring extraction for bash 3.2.\n  * Merge pull request #360 from spacewander/master\n  * Merge pull request #355 from markeissler/better-changelog-fixes\n  * Merge branch 'better-changelog-fixes' of github.com:markeissler/git-extras into better-changelog-fixes\n  * add support for git version below 2.2.0\n  * Fix git-changelog for compatibility for bash<4. Fixes #337, #338\n  * Merge pull request #1 from spacewander/better-changelog-fixes\n  * correct the broken regex\n  * Rearrange documentation links, see #358\n  * Merge branch 'https://github.com/tj/git-extras.wiki/master' into docs, see #358\n  * Merge pull request #357 from imsky/merge-repo\n  * git-merge-repo\n  * git merge-repo\n  * add wiki for git-guilt\n  * add support for git version below 2.2.0\n  * Fix git-changelog for compatibility for bash<4. Fixes #337, #338\n  * Merge pull request #349 from spacewander/git-guilt\n  * fix indentation errors in git guilt\n  * Merge pull request #345 from spacewander/git-guilt\n  * Hope to fix #341\n  * Merge pull request #344 from Somasis/master\n  * use argument separator for usages of `grep` which can choke on weird input\n  * helper/reset-env: helper to prevent GREP_OPTIONS from causing issues\n  * Merge pull request #342 from spacewander/git-guilt\n  * add docs for git guilt\n  * add git-guilt\n  * Merge pull request #340 from spacewander/git-effort\n  * sort unless there is only one item\n  * Merge pull request #333 from paulschreiber/merged-branches\n  * add show-merged-branches and show-unmerged-branches\n  * Merge pull request #334 from paulschreiber/dont-delete-svn-branch\n  * when deleting merged branches, preserve \"svn\" branch for git-svn Fixed #328\n  * Merge pull request #324 from chernjie/git-ignore\n  * Merge pull request #331 from markeissler/better-changelog-fixes\n  * Fix tag trapping when HEAD and tag point to same commit.\n  * Fix gitflow commit history output.\n  * Merge pull request #327 from markeissler/better-changelog-completion\n  * Updated bash completions for better-changelog.\n  * Update docs for revised git-changelog.\n  * Merge pull request #325 from markeissler/better-changelog\n  * Complete rewrite to support commit ranges for pretty and list output.\n  * Support ~ in add_patterns for git-ignore\n  * Support ~ in show git-ignore\n  * add wiki for git-merge-into\n  * Merge pull request #323 from spacewander/master\n  * add docs for git-merge-into\n  * add merge-into to merge two branches quickly\n  * Merge pull request #322 from andrewsomething/master\n  * git-fresh-branch: Check for changes and prompt for input before nuking. (Issue: #142)\n  * Merge pull request #308 from spacewander/git-utility\n  * Merge pull request #312 from RichardLitt/feature/concat-extra-feature-names\n  * Merge pull request #320 from cironunes/gh-pages-fix\n  * fix gh-pages to stash and don't delete files\n  * Merge pull request #319 from pfctgeorge/allow-empty-when-setup\n  * Allow empty initial commit when setup repo.\n  * Merge pull request #317 from jykntr/master\n  * git-summary correctly displays project name\n  * git scp #300\n  * Merge pull request #316 from code42day/changelog-config\n  * changelog: add git-config support for format and log options\n  * Merge pull request #315 from code42day/consistent-editor\n  * use standard git editor in git-authors & git-changelog\n  * Merge pull request #314 from snowyu/feature/custom-commit-message\n  * + custom commit message options supports\n  * Merge pull request #300 from chernjie/git-scp\n  * Merge pull request #313 from wooorm/bug/fix-missing-closing-brace\n  * Fix missing closing curly brance in `bash_completion.sh`\n  * Added in option to concat extra feature names\n  * link to git delta\n  * git delta usage\n  * Merge pull request #310 from imsky/git-delta\n  * git-delta\n  * Add git-authors\n  * Merge pull request #309 from wooorm/feature/add-git-authors\n  * Add git-authors\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * tj#300 Added bash completion\n  * extra mktemp into git_extra_mktemp\n  * Merge pull request #307 from ckhall/feature/add_git_chore_workflow\n  * adding git-chore\n  * Merge pull request #306 from spacewander/master\n  * add enough X to fix #303. GNU mktemp requires at least three X in the last part of template.\n  * Merge pull request #304 from wooorm/git-ignore-typo\n  * Fix typo in in `git ignore` message\n  * symlink git-rscp to git-scp\n  * Avoid duplicating asterisk.\n  * Updated License.\n  * Fix link to git feature command\n  * path argument can not be optional in `rscp`; add more docs\n  * OMG a spelling mistake\\!\n  * Merge pull request #301 from raeffs/master\n  * updated documentation because git-squash does no longer delete source-branch\n  * Updated man page for git-scp\n  * First RFC documentation\n  * Merge pull request #299 from jonanp/git-delete-branch\n  * When deleting a branch check if git has config.\n  * Added a footer.\n  * Merge pull request #298 from timfeirg/master\n  * remove stuff from readme & form a list\n  * add a few keywords\n  * some remaining dashes\n  * roughly finished\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * Updated Commands (markdown)\n  * gonna use the clean sub command for each command explanation\n  * adding links turn out to be a pain, go to sleep\n  * add commands page link\n  * add commands page, all copy & paste\n  * add screencasts\n  * copy from readme\n  * Updated Install (markdown)\n  * Created Install (markdown)\n  * adapted a more generic, customizable and friendly script\n  * Copy from git-goth https://github.com/chernjie/git-goth\n  * Initial Home page\n  * Merge pull request #296 from spacewander/add-completion\n  * add more bash completion functions\n  * Merge pull request #294 from GuillaumeSeren/feature/git-missing-add-ref-completion\n  * Add ref completion to git-missing.\n  * Merge pull request #293 from tj/revert-291-ignore-man-generated-files\n  * Revert \"Ignore *.html and *.1 auto-generated files in man/\"\n  * Merge pull request #292 from RasmusWL/make-handle-missing-man\n  * make will not assume man pages already exists\n  * Merge pull request #291 from jguenther/ignore-man-generated-files\n  * Ignore man/git-*.html and man/git-*.1\n  * Remove auto-generated files man/git-*.html and man/git-*.1\n  * Merge pull request #226 from tsldh/master\n  * added changelog to release as optional flag\n  * Merge pull request #289 from mavant/feature/mktemp\n  * Use mktemp for temporary file creation.\n  * Merge pull request #288 from dead-horse/release-hook\n  * make release hook more flexible\n  * Merge pull request #287 from benjaminparnell/master\n  * added --no-color to git-delete-merged-branches\n  * More portable she-bangs.\n  * Merge pull request #283 from e28eta/patch-1\n  * Use process-specific tmp file and clean up on exit\n  * Merge pull request #281 from emilkje/patch-1\n  * Merge pull request #280 from valeriangalliat/feature/git-info-posix\n  * Update Readme.md\n  * git-info: POSIX compliance\n  * Merge pull request #278 from tj/delete-submodule-fix\n  * Fixes #277\n  * Merge pull request #276 from spacewander/master\n  * modify the behavior of git-ignore, now it will cd root to find .gitignore\n\n2.2.0 / 2014-11-18\n==================\n\n* Update `mktemp` command to work on Mac OS X\n* Merged pull request #273 from spacewander/master\n* New command 'git root' to show the path to root of repo\n* Merged pull request #271 from bohnman/git-rename-tag-fix\n* Merged pull request #272 from spacewander/master\n* Correct the format of git-rebase-patch.md.\n* Replaced visionmedia/git-extras to tj/git-extras\n* Merged pull request #270 from kevinawoo/hotfix/git-locked\n* Added git-locked to check what files have been locked.\n* Merged pull request #268 from GuillaumeSeren/bug/git-missing\n* Fixed #267, git-missing did not catch branch name.\n\n2.1.0 / 2014-10-13\n==================\n\n * Fixes #266\n * Merge pull request #264 from jamesmanning/patch-1\n * fixed descriptions: match required/optional params\n * Merge pull request #263 from Yitsushi/bug/180-does-not-check-out-branch-if-it-already-exists\n * fix #180 and #232 feature|bug|refactor checkout\n * Merge pull request #262 from rstacruz/gh-259-git-pr\n * Implement git-pr\n * Merge pull request #261 from sanusart/master\n * FIX: representation of git-info\n * Merge pull request #260 from brandondrew/patch-1\n * import changes *from* a branch\n * Merge pull request #258 from spacewander/master\n * use mixin to add 'is git repo' check for some commands\n * Merge pull request #255 from sanusart/master\n * Bump version in `bin/git-extras`\n * Changelogs for version 2.0.0\n\n2.0.0 / 2014-09-20\n==================\n\n * Merge pull request #254 from spacewander/master\n * add welcome in git-repl\n * Merge pull request #253 from tailored-tunes/master\n * Added option to specify base\n * Merge pull request #252 from sorbits/patch-1\n * Update homebrew URL and remove ‘buggy’ label\n * Merge pull request #250 from sanusart/master\n * ADD: git-reset-file\n * Merge pull request #248 from rstacruz/patch-1\n * Readme: document git-delete-merged-branches\n * Merge pull request #247 from visionmedia/perm_fix\n * File perms fix.\n * Merge pull request #242 from sanusart/fix_feature_refactor_bug\n * Merge pull request #244 from toksea/patch-1\n * Merge pull request #243 from sanusart/issue234\n * Fix wrong git-info heading level in Readme.md\n * Revert 2 commits to `git-changelog`\n * Fix feature|refactor|bug testing argument for string length\n * Merge pull request #240 from egrim/bug/delete-merged-branches-clobbers-master\n * Update docs to match `git-delete-merged-branches` behavior\n * Exempt `master` from deleted branches\n * Merge pull request #239 from bruno-/refactor_git_squash\n * Refactor and improve `git squash`\n * Merge pull request #238 from techjacker/feature/git-fork\n * add git-fork\n * Merge pull request #236 from jbnicolai/align-authors-git-summary\n * Uses column -t to align summary output in a table.\n * Merge pull request #221 from zlx/feature/git-summary-doc\n * Merge pull request #224 from StewartJarod/patch-1\n * Merge pull request #189 from rhacker/patch-1\n * Merge pull request #235 from sanusart/patch-1\n * FIX: check if un-pushed commits\n * Merge pull request #202 from julionc/protecting-files\n * Update Readme.md with lock and unlock commands\n * git-unlock Unlock local files in git repository\n * git-lock Lock files in git repository\n * Merge pull request #100 from niklasf/rebase-patch\n * Add git-rebase-patch\n * Merge pull request #200 from emkay/patch-1\n * Merge pull request #195 from carlcasbolt/patch-1\n * Merge pull request #181 from zeroDivisible/feature/handle-misspellings\n * Merge pull request #193 from pzelnip/git-setup-no-overwrite\n * Merge pull request #183 from chernjie/master\n * Merge pull request #220 from sanusart/master\n * Merge pull request #63 from justone/git_missing\n * Merge pull request #173 from accerqueira/master\n * Merge pull request #194 from makeusabrew/patch-1\n * Merge pull request #216 from stephenmathieson/fix/changelog-large-versions\n * Merge pull request #188 from twolfson/dev/add.multi.delete.squashed\n * Merge pull request #219 from jhoffmann/patch-1\n * Merge pull request #222 from jsipprell/pull/filenames-containing-spaces\n * Merge pull request #223 from mwoc/master\n * Merge pull request #229 from yggdr/master\n * Merge pull request #231 from petersohn/master\n * Make git-obliterate work if there are whitespaces in filename\n * invoke bash via /usr/bin/env for portability\n * improved Makefile with BINPREFIX\n * fixed Makefile uninstall target for man files\n * Letter spacing in author list\n * Use two-space indents for log entry output, so it again is debian changelog compatible (as before commit 1235e4a5)\n * git effort: handle filenames containing whitespace cleanly\n * Add line-summary as an options --line  & doc\n * Add check for no changes in the tree (no sub-modules)\n * Update Readme.md\n * Fix changelog formatting for large version numbers\n * removing `git promote`\n * Update Readme.md\n * Fix git-squash typo\n * Address issue #190, git-setup should test for existing .git in target directory\n * Add comment for the code\n * Added multi-delete for git-delete-branch and git-delete-tag Correcting typos Compiled latest documentation Applying changes from delete-tag to delete-branch for consistency Removed unnecessary string quotes (thanks `git` ref design) and everything works Tags are not being found with string concatenation Updated delete-tag to accept multiple tags Corrections for delete-branch Updating docs for delete-tag Added 'Todd Wolfson' to AUTHORS Updated documentation for delete-branch Moved deletions to concatenate strings and delete in one fell swoop Reworking delete-branch to delete multiple branches in series\n * git-create-branch: bug fix for branch creation use HEAD instead of origin\n * changed the code for git bug|feature|refactor to only accept single argument when not finishing a bug|feature|refactor. This is an easy solution to avoid misspelings of the word 'finish'\n * allow options to be passed through to git log\n * adding git-missing command\n\n1.9.1 / 2014-06-21\n==================\n\n * add --no-merges option to changelog\n * fix git-changelog errors when multiple files match change|history\n * fix git-changelog errors on first usage\n * update git-changelog docs for --no-merges option\n\n1.9.0 / 2013-06-18\n==================\n\n * git-squash: add --me flag to flatten the current branch\n * Make repository_age() \"history rewrite safe\"\n * add git-line-summary\n\n1.8.0 / 2013-05-15\n==================\n\n  * add `git-archive-file(1)`\n  * add --tag support to git-changelog(1) to reduce manual editing\n  * add !cmd support to git-repl\n  * change: git-delete-merged-branches: use -D instead of delete-branch\n\n1.7.0 / 2012-06-11\n==================\n\n  * Added repo age to `git-summary` [muhtasib]\n\n1.6.0 / 2012-06-04\n==================\n\n  * Added `git-rename-tag`\n  * Added current branch to `git-repl`\n  * Fixed: use dirname for `git extras update` [wilmoore]\n\n1.5.1 / 2012-03-15\n==================\n\n  * Reverted 1.5.0 changes, breaks git-changelog\n\n1.4.0 / 2012-02-08\n==================\n\n  * Added: allow files to be passed to `git-effort(1)`. Closes #71\n  * Added: hide/show cursor for `git-effort(1)`\n  * Changed: color `git-effort(1)` commits / active days independently\n\n1.3.0 / 2012-02-08\n==================\n\n  * Added active days to `git-effort(1)` output\n\n1.2.0 / 2012-02-08\n==================\n\n  * Added a greater color range to `git-effort(1)`\n  * Added `--above <n>` to `git-effort(1)`\n\n1.1.0 / 2012-02-07\n==================\n\n  * Added `git-effort(1)` (not yet complete)\n\n1.0.0 / 2012-02-04\n==================\n\n  * Added `git-squash BRANCH [MSG]` to merge as a single commit\n\n0.9.0 / 2012-01-15\n==================\n\n  * Added bash completion support [jweslley]\n\n0.8.1 / 2011-12-30\n==================\n\n  * Removed `git-promote`\n\n0.8.0 / 2011-12-08\n==================\n\n  * Added `pre-release` and `post-release `hooks to git-release\n  * Added `git-promote`\n  * Fixed: \"git extra update\" errors when pwd includes whitespace\n\n0.7.0 / 2011-08-24\n==================\n\n  * Added percentages to `git-summary`\n\n0.6.0 / 2011-06-24\n==================\n\n  * Added `git-back` command for soft undos [Kenneth Reitz]\n\n0.5.1 / 2011-05-20\n==================\n\n  * revert `git-ignore` but retain argc == 0 as showing .gitignore contents\n  * revert broken `git-release`\n\n0.5.0 / 2011-05-19\n==================\n\n  * Added `git-alias` [jweslley]\n  * Added `git-create-branch` [jweslley]\n  * Fixed one-liner due to `git extras update` change\n  * Fixed; `git-setup` creates a directory if the provided one does not exist [jweslley]\n  * Fixed; `git-setup` support for directories with spaces [jweslley]\n  * Fixed; `git-ignore` with no args no longer fails if `.gitignore` does not exist [jweslley]\n\n0.4.1 / 2011-04-05\n==================\n\n  * Changed; `git-graft` now defaults to current branch instead of master [Kenneth Reitz]\n\n0.4.0 / 2011-04-05\n==================\n\n  * Added `git-refactor`\n  * Added `git-bug`\n  * Added `git-feature`\n\n0.3.0 / 2011-03-29\n==================\n\n  * Added `git-pull-request`\n\n0.2.0 / 2011-03-27\n==================\n\n  * Added `git-extras`\n  * Added __LICENSE__\n  * Removed `git-extras-version`, use `git extras --version`\n  * Removed `git-extras-update`, use `git extras update`\n  * Changed; make sure to get the last chronological tag, instead of relying on the bogus `git tag` sorting. [guillermo]\n\n0.1.0 / 2011-02-10\n==================\n\n  * Added `gh-pages` command\n\n0.0.7 / 2010-10-31\n==================\n\n  * Added man pages.\n  * Added `make clean`.\n  * Added `make docs`.\n  * Added -d -> -D. Closes #15.\n  * Added git-delete-submodule for delete submodules easily.\n  * Added; `git-ignore` now shows the contents of _./.git-ignore_ if no args are present.\n\n0.0.6 / 2010-10-22\n==================\n\n  * Added command `git-touch`.\n  * Use a shallow clone in `git-update-extras`.\n  * Create History.md if git-changelog can't find a target. Fixes #14.\n\n0.0.5 / 2010-10-08\n==================\n\n  * Added `git-delete-submodule`.\n  * Added; `git-ignore` without pattern shows .gitignore contents.\n  * Added; `git-setup` argument is now optional, defaulting to the CWD.\n  * Added REPL alias \"ls\" as ls-files.\n\n0.0.4 / 2010-09-10\n==================\n\n  * Added: `git-delete-branch`: Also delete the remote branch.\n  * Added `git-summary` commitish support.\n  * Added `git-graft` dest branch default of _master_.\n  * Added `git-setup`.\n  * Added `git-graft`.\n  * Added `git-undo` for removing recent commits.\n  * Fixed `git-delete-branch`: Don't fail if the local branch doesn't exist.\n  * Fixed __PREFIX__ to respect env vars.\n  * Fixed shift in `git-count`.\n\n0.0.3 / 2010-08-27\n==================\n\n  * Added `git-extras-version`.\n  * Added `git-update-extras`.\n  * Fixed `git-contrib` issue when the username is in a commit msg.\n  * Fixed: delete remote tag only if local was deleted.\n  * Fixed: delete remote branch only if local was deleted.\n  * Fixed printing of authors for git-summary's on Ubuntu.\n  * Fixed: read doesn't have the -e option in SH on my machine at least.\n\n0.0.2 / 2010-08-24\n==================\n\n  * Added `git-summary`.\n  * Added `git-commits-since`.\n  * Added `git-repl`.\n  * Added `git-delete-tag`.\n  * Added `git-delete-branch`.\n  * Added `git-contrib`.\n  * Fixed handling off spaces in contributor's name for `git-contrib`.\n  * Fixed spaces in `git-release` names/numbers.\n  * Fixed readme.\n\n0.0.1 / 2010-08-05\n==================\n\n  * Docs for `git-ignore`. Closes #3.\n  * Merge branch 'ignore'.\n  * Added `git-ignore`.\n  * Readme typo.\n  * Fixed <tag> in docs.\n  * Install docs.\n  * Merge branch 'release'.\n  * Added `git-release`.\n  * Fixed readme.\n  * Readme.\n  * Passing args to git shortlog.\n  * Added --all support to git-count.\n  * Initial commit.\n"
  },
  {
    "path": "Installation.md",
    "content": "# Installation\n\n## Dependencies\n\nSome commands require extra dependencies which are unavailable in some platforms.\nYou may need to install them manually. They are:\n\n* bash 4.0+\n* Git 2.17+\n* `column`\n* `awk`\n* `find`\n* `tput`\n* cURL (only required for `git-fork`, `git-ignore-io`, `git-pull-request`)\n* `ps` (only required for `git-changelog`)\n* `rsync` (only required for `git-rscp`, `git-scp`)\n* `xargs` (only required for `git-delete-merged-branches`, `git-force-clone`, `git-sed`, `git-scp`)\n\nIf `bash --version` shows a lower version, you need to update it.\nFor example, the default bash in Mac is usually too old and you may need to update it via `brew install bash`.\n\n## Installing with a package manager\n\nNote that only the Homebrew package is maintained by the git-extras developers directly.\nOther packages are maintained by the distribution's packagers or third-party volunteers.\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/git-extras.svg)](https://repology.org/project/git-extras/versions)\n\n### Debian\n\n```bash\n$ sudo $apt_pref update\n$ sudo $apt_pref install git-extras\n```\n\n### Fedora\n\n```bash\n$ sudo dnf install git-extras\n```\n\n### openSUSE\n\nSubstitute your openSUSE version in the command below (in this case we are considering openSUSE Leap 15.6):\n\n```bash\n$ sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/scm/15.6/devel:tools:scm.repo\n```\n\nand install it:\n\n```bash\n$ sudo zypper in -y git-extras\n```\n\n### RHEL/CentOS (requires [EPEL](https://fedoraproject.org/wiki/EPEL))\n\n```bash\n$ sudo yum install git-extras\n```\n\n### Ubuntu\n\n```bash\n$ sudo apt-get install git-extras\n```\n\n### Nix/NixOS\n\n```bash\n$ nix-env -i git-extras\n```\n\n### CRUX\n\n[Abdullah](https://github.com/AWAN) has written a [Pkgfile](https://abdullah.today/ports/git-extras/Pkgfile) for his beloved [distro](https://crux.nu).\n\n### Homebrew\n\n```bash\n$ brew install git-extras\n```\n\nInstalling from Homebrew will not give you the option omit certain `git-extras` if they conflict with existing git aliases. To have this option, build from source.\n\n### Arch Linux\n\n* [git-extras](https://aur.archlinux.org/packages/git-extras/)\n* [git-extras-git](https://aur.archlinux.org/packages/git-extras-git/)\n\n### Windows\n\nFirst, please install `Git for Windows 2.x` from 'https://github.com/git-for-windows/git/releases'.\nSecond, clone the `git-extras` repo into any folder you like.\n\n```bash\ngit clone https://github.com/tj/git-extras.git\n# checkout the latest tag (optional)\ngit checkout $(git describe --tags $(git rev-list --tags --max-count=1))\n```\n\nAfter that, execute the `install.cmd` in the command prompt. If you installed\ngit as admin, you need to run this prompt as admin, too. Per default, it finds\na `Git for Windows 2.x` if it's in the path (first path in `where git.exe` wins)\nor installed in the default location `%ProgramFiles%\\Git`. The fallback is\n`C:\\SCM\\PortableGit`. If you didn't install git into one of these dirs, you have\nto supply the path for the install location, e.g. if git is installed\nin `c:\\git`:\n\n```batch\ninstall.cmd \"C:\\git\"\n```\n\nLast, to use `git summary` and `git ignore-io`, you need to copy\n`column.exe` from a [msys2][1] installation from `folder-your-msys2-installed/usr/bin`\nto `folder-your-git-installed/usr/bin` or wait for git 2.7.1, which will include column.exe.\n\n### FreeBSD\n\n```bash\n$ pkg install git-extras\n```\n\n### BSD\n\nUse the instructions to build from source below. Make sure you are using `gmake` (GNU `make`) instead of `make`.\n\n## Building from source\n\nRead [Dependencies](#dependencies) and ensure they are installed.\n\nObtain the git-extras source by cloning [its GitHub repo](https://github.com/tj/git-extras.git) or downloading a tarball of a [release](https://github.com/tj/git-extras/releases). Then install it by doing `make install` from the source tree.\n\n```bash\n$ git clone https://github.com/tj/git-extras.git\n$ cd git-extras\n# checkout the latest tag\n$ git checkout $(git describe --tags $(git rev-list --tags --max-count=1))\n$ [sudo] make install\n```\n\nBy default, git-extras is installed under `/usr/local`. To install it at an\nalternate location, specify a `PREFIX` when calling `make`.\n\n```bash\n# Non-root users can install under their home directory\nmake install PREFIX=$HOME/software\n\n# For third-party software kept under /opt\nmake install PREFIX=/opt\n```\n\nIf you want to relocate the bulk of the installation but still have configuration\nfiles installed to the system `/etc` dir or other alternate location, you can\nspecify `SYSCONFDIR` in addition to `PREFIX`.\n\n```sh\n$ sudo make install PREFIX=/usr/local SYSCONFDIR=/etc\n```\n\nSee the Makefile for details on advanced configuration options.\n\n## Installing from network\n\nOne-liner:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/tj/git-extras/main/install.sh | sudo bash /dev/stdin\n```\n\n## Installing as Zsh plugin\n\n[ZInit](https://github.com/zdharma/zinit) can install git-extras by using:\n\n```zsh\nzinit ice as\"program\" pick\"$ZPFX/bin/git-*\" src\"etc/git-extras-completion.zsh\" make\"PREFIX=$ZPFX\"\nzinit light tj/git-extras\n\n# or with the for syntax + async load\nzinit lucid wait'0a' for \\\nas\"program\" pick\"$ZPFX/bin/git-*\" src\"etc/git-extras-completion.zsh\" make\"PREFIX=$ZPFX\" tj/git-extras\n\n```\n\n`$ZPFX` is `~/.zinit/polaris` by default. Use `zinit update tj/git-extras` to update.\nThis method installs in `$HOME`, so you don't need to ask administrator to install package.\n\n## Updating\n\nIf you installed git-extras with a package manager, use that package manager's tools to update it.\n\nIf you installed git-extras from source, you can run `git-extras update` to update it to the latest release. Be aware that this may lose any configuration options you specified during the original installation.\n\nEnjoy `git-extras`!\n\n[1]: https://sourceforge.net/projects/msys2/\n"
  },
  {
    "path": "LICENSE",
    "content": "(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> and Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "PREFIX ?= /usr/local\nBINPREFIX ?= \"$(PREFIX)/bin\"\nSYSCONFDIR ?= $(PREFIX)/etc\nSHELL := bash\n\nOS = $(shell uname)\nifeq ($(OS), FreeBSD)\n\tMANPREFIX ?= \"$(PREFIX)/man/man1\"\n\tifeq ($(MANPREFIX), /usr/local)\n\t\tMANPREFIX = \"/usr/local/man/man1\"\n\tendif\nelse\n\tMANPREFIX ?= \"$(PREFIX)/share/man/man1\"\nendif\nifeq ($(OS), Darwin)\n\tCOMPL_DIR ?= \"$(DESTDIR)$(SYSCONFDIR)/bash_completion.d\"\nelse ifeq ($(OS), FreeBSD)\n\tCOMPL_DIR ?= \"$(DESTDIR)$(SYSCONFDIR)/bash_completion.d\"\nelse\n\tCOMPL_DIR ?= \"$(DESTDIR)$(SYSCONFDIR)/bash-completion/completions\"\nendif\n\nBINS = $(wildcard bin/git-*)\nMANS = $(wildcard man/git-*.md)\nMAN_BINS = $(filter-out man/git-extras.md, $(MANS))\nMAN_HTML = $(MANS:.md=.html)\nMAN_PAGES = $(MANS:.md=.1)\nCODE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))\nINSTALL_VIA ?= source\n# Libraries used by all commands\nLIB = \"helper/reset-env\" \"helper/git-extra-utility\"\n\nCOMMANDS = $(subst bin/, , $(BINS))\n\ndefault: install\n\ndocs: $(MAN_HTML) $(MAN_PAGES)\n\ncheck:\n\t@echo \"Check dependencies before installation\"\n\t@./check_dependencies.sh\n\t@echo\n\ninstall: check\n\t@if [ \"$(INSTALL_VIA)\" = brew ]; then \\\n\t\tgit apply brew-release.patch || { echo \"Can't apply brew release patch\"; exit 1; } \\\n\tfi\n\tmkdir -p $(DESTDIR)$(MANPREFIX)\n\tmkdir -p $(DESTDIR)$(BINPREFIX)\n\t@echo '... installing bins to '$(DESTDIR)$(BINPREFIX)\n\t@echo '... installing man pages to '$(DESTDIR)$(MANPREFIX)\n\t$(eval TEMPFILE := $(shell mktemp -q $${TMPDIR:-/tmp}/git-extras.XXXXXX 2>/dev/null || mktemp -q))\n\t@# chmod from rw-------(default) to rwxrwxr-x, so that users can exec the scripts\n\t@chmod 775 $(TEMPFILE)\n\t$(eval EXISTED_ALIASES := $(shell \\\n\t\tgit config --get-regexp 'alias\\..*' | awk '{print \"git-\" substr($$1, 7)}'))\n\t@$(foreach COMMAND, $(COMMANDS), \\\n\t\tshould_install='yes'; \\\n\t\tif [ ! -z \"$(filter $(COMMAND), $(EXISTED_ALIASES))\" ] && [ \"$$SKIP_CONFLICT_CHECK\" != yes ]; then \\\n\t\t\tread -p \"$(COMMAND) conflicts with an alias, still install it? [y/n]: \" answer; \\\n\t\t\tif [ \"$$answer\" = 'n' ] || [ \"$$answer\" = 'N' ]; then \\\n\t\t\t\tshould_install=\"no\"; \\\n\t\t\tfi; \\\n\t\tfi; \\\n\t\tif [ \"$$should_install\" = 'yes' ]; then \\\n\t\t\techo \"... installing $(COMMAND)\"; \\\n\t\t\thead -1 bin/$(COMMAND) > $(TEMPFILE); \\\n\t\t\tcat $(LIB) >> $(TEMPFILE); \\\n\t\t\tif ! grep \"$(COMMAND)\" not_need_git_repo >/dev/null; then \\\n\t\t\t\tcat ./helper/is-git-repo >> $(TEMPFILE); \\\n\t\t\tfi; \\\n\t\t\tif grep \"$(COMMAND)\" need_git_commit >/dev/null; then \\\n\t\t\t\tcat ./helper/has-git-commit >> $(TEMPFILE); \\\n\t\t\tfi; \\\n\t\t\ttail -n +2 bin/$(COMMAND) >> $(TEMPFILE); \\\n\t\t\tcp -f $(TEMPFILE) $(DESTDIR)$(BINPREFIX)/$(COMMAND); \\\n\t\tfi; \\\n\t)\n\t@if [ -z \"$(wildcard man/git-*.1)\" ]; then \\\n\t\techo \"WARNING: man pages not created, use 'make docs' (which requires 'ronn' ruby lib)\"; \\\n\telse \\\n\t\tcp -f man/git-*.1 $(DESTDIR)$(MANPREFIX); \\\n\t\techo \"cp -f man/git-*.1 $(DESTDIR)$(MANPREFIX)\"; \\\n\tfi\n\t@mkdir -p $(COMPL_DIR)\n\tcp -f etc/bash_completion.sh $(COMPL_DIR)/git-extras\n\t@echo \"\"\n\t@echo \"If you are a zsh user, you may want to 'source $(CODE_DIR)etc/git-extras-completion.zsh'\" \\\n\t\t\"and put this line into ~/.zshrc to enable zsh completion\"\n\t@echo \"If you are a fish user, you may want to copy or link '$(CODE_DIR)etc/git-extras.fish'\" \\\n\t\t\"to '~/.config/fish/completions/'\"\n\nman/index.txt: $(MANS)\n\techo '# manuals' > $@.tmp\n\tfor file in $(sort $^) ; do \\\n\t\textra=$${file%.md} ; \\\n\t\textra=$${extra#man/} ; \\\n\t\techo \"$$extra(1) $$extra\" >> $@.tmp ; \\\n\tdone\n\tmv -f $@.tmp $@\n\nman/git-extras.md: $(MAN_BINS)\n\tln=$$(awk '/## COMMANDS/{print NR};' $@) ; \\\n\tawk \"NR <= $$ln+1\" $@ > $@.tmp\n\tfor file in $(sort $^) ; do \\\n\t\thead -n1 $$file | \\\n\t\tsed 's/^/   - **/;s/ -- /** /' >> $@.tmp ; \\\n\tdone\n\tln=$$(awk '/## AUTHOR/{print NR};' $@) ; \\\n\tawk \"NR >= $$ln-1\" $@ >> $@.tmp\n\tmv -f $@.tmp $@\n\nman/%.html: man/%.md man/index.txt\n\tronn \\\n\t\t--manual \"Git Extras\" \\\n\t\t--html \\\n\t\t--pipe \\\n\t\t$< > $@\n\nman/%.1: man/%.md\n\tronn -r \\\n\t\t--manual \"Git Extras\" \\\n\t\t--pipe \\\n\t\t$< > $@\n\nuninstall:\n\t@$(foreach BIN, $(BINS), \\\n\t\techo \"... uninstalling $(DESTDIR)$(BINPREFIX)/$(notdir $(BIN))\"; \\\n\t\trm -f $(DESTDIR)$(BINPREFIX)/$(notdir $(BIN)); \\\n\t)\n\t@$(foreach MAN, $(MAN_PAGES), \\\n\t\techo \"... uninstalling $(DESTDIR)$(MANPREFIX)/$(notdir $(MAN))\"; \\\n\t\trm -f $(DESTDIR)$(MANPREFIX)/$(notdir $(MAN)); \\\n\t)\n\trm -f $(COMPL_DIR)/git-extras\n\nclean: docclean\n\ndocclean:\n\trm -f man/*.1\n\trm -f man/*.html\n\ntest:\n\tpytest\n\n.PHONY: default docs check install uninstall clean docclean test\n"
  },
  {
    "path": "Readme.md",
    "content": "# Git Extras\n\nLittle git extras.\n\n## Screencasts\n\nJust getting started? Check out these screencasts:\n\n* [introduction](https://vimeo.com/45506445) ([archive.org link](https://web.archive.org/web/20230219181235id_/vod-progressive.akamaized.net/exp=1676834145~acl=%2Fvimeo-prod-skyfire-std-us%2F01%2F4101%2F1%2F45506445%2F107111328.mp4~hmac=065b68f23c4b6a222463097b36d1c346995a9559baa9b819972da95550018471/vimeo-prod-skyfire-std-us/01/4101/1/45506445/107111328.mp4)) -- covers `git-ignore`, `git-setup`, `git-changelog`, `git-release`, `git-effort` and more\n\n## Installation\n\nSee the [Installation](Installation.md) page.\n\n## Commands\n\nGo to the [Commands](Commands.md) page for basic usage and examples.\n\n__GIT utilities__ -- repo summary, repl, changelog population, author commit percentages and more\n\n## Contributing\n\nInterested in contributing? Awesome!\n\nPlease read [Contributing](CONTRIBUTING.md) before you make a PR, thanks!\n\n## The change of the default branch\n\nAs of Git Extras 6.4 the assumed default branch name changed from `master` to `main`.\nThis affects the Git Extras commands `git archive-file`, `git delete-merged-branches`, `git delta`, `git pull-request`, `git show-merged-branches`, `git show-unmerged-branches`, and `git squash`.\n\nTo change the default branch name to `master`: change either the configuration `git-extras.default-branch` or `init.defaultBranch` to `master`; the former takes precedence.\n\nFor example, `git config git-extras.default-branch master`.\n"
  },
  {
    "path": "bin/git-abort",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\ndiscover_op() {\n  local gitdir\n  # git rev-parse emits an error if not in a git repo so only need to bail out\n  gitdir=\"$(git rev-parse --git-dir)\" || exit\n  local op\n  for op in cherry_pick merge rebase revert ; do\n      if [ -f \"${gitdir}/${op^^}_HEAD\" ]; then\n          echo \"${op/_/-}\"\n      fi\n  done\n}\n\nvalidate_op() {\n  local op=\"$1\"\n  if [ -z \"$op\" ]; then\n    echo \"No active operation found\" >&2\n    exit 1\n  fi\n  if [[ \"$(echo \"$op\" | wc -l)\" -gt 1 ]]; then\n    echo \"Multiple active operations found:\" >&2\n    gitdir=\"$(git rev-parse --git-dir)\" || exit\n    for o in $op; do\n      echo \"  - $o: HEAD: $(cat \"${gitdir}/${o}_HEAD\")\" >&2\n    done\n    exit 1\n  fi\n}\n\ndiscover_action() {\n    local action=${1/git-/}\n    if [ \"$action\" != \"abort\" ] && [ \"$action\" != \"continue\" ]; then\n        echo \"Invalid action: $1\" >&2\n        exit 1\n    fi\n    echo \"$action\"\n}\n\naction=$(discover_action \"$(basename \"$0\")\")\nop=$(discover_op)\nvalidate_op \"$op\"\n\ngit \"$op\" \"--$action\"\n"
  },
  {
    "path": "bin/git-alias",
    "content": "#!/usr/bin/env bash\n\noptions=\"\"\n\nusage() {\ncat <<HERE\nusage: git alias [options]                          # list all aliases\n   or: git alias [options] <search-pattern>         # show aliases matching pattern\n   or: git alias [options] <alias-name> <command>   # alias a command\noptions:\n\n    --global  Show or create alias in the system config\n    --local   Show or create alias in the repository config\nHERE\n}\n\nif [[ \"$1\" == \"--local\" || \"$1\" == \"--global\" ]]; then\n    options=$1\n    shift\nfi\n\ncase $# in\n  0)\n      if [[ -z \"$options\" ]]; then\n        git config --get-regexp 'alias.*' | sed 's/^alias\\.//' | sed 's/[ ]/ = /' | sort\n      else\n        git config \"$options\" --get-regexp 'alias.*' | sed 's/^alias\\.//' | sed 's/[ ]/ = /' | sort\n      fi\n      ;;\n  1)\n      if [[ -z \"$options\" ]]; then\n        git config --get-regexp 'alias.*' | sed 's/^alias\\.//' | sed 's/[ ]/ = /' | sort | grep -e \"$1\"\n      else\n        git config \"$options\" --get-regexp 'alias.*' | sed 's/^alias\\.//' | sed 's/[ ]/ = /' | sort | grep -e \"$1\"\n      fi\n      ;;\n  2)\n      if [[ -z \"$options\" ]]; then\n        git config alias.\"$1\" \"$2\"\n      else\n        git config \"$options\" alias.\"$1\" \"$2\"\n      fi\n      ;;\n  *) >&2 echo \"error: too many arguments.\" && usage && exit 1 ;;\nesac\n"
  },
  {
    "path": "bin/git-archive-file",
    "content": "#!/usr/bin/env bash\n\n# extract current branch name\nBRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\n\n# get name of the most top folder of current directory, used for the\n# output filename\nARCHIVE_NAME=$(basename \"$(git rev-parse --show-toplevel)\")\n\nif [[ $BRANCH = tags* ]]; then\n    BRANCH=$(git describe)\n    echo Building for tag \"\\\"$BRANCH\\\"\"\n    FILENAME=$ARCHIVE_NAME.$BRANCH.zip\nelse\n    echo Building archive on branch \"\\\"$BRANCH\\\"\"\n    # get a version string, so archives will not be overwritten when creating\n    # many of them\n    VERSION=$(git describe --always --long)\n    # if not on master append branch name into the filename\n    if [ \"$BRANCH\" = \"$(git_extra_default_branch)\" ]; then\n        FILENAME=$ARCHIVE_NAME.$VERSION.zip\n    else\n        FILENAME=$ARCHIVE_NAME.$VERSION.$BRANCH.zip\n    fi\nfi\n\n# rename invalid chars for the file path\nFILENAME=${FILENAME//\\//-}\nFILENAME=${FILENAME//\\\\/-}\n# combine path and filename\nOUTPUT=$PWD/$FILENAME\n\n# building archive\ngit archive --format zip --output \"$OUTPUT\" \"$BRANCH\"\n\n# also display size of the resulting file\necho Saved to \\\"\"$FILENAME\"\\\" \\(\"$(du -h \"$OUTPUT\" | cut -f1)\"\\)\n"
  },
  {
    "path": "bin/git-authors",
    "content": "#!/usr/bin/env bash\n\nLIST=false\nNO_EMAIL=false\nFILE=\"\"\n\nwhile [[ $# -gt 0 ]]; do\n  case $1 in\n    -l|--list )\n      LIST=true\n      shift\n      ;;\n    --no-email )\n      NO_EMAIL=true\n      shift\n      ;;\n    * )\n      break\n  esac\ndone\n\nif ! $LIST; then\n  FILE=$1\n  if [ -z \"$FILE\" ]; then\n    FILE=$(find . -mindepth 1 -maxdepth 1 \\( -iname '*authors*' -o -iname '*contributors*' \\) | head -n1)\n    if [ -z \"$FILE\" ]; then\n      FILE='AUTHORS'\n    fi\n  fi\nfi\n\n#\n# list authors sorted by number of commits (descending).\n#\n\nauthors() {\n  if $NO_EMAIL; then\n    # email will be used to uniq authors.\n    git shortlog HEAD -sne | awk '{$1=\"\"; sub(\" \", \"\"); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++' \\\n      | awk -F'<' '{gsub(/ +$/, \"\", $1); print $1}'\n  else\n    git shortlog HEAD -sne | awk '{$1=\"\"; sub(\" \", \"\"); print}' | awk -F'<' '!x[$1]++' | awk -F'<' '!x[$2]++'\n  fi\n}\n\n#\n# authors.\n#\n\nif $LIST; then\n  authors\nelse\n  authors >> \"$FILE\"\nfi\n"
  },
  {
    "path": "bin/git-browse",
    "content": "#!/usr/bin/env bash\n\nremote=${1:-\"\"}\nbranch=\"\"\nfilename=${2:-\"\"}\nline1=${3:-\"\"}\nline2=${4:-\"\"}\n\n# get remote name\nif [[ $remote == \"\" ]]; then\n    branch=\"$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\"\n    remote=$(git config branch.\"${branch}\".remote || echo \"origin\")\nfi\n\nif [[ $remote == \"\" ]]; then\n    echo \"Remote not found\"\n    exit 1\nfi\n\nremote_url=$(git remote get-url \"$remote\") || exit $?\n\nif [[ $remote_url = git@* ]]; then\n    url=$(echo \"$remote_url\" | sed -E -e 's/:/\\//' -e 's/\\.git$//' -e 's/.*@(.*)/http:\\/\\/\\1/')\nelif [[ $remote_url = http* ]]; then\n    url=${remote_url%.git}\nfi\n\n# construct urls\ncommit_hash=$(git rev-parse HEAD 2>/dev/null)\ncommit_or_branch=${commit_hash:-${branch}}\n\nif [[ $remote_url =~ gitlab ]]; then\n    # construct gitlab urls\n    # https://gitlab.com/<user_or_group>/<repo>/-/blob/<commit_or_branch>/<filename>#L<line1>-<line2>\n    if [[ -n ${filename} ]]; then\n        url=\"${url}/-/blob/${commit_or_branch}/${filename}\"\n        if [[ -n \"${line1}\" ]]; then\n            url=\"${url}#L${line1}\"\n            if [[ -n \"${line2}\" ]]; then\n                url=\"${url}-${line2}\"\n            fi\n        fi\n    fi\nelif [[ $remote_url =~ github ]]; then\n    # construct github urls\n    # https://github.com/<user_or_org>/<repo>/blob/<commit_or_branch>/<filename>#L<line1>-L<line2>\n    if [[ -n \"${filename}\" ]]; then\n        url=\"${url}/blob/${commit_or_branch}/${filename}\"\n        if [[ -n \"${line1}\" ]]; then\n            url=\"${url}#L${line1}\"\n            if [[ -n \"${line2}\" ]]; then\n                url=\"${url}-L${line2}\"\n            fi\n        fi\n    fi\nelif [[ $remote_url =~ bitbucket ]]; then\n    # construct bitbucket urls\n    # https://bitbucket.org/<user_or_org>/<repo>/src/<commit_or_branch>/<filename>#lines-<line1>:<line2>\n    if [[ -n ${filename} ]]; then\n        url=${url}/src/${commit_or_branch}/${filename}\n        if [[ -n \"${line1}\" ]]; then\n            url=\"${url}#lines-${line1}\"\n            if [[ -n \"${line2}\" ]]; then\n                url=\"${url}:${line2}\"\n            fi\n        fi\n    fi\nfi\n\n# open url\ncase \"$OSTYPE\" in\ndarwin*)\n    # MacOS\n    open \"$url\"\n    ;;\nmsys)\n    # Git-Bash on Windows\n    start \"$url\"\n    ;;\nlinux*)\n    # Handle WSL on Windows\n    if uname -a | grep -i -q Microsoft && command -v powershell.exe; then\n        powershell.exe -NoProfile start \"$url\"\n    else\n        xdg-open \"$url\"\n    fi\n    ;;\n*)\n    # fall back to xdg-open for BSDs, etc.\n    xdg-open \"$url\"\n    ;;\nesac\n"
  },
  {
    "path": "bin/git-browse-ci",
    "content": "#!/usr/bin/env bash\n\nset -e -o pipefail\nif [[ $1 == \"\" ]]\nthen\n    branch=$(git rev-parse --abbrev-ref HEAD &> /dev/null)\n    remote=$(git config branch.\"${branch}\".remote || echo \"origin\")\nelse\n    remote=$1\nfi\n\nif [[ -z $remote ]]\nthen\n    echo \"Remote not found\"\n    exit 1\nfi\n\nremote_url=$(git remote get-url \"${remote}\") || exit $?\n\nif [[ $remote_url = git@* ]]\nthen\n    url=$(echo \"${remote_url}\" | sed -E -e 's/:/\\//' -e 's/\\.git$//' -e 's/.*@(.*)/http:\\/\\/\\1/')\nelif [[ $remote_url = http* ]]\nthen\n    url=${remote_url%.git}\nfi\n\nif [[ $url =~ github ]]\nthen\n    ci_url=${url}/actions\nelif [[ $url =~ gitlab ]]\nthen\n    ci_url=${url}/-/pipelines\nelif [[ $url =~ bitbucket ]]\nthen\n    ci_url=${url}/addon/pipelines/home\nfi\ncase \"$OSTYPE\" in\n    darwin*)\n        # MacOS\n        open \"${ci_url}\"\n        ;;\n    msys)\n        # Git-Bash on Windows\n        start \"${ci_url}\"\n        ;;\n    linux*)\n        # Handle WSL on Windows\n        if uname -a | grep -i -q Microsoft && command -v powershell.exe\n        then\n            powershell.exe -NoProfile start \"${ci_url}\"\n        else\n            xdg-open \"${ci_url}\"\n        fi\n        ;;\n    *)\n        # fall back to xdg-open for BSDs, etc.\n        xdg-open \"${ci_url}\"\n        ;;\nesac\n"
  },
  {
    "path": "bin/git-brv",
    "content": "#!/usr/bin/env bash\n# A sorted prettier branch -vv\n\nif ! (( BASH_VERSINFO[0] > 4 ||\n        BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 2 )); then\n    printf >&2 'This script requires bash 4.2 or newer\\n'\n    exit 1\nfi\n\n# allow the user to set a default reverse option in an environment variable\nreverse=$(git config --get git-extras.brv.reverse || echo false)\nwhile [[ $# -gt 0 ]]; do\n    case $1 in\n    -r | --reverse)\n        reverse=true\n        shift\n        ;;\n    *)\n        break\n        ;;\n    esac\ndone\n\nif [[ -t 1 ]]; then\n    shopt -s checkwinsize\n    COLUMNS=$(tput cols)\n    color_branch_local=$(git config --get-color color.branch.local normal)\n    color_branch_current=$(git config --get-color color.branch.current green)\n    color_diff_commit=$(git config --get-color color.diff.commit yellow)\n    color_branch_upstream=$(git config --get-color color.branch.upstream blue)\n    reset=$(tput sgr0)\nfi\n\n\ndeclare -A upstream date hash message\neval \"$(\n    git for-each-ref --format='upstream[%(refname:short)]=%(upstream:short)' \\\n                     --shell 'refs/heads/**'\n)\"\n\nfor b in \"${!upstream[@]}\"; do\n    blen=${#b} ulen=${#upstream[$b]}\n    (( bwidth = blen > bwidth ? blen : bwidth ))\n    (( uwidth = ulen > uwidth ? ulen : uwidth ))\n    IFS=/ read -r 'date[$b]' 'hash[$b]' 'message[$b]' < <(\n        git log --no-walk=unsorted --format=%ct/%h/%s \"$b\" --\n    )\n    hlen=${#hash[$b]}\n    (( hwidth = hlen > hwidth ? hlen : hwidth ))\ndone\n\nmapfile -t ordered < <(\n    # the reverse option of git-brv causes the sort to be sorted normally rather than in reverse\n    reverse_opt=\"\"\n    if [[ $reverse = false ]]; then\n        reverse_opt=\"-r\"\n    fi\n    for b in \"${!date[@]}\"; do\n        printf '%d\\t%s\\n' \"${date[$b]}\" \"$b\"\n    done | sort -n $reverse_opt | cut -f2-\n)\n\ncurrent=$(git symbolic-ref -q --short HEAD)\n\nfor b in \"${ordered[@]}\"; do\n    branch_color=$color_branch_local\n    if [[ $b = \"$current\" ]]; then\n        branch_color=$color_branch_current\n    fi\n    if [[ -t 1 ]]; then\n        msg=${message[$b]:0:COLUMNS-bwidth-uwidth-hwidth-14}\n    else\n        msg=${message[$b]}\n    fi\n    printf '%(%Y-%m-%d)T %s%*s%s %s%*s%s %s%*s%s %s\\n' \\\n           \"${date[$b]}\" \\\n           \"$branch_color\" \"-$bwidth\" \"$b\" \"$reset\" \\\n           \"$color_branch_upstream\" \"-$uwidth\" \"${upstream[$b]}\" \"$reset\" \\\n           \"$color_diff_commit\" \"-$hwidth\" \"${hash[$b]}\" \"$reset\" \\\n           \"$msg\"\ndone\n"
  },
  {
    "path": "bin/git-bulk",
    "content": "#!/usr/bin/env bash\ninverse=$(tput rev)\nreset=$(tput sgr0)\ntxtbld=$(tput bold)\nbldred=${txtbld}$(tput setaf 1)\n\n# default option settings\nguardedmode=false\nsinglemode=false\nallwsmode=false\nquiet=false\nno_follow_symlinks=false\nno_follow_hidden=false\n\n#\n# print usage message\n#\nusage() {\n  echo 1>&2 \"usage: git bulk [--no-follow-symlinks] [--no-follow-hidden] [-q|--quiet] [-g] ([-a]|[-w <ws-name>]) <git command>\"\n  echo 1>&2 \"       git bulk --addworkspace <ws-name> <ws-root-directory> (--from <URL or file>)\"\n  echo 1>&2 \"       git bulk --removeworkspace <ws-name>\"\n  echo 1>&2 \"       git bulk --addcurrent <ws-name>\"\n  echo 1>&2 \"       git bulk --purge\"\n  echo 1>&2 \"       git bulk --listall\"\n}\n\ncdfail() {\n  echo 1>&2 \"failed to change directory: $1\"\n  exit 1\n}\n\n# add another workspace to global git config\naddworkspace() {\n  git config --global bulkworkspaces.\"$wsname\" \"$wsdir\";\n  if [ -n \"$source\" ]; then\n        if [ ! -d \"$wsdir\" ]; then echo 1>&2 \"Path of workspace doesn't exist, make it first.\"; exit 1; fi\n        regex='http(s)?://|ssh://|(git@)?.*:.*/.*'\n        if [[ \"$source\" =~ $regex ]]; then\n            pushd \"$wsdir\" > /dev/null || cdfail \"$wsdir\"\n            git clone \"$source\"\n            popd > /dev/null || cdfail \"$OLDPWD\"\n        else\n            source=$(realpath \"$source\" 2>/dev/null)\n            if [ -f \"$source\" ]; then\n                pushd \"$wsdir\" > /dev/null || cdfail \"$wsdir\"\n                while IFS= read -r line; do\n                  if [ -n \"$line\" ]; then\n                    # the git clone command to take the complete line in the repository.txt as separate argument. This facilitated the cloning of the repository with a custom folder name.\n                    # shellcheck disable=SC2086\n                    git clone $line;\n                  fi\n                done < \"$source\"\n                popd > /dev/null || cdfail \"$OLDPWD\"\n            else\n                echo 1>&2 \"format of URL or file unknown\"\n            fi\n        fi\n    fi\n}\n\n# add current directory\naddcurrent() { git config --global bulkworkspaces.\"$wsname\" \"$PWD\"; }\n\n# remove workspace from global git config\nremoveworkspace() { checkWSName && git config --global --unset bulkworkspaces.\"$wsname\"; }\n\n# remove workspace from global git config\npurge() { git config --global --remove-section bulkworkspaces; }\n\n# list all current workspace locations defined\nlistall() { git config --global --get-regexp bulkworkspaces; }\n\n# guarded execution of a git command in one specific repository\nguardedExecution () {\n  if [ \"${quiet?}\" != \"true\" ] || $guardedmode; then\n    echo 1>&2 \"${bldred}->${reset} executing ${inverse}git $gitcommand${reset} in repository ${leadingpath%/*}/${bldred}${curdir##*/}${reset}\"\n  fi\n\n  if $guardedmode; then\n    echo 1>&2 -n \"   Execute command here (y/n)? \"\n    read -n 1 -r </dev/tty; echo 1>&2\n    if [[ $REPLY =~ ^[Yy]$ ]]; then\n      git \"$@\"\n    fi\n  else\n    git \"$@\"\n  fi\n}\n\n# check if the passed command is known as a core git command\ncheckGitCommand () {\n  if git help -a | grep -o -q \"\\b${corecommand}\\b\"; then\n    echo 1>&2 \"Core command \\\"$corecommand\\\" accepted.\"\n  else\n    if git config --get-regexp alias | grep -o -q \"\\.${corecommand} \"; then\n      echo 1>&2 \"Alias ${corecommand} accepted.\"\n    else\n      usage && echo 1>&2 \"error: unknown GIT command: $corecommand\" && exit 1\n    fi\n  fi\n}\n\n# check if workspace name is registered\ncheckWSName () {\n  while read -r workspace; do\n    parseWsName \"$workspace\"\n    if [[ $rwsname == \"$wsname\" ]]; then return; fi\n  done <<< \"$(listall)\"\n  # when here the ws name was not found\n  usage && echo 1>&2 \"error: unknown workspace name: $wsname\" && exit 1\n}\n\n# parse out wsname from workspacespec\nparseWsName () {\n  local wsspec=\"$1\"\n  # Get the workspace value from its specification in the `.gitconfig`.\n  # May be an absolute path or a variable name of the form: `$VARNAME`\n  rwsdir=${wsspec#* }\n  if [[ ${rwsdir:0:1} == '$' ]]; then\n    # Dereference the `rwsdir` value which is a variable name.\n    rwsdir_varname=${rwsdir:1}\n    rwsdir=${!rwsdir_varname}\n    if [[ -z \"${rwsdir}\" ]]; then\n      echo 1>&2 \"error: bad environment variable: $rwsdir_varname\" && exit 1\n    fi\n  fi\n  rwsname=${wsspec#*.} && rwsname=${rwsname%% *}\n}\n\n# detects the wsname of the current directory\nwsnameToCurrent () {\n  while read -r workspace; do\n    if [ -z \"$workspace\" ]; then continue; fi\n    parseWsName \"$workspace\"\n    if echo \"$PWD\" | grep -o -q \"$rwsdir\"; then wsname=\"$rwsname\" && return; fi\n  done <<< \"$(listall)\"\n  # when here then not in workspace dir\n  echo 1>&2 \"error: you are not in a workspace directory. your registered workspaces are:\" && \\\n    wslist=\"$(listall)\" && echo 1>&2 \"${wslist:-'<no workspaces defined yet>'}\" && exit 1\n}\n\n# helper to check number of arguments.\nallowedargcount () {\n\tif [ \"$paramcount\" -ne \"${1:-0}\"  ] && [ \"$paramcount\" -ne \"${2:-0}\" ]; then\n\t\techo 1>&2 \"error: wrong number of arguments\" && usage;\n\t\texit 1;\n\tfi\n}\n\n# execute the bulk operation\nexecutBulkOp () {\n  checkGitCommand\n  if ! $allwsmode && ! $singlemode; then wsnameToCurrent; fi # by default git bulk works within the 'current' workspace\n  listall | while read -r workspacespec; do\n    parseWsName \"$workspacespec\"\n    if [[ -n $wsname ]] && [[ $rwsname != \"$wsname\" ]]; then continue; fi\n    cd \"$rwsdir\" || exit 1\n    local actual=$PWD\n    [ \"${quiet?}\" != \"true\" ] && echo 1>&2 \"Executing bulk operation in workspace ${inverse}$actual${reset}\"\n\n    # build `find` flags depending on command-line options\n    local find_flags=()\n    if [[ \"$no_follow_symlinks\" == true ]]; then\n      find_flags+=(-P)\n    else\n      find_flags+=(-L)\n    fi\n    # find all git repositories under the workspace on which we want to operate\n    readarray allGitFolders < <(find \"${find_flags[@]}\" . -name \".git\" 2>/dev/null)\n\n    for line in \"${allGitFolders[@]}\"; do\n      local gitrepodir=${line::${#line}-5} # cut the .git part of find results to have the root git directory of that repository\n      cd \"$gitrepodir\" || exit 1 # into git repo location\n      local curdir=$PWD\n      local leadingpath=${curdir#\"${actual}\"}\n      # do not execute if we do not want to consider a \".git\" directory under a hidden directory\n      if [ $no_follow_hidden = false ] || ! [[ \"$leadingpath\" =~ \"/.\" ]]; then\n        guardedExecution \"$@\"\n      fi\n      cd \"$rwsdir\" || exit 1 # back to origin location of last find command\n    done\n  done\n}\n\nparamcount=\"${#}\"\n\n# if no arguments show usage\nif [[ $paramcount -le 0 ]]; then usage; fi\n\n# parse command parameters\nwhile [ \"${#}\" -ge 1 ] ; do\n  case \"$1\" in\n\t\t--quiet|-q) quiet='true' ;;\n    --listall|--purge)\n      butilcommand=\"${1:2}\" && break ;;\n    --removeworkspace|--addcurrent|--addworkspace)\n      butilcommand=\"${1:2}\" && wsname=\"$2\" && wsdir=\"$3\" && if [ \"$4\" = \"--from\" ]; then source=\"$5\"; fi && break ;;\n    --no-follow-symlinks)\n      no_follow_symlinks=true ;;\n    --no-follow-hidden)\n      no_follow_hidden=true ;;\n    -a)\n      allwsmode=true ;;\n    -g)\n      guardedmode=true ;;\n    -w)\n      singlemode=true && shift && wsname=\"$1\" && checkWSName ;;\n    --*)\n      usage && echo 1>&2 \"error: unknown argument $1\" && exit 1 ;;\n    -*)\n      usage && echo 1>&2 \"error: unknown argument $1\" && exit 1 ;;\n    *) # git core commands\n      butilcommand=\"executBulkOp\" && corecommand=\"$1\" && gitcommand=\"$*\" && break ;;\n  esac && shift\ndone\n\n# check option compatibility\nif $allwsmode && $singlemode; then echo 1>&2 \"error: options -w and -a are incompatible\" && exit 1; fi\n\n# if single mode check the supplied workspace name\nif $singlemode; then echo 1>&2 \"Selected single workspace mode in workspace: $wsname\" && checkWSName; fi\n\n# check right number of arguments\ncase $butilcommand in\n  listall|purge) allowedargcount 1;;\n  addcurrent|removeworkspace) allowedargcount 2;;\n  addworkspace) allowedargcount 3 5;;\nesac\n\n# pass the origin arguments to the 'executBulkOp'\n$butilcommand \"$@\" # run user command\n"
  },
  {
    "path": "bin/git-changelog",
    "content": "#!/usr/bin/env bash\n\nDEF_TAG_RECENT=\"n.n.n\"\nGIT_LOG_OPTS=\"$(git config changelog.opts)\"\nGIT_LOG_FORMAT=\"$(git config changelog.format)\"\n[[ -z \"$GIT_LOG_FORMAT\" ]] && GIT_LOG_FORMAT='  * %s'\nGIT_MERGELOG_FORMAT=\"$(git config changelog.mergeformat)\"\n[[ -z \"$GIT_MERGELOG_FORMAT\" ]] && GIT_MERGELOG_FORMAT='  * %s%n%w(64,4,4)%b'\nGIT_EDITOR=\"$(git var GIT_EDITOR)\"\nPROGNAME=\"git-changelog\"\n\ngit_editor() {\n  if test -z \"${GIT_EDITOR:+set}\"\n  then\n    GIT_EDITOR=\"$(git var GIT_EDITOR)\" || return $?\n  fi\n\n  eval \"$GIT_EDITOR\" '\"$@\"'\n}\n\n_usage() {\ncat << EOF\nusage: $PROGNAME options [file]\nusage: $PROGNAME -h|help|?\n\nGenerate a Changelog from git(1) tags (annotated or lightweight) and commit\nmessages. Existing Changelog files with filenames that begin with 'Change' or\n'History' will be identified automatically and their content will be appended\nto the new output generated (unless the -p|--prune-old option is used). If no\ntags exist, then all commits are output; if tags exist, then only the most-\nrecent commits are output up to the last identified tag.\n\nOPTIONS:\n  -a, --all                 Retrieve all commits (ignores --start-tag/commit, --final-tag)\n  -l, --list                Display commits as a list, with no titles\n  -t, --tag                 Tag label to use for most-recent (untagged) commits\n  -f, --final-tag           Newest tag to retrieve commits from in a range\n  -s, --start-tag           Oldest tag to retrieve commits from in a range\n      --start-commit        Like --start-tag but use commit instead of tag\n  -n, --no-merges           Suppress commits from merged branches\n  -m, --merges-only         Only uses merge commits (uses both subject and body of commit)\n  -p, --prune-old           Replace existing Changelog entirely with new content\n  -x, --stdout              Write output to stdout instead of to a Changelog file\n  -h, --help, ?             Show this message\nEOF\n}\n\n_error() {\n  [ $# -eq 0 ] && _usage && exit 0\n\n  echo\n  echo \"ERROR: \" \"$@\"\n  echo\n}\n\n# _setValueForKeyFakeAssocArray()\n# /*!\n# @abstract Set value for key from a fake associative array\n# @discussion\n# Iterates over target_ary (an indexed array), searching for target_key, if the\n#   key is found its value is set to new_value otherwise the target_key and\n#   new_value are appended to the array.\n#\n#   The indexed array values must conform to this format:\n#     \"key:value\"\n#   Where key and value are separated by a single colon character.\n#\n#   Specify empty values as an empty, quoted string.\n#\n#   So-called \"fake\" associative arrays are useful for environments where the\n#   installed version of bash(1) precedes 4.0.\n# @param target_key Key to retrieve\n# @param new_value New or updated value\n# @param target_ary Indexed array to scan\n# @return Returns new array with updated key (status 0) or an empty array\n#   (status 1) on failure.\n# */\n_setValueForKeyFakeAssocArray() {\n  # parameter list supports empty arguments!\n  local target_key=\"$1\"; shift\n  local new_value=\"$1\"; shift\n  local target_ary=()\n  local defaultIFS=\"$IFS\"\n  local IFS=\"$defaultIFS\"\n  local found=false\n\n  IFS=$' ' target_ary=( $1 ) IFS=\"$defaultIFS\"\n\n  [[ -z \"${target_key}\" || \"${#target_ary[@]}\" -eq 0 ]] && echo \"${value}\" && return 1\n\n  local _target_ary_length=\"${#target_ary[@]}\"\n  local i\n  for (( i=0; i<\"${_target_ary_length}\"; i++ )); do\n    local __val=\"${target_ary[$i]}\"\n\n    if [[ \"${__val%%:*}\" == \"${target_key}\" ]]; then\n      target_ary[$i]=\"${__val%%:*}:${new_value}\"\n      found=true\n      break\n    fi\n\n    unset __val\n  done\n  unset i _target_ary_length\n\n  # key not found, append\n  [[ \"$found\" == false ]] && target_ary+=( \"${target_key}:${new_value}\" )\n\n  printf \"%s\" \"${target_ary[*]}\"\n}\n\n# _valueForKeyFakeAssocArray()\n# /*!\n# @abstract Fetch value for key from a fake associative array\n# @discussion\n# Iterates over target_ary (an indexed array), searching for target_key, if the\n#   key is found its value is returned.\n#\n#   The indexed array values must conform to this format:\n#     \"key:value\"\n#   Where key and value are separated by a single colon character.\n#\n#   So-called \"fake\" associative arrays are useful for environments where the\n#   installed version of bash(1) precedes 4.0.\n# @param target_key Key to retrieve\n# @param target_ary Indexed array to scan\n# @return Returns string containing value (status 0) or an empty string\n#   (status 1) on failure.\n# */\n_valueForKeyFakeAssocArray() {\n  local target_key=\"$1\"\n  local target_ary=()\n  local defaultIFS=\"$IFS\"\n  local IFS=\"$defaultIFS\"\n  local value=\"\"\n\n  IFS=$' ' target_ary=( $2 ) IFS=\"$defaultIFS\"\n\n  [[ -z \"${target_key}\" || \"${#target_ary[@]}\" -eq 0 ]] && echo \"${value}\" && return 1\n\n  local t\n  for t in \"${target_ary[@]}\"; do\n    if [[ \"${t%%:*}\" == \"${target_key}\" ]]; then\n      value=\"${t#*:}\"\n      break\n    fi\n  done\n  unset t\n\n  echo -e \"${value}\"; return 0\n}\n\n_fetchCommitRange() {\n  local list_all=\"${1:-false}\"\n  local start_tag=\"$2\"\n  local final_tag=\"$3\"\n\n  # This shellcheck disable is applied to the whole if-body\n  # shellcheck disable=SC2086\n  if [[ \"$list_all\" == true ]]; then\n    git log $GIT_LOG_OPTS --pretty=format:\"${CUR_GIT_LOG_FORMAT}\"\n  elif [[ -n \"$final_tag\" && \"$start_tag\" == \"null\" ]]; then\n    git log $GIT_LOG_OPTS --pretty=format:\"${CUR_GIT_LOG_FORMAT}\" \"${final_tag}\"\n  elif [[ -n \"$final_tag\" ]]; then\n    git log $GIT_LOG_OPTS --pretty=format:\"${CUR_GIT_LOG_FORMAT}\" \"${start_tag}\"'..'\"${final_tag}\"\n  elif [[ -n \"$start_tag\" ]]; then\n    git log $GIT_LOG_OPTS --pretty=format:\"${CUR_GIT_LOG_FORMAT}\" \"${start_tag}\"'..'\n  fi | sed 's/^  \\* \\*/  */g'\n}\n\n_formatCommitPlain() {\n  local start_tag=\"$1\"\n  local final_tag=\"$2\"\n\n  printf \"%s\\n\" \"$(_fetchCommitRange \"false\" \"$start_tag\" \"$final_tag\")\"\n}\n\n_formatCommitPretty() {\n  local title_tag=\"$1\"\n  local title_date=\"$2\"\n  local start_tag=\"$3\"\n  local final_tag=\"$4\"\n  local title=\"$title_tag / $title_date\"\n  local title_underline=\"\"\n\n  local i\n  for i in $(seq ${#title}); do\n    title_underline+=\"=\"\n  done\n  unset i\n\n  printf '\\n%s\\n%s\\n' \"$title\" \"$title_underline\"\n  printf \"\\n%s\\n\" \"$(_fetchCommitRange \"false\" \"$start_tag\" \"$final_tag\")\"\n}\n\ncommitList() {\n  # parameter list supports empty arguments!\n  local list_all=\"${1:-false}\"; shift\n  local title_tag=\"$1\"; shift\n  local start_tag=\"$1\"; shift\n  local final_tag=\"$1\"; shift\n  local list_style=\"${1:-false}\"; shift # enable/disable list format\n  local start_commit=\"$1\"; shift\n  local changelog=\"$FILE\"\n  local title_date=\"$(date +'%Y-%m-%d')\"\n  local tags_list=()\n  local tags_list_keys=()\n  local defaultIFS=\"$IFS\"\n  local IFS=\"$defaultIFS\"\n\n  if [[ -n \"$start_commit\" && \"$final_tag\" == \"null\" \\\n      && \"$start_tag\" == \"null\" ]]; then\n    # if there is not tag after $start_commit,\n    # output directly without fetch all tags\n    if [[ \"$list_style\" == true ]]; then\n      _formatCommitPlain \"${start_commit}~\"\n    else\n      _formatCommitPretty \"$title_tag\" \"$title_date\" \"$start_commit~\"\n    fi\n\n    return\n  fi\n\n  #\n  # Tags look like this:\n  #\n  # >git log --tags --simplify-by-decoration --date=\"short\" --pretty=\"format:%h$%x09%ad$%x09%d\"\n  #\n  # ecf1f2b$        2015-03-15$     (HEAD, tag: v1.0.1, origin/master, origin/HEAD, master, hotfix/1.0.2)\n  # a473e9c$        2015-03-04$     (tag: v1.0.0)\n  # f2cb562$        2015-02-19$     (tag: v0.9.2)\n  # 6197c2b$        2015-02-19$     (tag: v0.9.1)\n  # 1e5f5e6$        2015-02-16$     (tag: v0.9.0)\n  # 3de8ab5$        2015-02-11$     (origin/feature/restore-auto)\n  # a15afd1$        2015-02-02$     (origin/feature/versionable)\n  # 38a44e0$        2015-02-02$     (origin/feature/save-auto)\n  # 3244b80$        2015-01-16$     (origin/feature/silent-history, upstream)\n  # 85e45f8$        2014-08-25$\n  #\n  # The most-recent tag will be preceded by \"HEAD, \" if there have been zero\n  # commits since the tag. Also notice that with gitflow, we see features.\n  #\n\n  # fetch our tags\n  local _ref _date _tag _tab='%x09'\n  local _tag_regex='tag: *'\n  while IFS=$'\\t' read -r _ref _date _tag; do\n    [[ -z \"${_tag}\" ]] && continue\n    # strip out tags form ()\n    # git v2.2.0+ supports '%D', like '%d' without the \" (\", \")\" wrapping. One day we should use it instead.\n    _tag=\"${_tag# }\"; _tag=\"${_tag//[()]/}\"\n    # trap tag if it points to last commit (HEAD)\n    _tag=\"${_tag#HEAD*, }\"\n    # strip out branches\n    [[ ! \"${_tag}\" =~ ${_tag_regex} ]] && continue\n    # strip out any additional tags pointing to same commit, remove tag label\n    _tag=\"${_tag%%,*}\"; _tag=\"${_tag#tag: }\"\n    # add tag to assoc array; copy tag to tag_list_keys for ordered iteration\n    tags_list+=( \"${_tag}:${_ref}=>${_date}\" )\n    tags_list_keys+=( \"${_tag}\" )\n  done <<< \"$(git log --tags --simplify-by-decoration --date=\"short\" --pretty=\"format:%h${_tab}%ad${_tab}%d\")\"\n  IFS=\"$defaultIFS\"\n  unset _tag_regex\n  unset _ref _date _tag _tab\n\n  local _tags_list_keys_length=\"${#tags_list_keys[@]}\"\n  if [[ \"${_tags_list_keys_length}\" -eq 0 ]]\n  then\n    unset _tags_list_keys_length\n    if [[ \"$list_style\" == true ]]; then\n      printf \"%s\" \"$(_fetchCommitRange \"true\")\"\n    else\n      local title=\"$title_tag / $title_date\"\n      local title_underline=\"\"\n\n      local i\n      for i in $(seq ${#title}); do\n        title_underline+=\"=\"\n      done\n      unset i\n\n      printf '\\n%s\\n%s\\n' \"$title\" \"$title_underline\"\n      printf \"\\n%s\\n\" \"$(_fetchCommitRange \"true\")\"\n    fi\n    return\n  fi\n\n  local _final_tag_found=false\n  local _start_tag_found=false\n  local i\n  for (( i=0; i<\"${_tags_list_keys_length}\"; i++ )); do\n    local __curr_tag=\"${tags_list_keys[$i]}\"\n    local __prev_tag=\"${tags_list_keys[$i+1]:-null}\"\n    local __curr_date\n    __curr_date=\"$(_valueForKeyFakeAssocArray \"${__curr_tag}\" \"${tags_list[*]}\")\"\n    __curr_date=\"${__curr_date##*=>}\"\n\n    # output latest commits, up until the most-recent tag, these are all\n    # new commits made since the last tagged commit.\n    if [[ $i -eq 0 && ( -z \"$final_tag\" || \"$final_tag\" == \"null\" ) ]]; then\n      if [[ \"$list_style\" == true ]]; then\n        _formatCommitPlain \"${__curr_tag}\" >> \"$tmpfile\"\n      else\n        _formatCommitPretty \"$title_tag\" \"$title_date\" \"${__curr_tag}\"\n      fi\n    fi\n\n    # both final_tag and start_tag are \"null\", user just wanted recent commits\n    [[ \"$final_tag\" == \"null\" && \"$start_tag\" == \"null\" ]] && break;\n\n    # find the specified final tag, continue until found\n    if [[ -n \"$final_tag\" && \"$final_tag\" != \"null\" ]]; then\n      [[ \"$final_tag\" == \"${__curr_tag}\" ]] && _final_tag_found=true\n      [[ \"$final_tag\" != \"${__curr_tag}\" && \"${_final_tag_found}\" == false ]] && continue\n    fi\n\n    # find the specified start tag, break when found\n    if [[ -n \"$start_tag\" ]]; then\n      [[ \"$start_tag\" == \"${__curr_tag}\" ]] && _start_tag_found=true\n      if [[ \"${_start_tag_found}\" == true ]]; then\n        if [[ -n \"$start_commit\" ]]; then\n\n          # output commits after start_commit to its closest tag\n          if [[ \"$list_style\" == true ]]; then\n            _formatCommitPlain \"$start_commit~\" \"${__curr_tag}\"\n          else\n            _formatCommitPretty \"${__curr_tag}\" \"${__curr_date}\" \\\n              \"$start_commit~\" \"${__curr_tag}\"\n          fi\n\n          break\n        fi\n\n        [[ \"$start_tag\" != \"${__curr_tag}\" ]] && break\n\n      fi\n    fi\n\n    # output commits made between prev_tag and curr_tag, these are all of the\n    # commits related to the tag of interest.\n    if [[ \"$list_style\" == true ]]; then\n      _formatCommitPlain \"${__prev_tag}\" \"${__curr_tag}\"\n    else\n      _formatCommitPretty \"${__curr_tag}\" \"${__curr_date}\" \"${__prev_tag}\" \"${__curr_tag}\"\n    fi\n    unset __curr_date\n    unset __prev_tag\n    unset __curr_tag\n  done\n  unset i\n  unset _start_tag_found\n  unset _final_tag_found\n  unset _tags_list_keys_length\n\n  return\n}\n\ncommitListPlain() {\n  local list_all=\"${1:-false}\"\n  local start_tag=\"$2\"\n  local final_tag=\"$3\"\n  local start_commit=\"$4\"\n\n  commitList \"$list_all\" \"\" \"$start_tag\" \"$final_tag\" \"true\" \"$start_commit\"\n}\n\ncommitListPretty() {\n  local list_all=\"${1:-false}\"\n  local title_tag=\"$2\"\n  local start_tag=\"$3\"\n  local final_tag=\"$4\"\n  local start_commit=\"$5\"\n  local title_date=\"$(date +'%Y-%m-%d')\"\n\n  commitList \"$list_all\" \"$title_tag\" \"$start_tag\" \"$final_tag\" \"false\" \\\n    \"$start_commit\"\n}\n\n_exit() {\n  local pid_list=()\n  local defaultIFS=\"$IFS\"\n  local IFS=\"$defaultIFS\"\n\n  stty sane; echo; echo \"caught signal, shutting down\"\n\n  IFS=$'\\n'\n  # The format of `ps` is different between Windows and other platforms,\n  # so we need to calculate the total column number(COL_NUM) of header first.\n  # Why don't we just use the last column?\n  # Because the body of CMD column may contain space and be treated as multiple fields.\n  pid_list=( $(ps -f |\n    awk -v ppid=$$ 'NR == 1 {\n      COL_NUM = NF\n    }\n    $3 == ppid {\n      # filter out temp processes created in this subshell\n      if ($COL_NUM != \"ps\" && $COL_NUM != \"awk\" && $COL_NUM !~ \"bash$\")\n        print $2\n    }')\n  )\n  IFS=\"$defaultIFS\"\n\n  local _pid\n  for _pid in \"${pid_list[@]}\"; do\n    echo \"killing: ${_pid}\"\n    kill -TERM \"${_pid}\"\n  done\n\n  wait; stty sane; exit 1\n}\n\ntrap '_exit' SIGINT SIGQUIT SIGTERM\n\nmain() {\n  local start_tag=\"null\" # empty string and \"null\" mean two different things!\n  local final_tag=\"null\"\n\n  local option=(\n    \"list_all:false\"\n    \"list_style:false\"\n    \"title_tag:$DEF_TAG_RECENT\"\n    \"start_tag:\"\n    \"start_commit:\"\n    \"final_tag:\"\n    \"output_file:\"\n    \"use_stdout:false\"\n    \"prune_old:false\"\n  )\n\n  #\n  # We work chronologically backwards from NOW towards start_tag where NOW also\n  # includes the most-recent (un-tagged) commits. If no start_tag has been\n  # specified, we work back to the very first commit; if a final_tag has been\n  # specified, we begin at the final_tag and work backwards towards start_tag.\n  #\n\n  # An existing ChangeLog/History file will be appended to the output unless the\n  # prune old (-p | --prune-old) option has been enabled.\n\n  while [ \"$1\" != \"\" ]; do\n    case $1 in\n      -a | --all )\n        option=( $(_setValueForKeyFakeAssocArray \"list_all\" true \"${option[*]}\") )\n        ;;\n      -l | --list )\n        option=( $(_setValueForKeyFakeAssocArray \"list_style\" true \"${option[*]}\") )\n        ;;\n      -t | --tag )\n        option=( $(_setValueForKeyFakeAssocArray \"title_tag\" \"$2\" \"${option[*]}\") )\n        shift\n        ;;\n      -f | --final-tag )\n        option=( $(_setValueForKeyFakeAssocArray \"final_tag\" \"$2\" \"${option[*]}\") )\n        shift\n        ;;\n      -s | --start-tag )\n        option=( $(_setValueForKeyFakeAssocArray \"start_tag\" \"$2\" \"${option[*]}\") )\n        shift\n        ;;\n      --start-commit )\n        option=( $(_setValueForKeyFakeAssocArray \"start_commit\" \"$2\" \"${option[*]}\") )\n        shift\n        ;;\n      -n | --no-merges )\n        GIT_LOG_OPTS='--no-merges'\n        CUR_GIT_LOG_FORMAT=\"$GIT_LOG_FORMAT\"\n        ;;\n      -m | --merges-only )\n        GIT_LOG_OPTS='--merges'\n        CUR_GIT_LOG_FORMAT=\"$GIT_MERGELOG_FORMAT\"\n        ;;\n      -p | --prune-old )\n        option=( $(_setValueForKeyFakeAssocArray \"prune_old\" true \"${option[*]}\") )\n        ;;\n      -x | --stdout )\n        option=( $(_setValueForKeyFakeAssocArray \"use_stdout\" true \"${option[*]}\") )\n        ;;\n      -h | ? | help | --help )\n        _usage\n        exit 1\n        ;;\n      * )\n        [[ \"${1:0:1}\" == '-' ]] && _error \"Invalid option: $1\" && _usage && exit 1\n        option=( $(_setValueForKeyFakeAssocArray \"output_file\" \"$1\" \"${option[*]}\") )\n        ;;\n    esac\n    shift\n  done\n\n  # The default log format unless already set\n  [[ -z \"$CUR_GIT_LOG_FORMAT\" ]] && CUR_GIT_LOG_FORMAT=\"$GIT_LOG_FORMAT\"\n\n  local _tag=\"$(_valueForKeyFakeAssocArray \"start_tag\" \"${option[*]}\")\"\n  local start_commit=\"$(_valueForKeyFakeAssocArray \"start_commit\" \"${option[*]}\")\"\n\n  if [[ -n \"$start_commit\" ]]; then\n    if [[ -n \"${_tag}\" ]]; then\n      _error \"--start-tag could not use with --start-commit!\"\n      return 1\n    fi\n\n    start_tag=\"$(git describe --tags --contains \"$start_commit\" 2>/dev/null || echo 'null')\"\n    if [[ -z \"$start_tag\" ]]; then\n      _error \"Could find the associative tag for the start-commit!\"\n      return 1\n    fi\n\n    # remove suffix from the $start_tag when no tag matched exactly\n    start_tag=\"${start_tag%%~*}\"\n    # also remove \"^0\" added sometimes when tag matched exactly\n    start_tag=\"${start_tag%%^0}\"\n\n  elif [[ -n \"${_tag}\" ]]; then\n    start_tag=\"$(git describe --tags --abbrev=0 \"${_tag}\" 2>/dev/null)\"\n    if [[ -z \"$start_tag\" ]]; then\n      _error \"Specified start-tag does not exist!\"\n      return 1\n    fi\n  fi\n\n  if [[ -n \"${_tag}\" ]]; then\n    if [[ -n \"$start_commit\" ]]; then\n      _error \"--start-tag could not use with --start-commit!\"\n      return 1\n    fi\n\n  fi\n  unset _tag\n\n  local _tag=\"$(_valueForKeyFakeAssocArray \"final_tag\" \"${option[*]}\")\"\n  if [[ -n \"${_tag}\" ]]; then\n    final_tag=\"$(git describe --tags --abbrev=0 \"${_tag}\" 2>/dev/null)\"\n    if [[ -z \"$final_tag\" ]]; then\n      _error \"Specified final-tag does not exist!\"\n      return 1\n    fi\n  fi\n  unset _tag\n\n  #\n  # generate changelog\n  #\n  local tmpfile changelog title_tag\n  tmpfile=\"$(git_extra_mktemp)\"\n  changelog=\"$(_valueForKeyFakeAssocArray \"output_file\" \"${option[*]}\")\"\n  title_tag=\"$(_valueForKeyFakeAssocArray \"title_tag\" \"${option[*]}\")\"\n\n  if [[ \"$(_valueForKeyFakeAssocArray \"list_style\" \"${option[*]}\")\" == true ]]; then\n    if [[ \"$(_valueForKeyFakeAssocArray \"list_all\" \"${option[*]}\")\" == true ]]; then\n      commitListPlain \"true\" >> \"$tmpfile\"\n    else\n      commitListPlain \"false\" \"$start_tag\" \"$final_tag\" \\\n        \"$start_commit\" >> \"$tmpfile\"\n    fi\n  else\n    if [[ \"$(_valueForKeyFakeAssocArray \"list_all\" \"${option[*]}\")\" == true ]]; then\n      commitListPretty \"true\" \"$title_tag\" >> \"$tmpfile\"\n    else\n      commitListPretty \"false\" \"$title_tag\" \"$start_tag\" \"$final_tag\" \\\n        \"$start_commit\" >> \"$tmpfile\"\n    fi\n  fi\n\n  if [[ -z \"$changelog\" ]]; then\n    changelog=\"$(find . -mindepth 1 -maxdepth 1 \\( -iname '*change*' -o -iname '*history*' \\) | head -n1)\"\n    if [[ -z \"$changelog\" ]]; then\n      changelog=\"History.md\";\n    fi\n  fi\n\n  # append existing changelog?\n  if [[ -f \"$changelog\" \\\n    && \"$(_valueForKeyFakeAssocArray \"prune_old\" \"${option[*]}\")\" == false ]]; then\n    cat \"$changelog\" >> \"$tmpfile\"\n  fi\n\n  # output file to stdout or move into place\n  if [[ \"$(_valueForKeyFakeAssocArray \"use_stdout\" \"${option[*]}\")\" == true ]]; then\n    cat \"$tmpfile\"\n    rm -f \"$tmpfile\"\n  else\n    cp -f \"$tmpfile\" \"$changelog\"\n    rm -f \"$tmpfile\"\n\n    if [[ -n \"$GIT_EDITOR\" ]]; then\n      git_editor \"$changelog\" || _exit\n    else\n      less \"$changelog\" || _exit\n    fi\n  fi\n\n  return\n}\n\nmain \"$@\"\n\nexit 0\n"
  },
  {
    "path": "bin/git-clear",
    "content": "#!/usr/bin/env bash\nPROGNAME=\"git-clear\"\nFORCE=0\n\n_usage() {\ncat << EOF\nusage: $PROGNAME options\nusage: $PROGNAME -h|help|?\n\nclear git repository\n\nOPTIONS:\n  -f, --force               Force clear without questioning user\n  -h, --help, ?             Show this message\nEOF\n}\n\n# Read arguments\nwhile [ \"$1\" != \"\" ]; do\n    case $1 in\n        -f|--force)\n            FORCE=1\n        ;;\n        -h|--help|?)\n            _usage\n            exit 1\n        ;;\n    esac\n\n    shift\ndone\n\n# Only wait for answer if not forced by user\nif [[ $FORCE == 0 ]]; then\n    echo -n \"Sure? - THIS COMMAND MAY DELETE FILES THAT CANNOT BE RECOVERED, including those in .gitignore [y/N]: \"\n    read -r clean\nelse\n    clean=y\nfi\n\nif [ \"$clean\" = \"y\" ]; then\n    git clean -d -f -x && git reset --hard\nfi\n"
  },
  {
    "path": "bin/git-clear-soft",
    "content": "#!/usr/bin/env bash\n\necho -n \"Sure? - This command may delete files that cannot be recovered. Files and directories in .gitignore will be preserved [y/N]: \"\nread -r answer\nif [ \"$answer\" = \"y\" ]\n    then git clean -d -f && git reset --hard\nfi\n"
  },
  {
    "path": "bin/git-coauthor",
    "content": "#!/usr/bin/env bash\n\nset -e -o pipefail\n\ncoauthor=$1\nemail=$2\n\ntest -z \"$coauthor\" && echo \"co-author required.\" 1>&2 && exit 1\ntest -z \"$email\" && echo \"co-author email required.\" 1>&2 && exit 1\n\nold_message=\"$(git log --format=%B -n1)\"\nif [[ \"$old_message\" == *\"Co-authored-by:\"* ]]; then\n  git commit --amend -m \"$old_message\nCo-authored-by: $coauthor <$email>\"\nelse\n  git commit --amend -m \"$old_message\" -m \"Co-authored-by: $coauthor <$email>\"\nfi\n"
  },
  {
    "path": "bin/git-commits-since",
    "content": "#!/usr/bin/env bash\n\nREF=\"\"\nSINCE=\"\"\n\nwhile [[ $# -gt 0 ]]; do\n    case \"$1\" in\n        -r|--ref)\n            if [[ -z \"$2\" ]]; then\n                echo \"error: option $1 requires an argument\" >&2\n                exit 1\n            fi\n            REF=\"$2\"\n            shift\n            shift\n            ;;\n        *)\n            # non-flag args accumulation, e.g. \"last \" + \"week\" -> \"last week\"\n            SINCE=\"${SINCE:+$SINCE }$1\"\n            shift\n            ;;\n    esac\ndone\n\nif [[ -n \"$REF\" && -n \"$SINCE\" ]]; then\n    echo \"error: '--ref <ref>' and '<date>' are mutually exclusive\" >&2\n    exit 1\nfi\n\nSINCE=\"${SINCE:-last week}\"\n\nif [[ -n \"$REF\" ]]; then\n    git log --pretty='%h %an - %s' \"$REF..HEAD\"\nelse\n    git log --pretty='%h %an - %s' --after=\"@{$SINCE}\"\nfi\n"
  },
  {
    "path": "bin/git-contrib",
    "content": "#!/usr/bin/env bash\n\nuser=\"$*\"\n\ntest -z \"$user\" && echo \"user name required.\" 1>&2 && exit 1\n\ngit shortlog --format=format:\"%h %s\" --author=\"$user\"\n"
  },
  {
    "path": "bin/git-count",
    "content": "#!/usr/bin/env bash\n\nif test \"$1\" = \"--all\"; then\n  git shortlog -n -s | awk '{print substr($0,index($0,$2)) \" (\" $1 \")\"}'\n  echo\nfi\n\necho total \"$(git rev-list --count HEAD)\"\n"
  },
  {
    "path": "bin/git-cp",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nPROGRAM=$0\nCURRENT_FILENAME=\"\"\nDESTINATION_FILENAME=\"\"\n\nfunction usage()\n{\n    echo 1>&2 \"USAGE: ${PROGRAM} CURRENT_FILENAME DESTINATION_FILENAME\"\n}\n\nwhile [[ $# -gt 0 ]]\ndo\n  key=\"$1\"\n\n  if [[ \"$CURRENT_FILENAME\" == \"\" ]]; then\n      CURRENT_FILENAME=$key\n  elif [[ \"$DESTINATION_FILENAME\" == \"\" ]]; then\n      DESTINATION_FILENAME=$key\n  else\n      usage\n      exit 30  # Error during arguments parsing\n  fi\n  shift  # past argument or value\ndone\n\nif [[ \"$DESTINATION_FILENAME\" == \"\" ]]; then\n    usage\n    exit 20  # Missing arguments CURRENT_FILENAME\nelif [[ \"$CURRENT_FILENAME\" == \"\" ]]; then\n    usage\n    exit 10  # Missing arguments CURRENT_FILENAME\nelse\n    if [ -e \"$DESTINATION_FILENAME\"  ]; then\n        echo 1>&2 \"$DESTINATION_FILENAME already exists.\"\n        echo 1>&2 \"Make sure to remove the destination first.\"\n        exit 40\n    fi\n\n    if [[ \"$DESTINATION_FILENAME\" == */ ]]; then\n      echo 1>&2 \"$DESTINATION_FILENAME is not a file path.\"\n      exit 80\n    fi\n    if [[ \"$DESTINATION_FILENAME\" == */* ]]; then\n      DESTINATION_DIR=\"${DESTINATION_FILENAME%/*}\"\n      if ! mkdir -p \"$DESTINATION_DIR\"; then\n        echo 1>&2 \"Failed to create destination directory: $DESTINATION_DIR\"\n        exit 160\n      fi\n    fi\n\n\n    echo \"Copying $CURRENT_FILENAME into $DESTINATION_FILENAME\"\n\n    # Pre-check that the source and destination will work\n    git mv --dry-run \"${CURRENT_FILENAME}\" \"${DESTINATION_FILENAME}\"\n\n    # Make a new branch and switch to it\n    BRANCH_NAME=\"git-cp-$(date +%s)\"\n    git checkout -b \"$BRANCH_NAME\"\n\n    # Move the original file to the new destination, in this branch\n    git mv \"${CURRENT_FILENAME}\" \"${DESTINATION_FILENAME}\"\n    git commit -nm \"--Duplicate $CURRENT_FILENAME history into $DESTINATION_FILENAME\"\n\n    # Restore the original file to keep it in the history\n    git checkout HEAD~ \"${CURRENT_FILENAME}\"\n    git commit -nm \"--Restore $CURRENT_FILENAME\"\n\n    # Switch to the original branch and merge this back in.\n    git checkout -\n    git merge --no-ff \"$BRANCH_NAME\" -m \"Copy $CURRENT_FILENAME into $DESTINATION_FILENAME\"\n\n    # We're now done with the branch, so delete it.\n    # We shouldn't need -D here, as we've already merged it back in.\n    git branch -d \"$BRANCH_NAME\"\nfi\n"
  },
  {
    "path": "bin/git-create-branch",
    "content": "#!/usr/bin/env bash\n\ntest $# -eq 0 && echo \"branch argument required.\" 1>&2 && exit 1\n\n# preference takes lowest priority; look for remote from prefs first\nREMOTE_PREF=$(git config git-extras.create-branch.remote)\nif [ -n \"$REMOTE_PREF\" ]; then\n\tREMOTE=$REMOTE_PREF\nfi\n\nwhile test $# != 0\ndo\n\tcase $1 in\n\t\t-r|--remote)\n\t\t\tif [[ -n $2 ]]\n\t\t\tthen\n\t\t\t\tREMOTE=$2\n\t\t\t\tshift\n\t\t\telse\n\t\t\t\tREMOTE=origin\n\t\t\tfi\n\t\t\t;;\n\t\t--from)\n\t\t\tif [[ -n $2 ]]; then\n\t\t\t\tSTART_POINT=$2\n\t\t\t\tshift\n\t\t\tfi\n\t\t\t;;\n\t\t*)\n\t\t\tBRANCH=$1\n\tesac\n\tshift\ndone\n\n# handle ambiguous `-r` option argument by shift\nif [[ -z $BRANCH ]] && [[ -n $REMOTE ]]\nthen\n\tBRANCH=$REMOTE\n\tREMOTE=origin\nfi\n\ntest -z \"$BRANCH\" && echo \"branch argument required.\" 1>&2 && exit 1\n\nif [[ -n $REMOTE ]]\nthen\n\tstderr=$(git_extra_mktemp)\n\tgit ls-remote --exit-code \"$REMOTE\" 1>/dev/null 2>\"$stderr\"\n\tREMOTE_EXIT=$?\n\tREMOTE_ERROR=$(<\"$stderr\")\n\trm -f \"$stderr\"\n\tif [ $REMOTE_EXIT -eq 0 ]\n\tthen\n\t\tif [[ -n $START_POINT ]]; then\n\t\t\tgit fetch \"$REMOTE\"\n\t\t\tgit checkout --track -b \"$BRANCH\" \"$START_POINT\"\n\t\t\tgit push \"$REMOTE\" \"HEAD:refs/heads/$BRANCH\"\n\t\telse\n\t\t\tgit push \"$REMOTE\" \"HEAD:refs/heads/$BRANCH\"\n\t\t\tgit fetch \"$REMOTE\"\n\t\t\tgit checkout --track -b \"$BRANCH\" \"$REMOTE/$BRANCH\"\n\t\tfi\n\t\texit $?\n\telse\n\t\techo\n\t\techo \"    Error connecting to remote '$REMOTE': $REMOTE_ERROR\"\n\t\techo\n\t\texit $REMOTE_EXIT\n\tfi\nfi\n\nif [[ -n $START_POINT ]]\nthen\n    git checkout -b \"$BRANCH\" \"$START_POINT\"\nelse\n    git checkout -b \"$BRANCH\"\nfi\n"
  },
  {
    "path": "bin/git-delete-branch",
    "content": "#!/usr/bin/env bash\nset -e\n\n# Assert there is at least one branch provided\ntest -z \"$1\" && echo \"branch required.\" 1>&2 && exit 1\n\nfor branch in \"$@\"\ndo\n  remote=$(git config \"branch.$branch.remote\" || echo \"origin\")\n  ref=$(git config \"branch.$branch.merge\" || echo \"refs/heads/$branch\")\n\n  git branch -D \"$branch\" || true\n  # Avoid deleting local upstream\n  [ \"$remote\" = \".\" ] && continue\n  git branch -d -r \"$remote/$branch\" || continue\n  git push \"$remote\" \":$ref\"\ndone\n"
  },
  {
    "path": "bin/git-delete-merged-branches",
    "content": "#!/usr/bin/env bash\n\nbranches=$(git branch --no-color --merged | grep -vE \"^(\\*|\\+)\" | grep -v \"$(git_extra_default_branch)\" | grep -v svn)\nif [ -n \"$branches\" ]\nthen\n    echo \"$branches\" | xargs -n 1 git branch -d\nfi\n"
  },
  {
    "path": "bin/git-delete-squashed-branches",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nproceed=false\nif [[ $# -gt 0 && (\"$1\" == \"--proceed\" || \"$1\" == \"-p\") ]]; then\n    proceed=true\n    shift\nfi\n\nif [[ $# -eq 0 ]]; then\n  targetBranch=$(git rev-parse --abbrev-ref HEAD)\nelse\n  targetBranch=$1\n  git checkout \"$targetBranch\"\nfi\n\ngit for-each-ref refs/heads/ \"--format=%(refname:short)\" | while read -r branch; do\n    mergeBase=$(git merge-base \"$targetBranch\" \"$branch\")\n\n    if [[ $(git cherry \"$targetBranch\" \"$(git commit-tree \"$(git rev-parse \"$branch^{tree}\")\" -p \"$mergeBase\" -m _)\") == \"-\"* ]]; then\n        if [[ $proceed == true ]]; then\n            git branch -D \"$branch\" || true\n        else\n            git branch -D \"$branch\"\n        fi\n    fi\ndone\n"
  },
  {
    "path": "bin/git-delete-submodule",
    "content": "#!/usr/bin/env bash\n\nabort() {\n\terror=\"$1\" && shift\n\techo \"ERROR: $*\" 1>&2\n\ttest -z \"$FORCE\" && exit \"$error\"\n}\n\n# Don't abort on failures.  This allows to cleanup after a previous failure.\n[ \"$1\" = '--force' ] && FORCE=1 && shift\n\ntest -z \"$1\"            && abort 1 'Submodule required'\ncd \"$(git root)\"        || abort 5 'Cannot change to repository root'\ntest ! -f '.gitmodules' && abort 2 '.gitmodules file not found'\n\nNAME=\"${1%/}\"\ntest -z \"$(git config --file='.gitmodules' \"submodule.$NAME.url\")\" \\\n   && abort 3 'Submodule not found'\n\n# 1. Handle the .git directory\n# 1.a. Delete the relevant section from .git/config\ngit submodule deinit -f \"$NAME\" || abort 4 \"Failed to deinitialize $NAME\"\n# 1.b. Delete empty submodule directory\ngit rm -f \"$NAME\"\n\n# 2. Handle .gitmodules file\n# 2.a. Delete the relevant line from .gitmodules\ngit config --file='.gitmodules' --remove-section \"submodule.$NAME\" 2>/dev/null || :\n# 2.b and stage changes\ngit add '.gitmodules'\n# 2.c. Delete empty .gitmodules\n[  \"$(wc -l '.gitmodules' | cut -d' ' -f1)\" = '0' ] && git rm -f '.gitmodules'\n\n# 3. Need to confirm and commit the changes for yourself\ngit_status_text=\"$(git submodule status 2>&1)\"\ngit_status_exit=$?\nif [ \"$git_status_exit\" -eq 0 ] \\\n    && printf '%s' \"DUMMY$git_status_text\" | grep -v \"$NAME\" > /dev/null; then\n    #  grep fails when piping in an empty string, so we add a DUMMY prefix\n\n\techo \"Successfully deleted $NAME.\"\nelse\n\tabort 6 \"Failed to delete $NAME with error:\\n$git_status_text\"\nfi\nprintf '\\n%s\\n' '== git submodule status =='\nprintf '%s\\n'   \"$git_status_text\"\nprintf '%s\\n'   '=========================='\n# shellcheck disable=SC2016\necho 'Confirm the output of `git submodule status` above (if any)' \\\n\t'and then commit the changes.'\n"
  },
  {
    "path": "bin/git-delete-tag",
    "content": "#!/usr/bin/env bash\n\n# Assert there is at least one tag provided\ntest -z \"$1\" && echo \"tag required.\" 1>&2 && exit 1\n\n# Detect the default remote exists or not\ndefault_remote=$(git config git-extras.default-remote)\n\nif [[ -n \"$default_remote\" ]]; then\n    origin=\"$default_remote\"\nelse\n    origin=origin\nfi\n\n# Concatenate all the tag references\nlocal_tags=\"\"\norigin_refs=\"\"\nfor tagname in \"$@\"\ndo\n  local_tags=$local_tags\" $tagname\"\n  origin_refs=$origin_refs\" :refs/tags/$tagname\"\ndone\n\n# Delete all the tags\n# shellcheck disable=SC2086\ngit tag -d $local_tags\n# shellcheck disable=SC2086\ngit push \"$origin\" $origin_refs\n"
  },
  {
    "path": "bin/git-delta",
    "content": "#!/usr/bin/env bash\n\nbranch=$(git_extra_default_branch)\nfilter=ACM\n\nif test $# -eq 1; then\n  branch=$1\nelse\n  if test $# -eq 2; then\n    branch=$1\n    filter=$2\n  fi\nfi\n\ngit diff --name-only --diff-filter=\"$filter\" \"$branch\""
  },
  {
    "path": "bin/git-effort",
    "content": "#!/usr/bin/env bash\n\ntmp=$(git_extra_mktemp)\nabove=0\n# if the output won't be printed to tty, disable the color\ntest -t 1 && to_tty=true\ncolor=\n\n#\n# print usage message\n#\nusage() {\n  echo 1>&2 \"usage: git effort [--above <value>] [<path>...] [-- [<log options>...]]\"\n}\n\n#\n# get dates for the given <commit>\n#\ndates() {\n  eval \"git log $args_to_git_log --pretty='format: %ad' --date=short -- \\\"$1\\\"\"\n}\n\n# tput, being quiet about unknown capabilities\ntputq() {\n  tput \"$@\" 2>/dev/null\n  return 0\n}\n\n#\n# hide cursor\n#\n\nhide_cursor() {\n  tputq civis\n}\n\n#\n# show cursor, and remove temporary file\n#\n\nshow_cursor_and_cleanup() {\n  tputq cnorm\n  tputq sgr0\n  rm \"$tmp\" > /dev/null 2>&1\n  exit 0\n}\n\n#\n# get active days for the given <commit>\n#\n\nactive_days() {\n  echo \"$1\" | sort -r | uniq | wc -l\n}\n\n#\n# set 'color' based on the given <num>\n#\n\ncolor_for() {\n  if [ \"$to_tty\" = true ]; then\n    if   [ \"$1\" -gt 200 ]; then color=\"$(tputq setaf 1)$(tputq bold)\"\n    elif [ \"$1\" -gt 150 ]; then color=\"$(tputq setaf 1)\"  # red\n    elif [ \"$1\" -gt 125 ]; then color=\"$(tputq setaf 2)$(tputq bold)\"\n    elif [ \"$1\" -gt 100 ]; then color=\"$(tputq setaf 2)\"  # green\n    elif [ \"$1\" -gt 75 ]; then color=\"$(tputq setaf 5)$(tputq bold)\"\n    elif [ \"$1\" -gt 50 ]; then color=\"$(tputq setaf 5)\"  # purplish\n    elif [ \"$1\" -gt 25 ]; then color=\"$(tputq setaf 3)$(tputq bold)\"\n    elif [ \"$1\" -gt 10 ]; then color=\"$(tputq setaf 3)\"  # yellow\n    else color=\"$(tputq sgr0)\" # default color\n    fi\n  else\n    color=\"\"\n  fi\n}\n\n#\n# compute the effort of the given <path ...>\n#\n\neffort() {\n    path=$1\n    local commit_dates\n    local color reset_color commits len dot f_dot i msg active\n    reset_color=\"\"\n    test \"$to_tty\" = true && reset_color=\"$(tputq sgr0)\"\n    if ! commit_dates=$(dates \"$path\"); then\n      exit 255\n    fi\n\n    # Ensure it's not just an empty line\n    if [ -z \"$(head -c 1 <<<\"$commit_dates\")\" ]\n    then\n      exit 0\n    fi\n\n    commits=$(wc -l <<<\"$commit_dates\")\n    color='90'\n\n    # ignore <= --above\n    test \"$commits\" -le \"$above\" && exit 0\n\n    # commits\n    color_for $(( commits - above ))\n    len=${#path}\n    dot=\".\"\n    f_dot=\"$path\"\n    i=0 ; while test $i -lt $(( columns - len )) ; do\n      f_dot=$f_dot$dot\n      i=$((i+1))\n    done\n\n    msg=$(printf \"  ${color}%s %-10d\" \"$f_dot\" \"$commits\")\n\n    # active days\n    active=$(active_days \"$commit_dates\")\n    color_for $(( active - above ))\n    msg=\"$msg $(printf \"${color} %d${reset_color}\\n\" \"$active\")\"\n    echo \"$msg\"\n}\n\n#\n# print heading\n#\n\nheading() {\n  echo\n  printf \"  %-${columns}s %-10s %s\\n\" 'path' 'commits' 'active days'\n  echo\n}\n\n#\n# output sorted results\n#\n\nsort_effort() {\n  clear\n  echo \" \"\n  heading\n  < \"$tmp\" sort -rn -k 2\n}\n\n#\n# get processor count, default 8\n#\nprocs() {\n  if ! (nproc --all || getconf NPROCESSORS_ONLN || getconf _NPROCESSORS_ONLN || grep -c processor /proc/cpuinfo) 2>/dev/null; then\n      echo 8\n  fi\n}\n\ndeclare -a paths=()\nwhile [ \"${#}\" -ge 1 ] ; do\n\n  case \"$1\" in\n    --above)\n      shift\n      above=$1\n      ;;\n    --)\n      shift\n      args_to_git_log=$(printf \" %q\" \"${@:1}\")\n      break\n      ;;\n    --*)\n      usage\n      echo 1>&2 \"error: unknown argument $1\"\n      echo 1>&2 \"error: if that argument was meant for git-log,\"\n      echo 1>&2 \"error: please put it after two dashes ( -- ).\"\n      exit 1\n      ;;\n    *)\n      paths+=( \"$1\" )\n      ;;\n  esac\n\n  shift\ndone\n\n# Exit if above-value is not an int\nif [ -z \"${above##*[!0-9]*}\" ] ; then\n  echo \"error: argument to --above was not an integer\" 1>&2\n  exit 1\nfi\n\n# remove empty quotes that appear when there are no arguments\nargs_to_git_log=\"${args_to_git_log#\\ \\'\\'}\"\nexport args_to_git_log\n\n# [path ...]\n\nif test \"${#paths}\" -eq 0; then\n  save_ifs=$IFS\n  IFS=$(echo -en \"\\n\\b\")\n  paths=($(git ls-files))\n  IFS=$save_ifs\n  unset save_ifs\nfi\n\n# set column width to match longest filename\nmax=0\nfor path in \"${paths[@]}\"; do\n    cur=${#path}\n    if [[ $max -lt $cur ]]; then\n        max=$cur\n    fi\ndone\ncolumns=$(( max + 5 ))\nexport columns\n\n# hide cursor\n\nhide_cursor\ntrap show_cursor_and_cleanup INT\n\nheading\n\n# send paths to effort\nnPaths=${#paths[@]}\nnProcs=$(procs)\nnJobs=\"\\j\"\nfor ((i=0; i<nPaths; ++i))\ndo\n    while (( ${nJobs@P} >= nProcs )); do\n        wait -n\n    done\n    effort \"${paths[i]}\" &\ndone|tee \"$tmp\"\n\n# if more than one path, sort and print\ntest \"$(wc -l \"$tmp\" | awk '{print $1}')\" -gt 1 && sort_effort\necho\n\nshow_cursor_and_cleanup\n"
  },
  {
    "path": "bin/git-extras",
    "content": "#!/usr/bin/env bash\n\nVERSION=\"7.5.0-dev\"\nINSTALL_SCRIPT=\"https://raw.githubusercontent.com/tj/git-extras/main/install.sh\"\n\nupdate() {\n  local bin=\"$(command -v git-extras)\"\n  local prefix=${bin%/*/*}\n  local orig=$PWD\n\n  curl -s $INSTALL_SCRIPT | PREFIX=\"$prefix\" bash /dev/stdin \\\n    && cd \"$orig\" \\\n    && echo \"... updated git-extras $VERSION -> $(git extras --version)\"\n}\n\nupdateForWindows() {\n  local bin=\"$(command -v git-extras)\"\n  local prefix=${bin%/*/*}\n  local orig=$PWD\n\n  # we need to clean up /tmp manually on windows\n  cd /tmp \\\n    && rm -rf ./git-extras \\\n    && echo \"Setting up 'git-extras'....\" \\\n    && git clone https://github.com/tj/git-extras.git &> /dev/null \\\n    && cd git-extras \\\n\t&& git checkout \\\n        $(git describe --tags $(git rev-list --tags --max-count=1)) \\\n        &> /dev/null \\\n\t&& ./install.cmd \"$prefix\" \\\n\t&& cd \"$orig\" \\\n\t&& echo \"... updated git-extras $VERSION -> $(git extras --version)\"\n  rm -rf /tmp/git-extras &> /dev/null\n}\n\ncase \"$1\" in\n  -v|--version)\n    echo $VERSION && exit 0\n    ;;\n  update)\n    platform=$(uname -s)\n    if [ \"${platform::9}\" = \"CYGWIN_NT\" ] || \\\n      [ \"${platform::5}\" = \"MINGW\" ] || \\\n      [ \"${platform::7}\" = \"MSYS_NT\" ]\n    then\n      updateForWindows\n    else\n      update\n    fi\n    ;;\n  *)\n    git extras --help\n    ;;\nesac\n"
  },
  {
    "path": "bin/git-feature",
    "content": "#!/usr/bin/env bash\n\nbranch_prefix=$(git config --get git-extras.feature.prefix)\n\nif [ -z \"$branch_prefix\" ]; then\n   branch_prefix=\"feature\"\nfi\n\nbranch_separator=$(git config --get git-extras.feature.separator)\n\nif [ -z \"$branch_separator\" ]; then\n   branch_separator=\"/\"\nfi\n\nmerge_mode=\"--no-ff\"\nfinish=false\ndeclare -a argv\nwhile test $# != 0\ndo\n  case $1 in\n  -a|--alias )\n    if [[ -n $2 ]] && [[ $2 != -- ]]\n    then\n      shift # shift -a|-alias\n      branch_prefix=$1\n    else\n      echo >&2 \"option $1 requires a value\"\n      exit 1\n    fi\n    ;;\n  -r|--remote )\n    if [[ -n $2 ]] && [[ $2 != -- ]]\n    then\n      remote=$2\n      shift\n    else\n      remote=\"origin\"\n    fi\n    ;;\n  -s|--separator )\n    if [[ -n $2 ]] && [[ $2 != -- ]]\n    then\n      branch_separator=$2\n      shift\n    else\n      echo >&2 \"option $1 requires a value\"\n      exit 1\n    fi\n    ;;\n  --squash )\n    merge_mode=\"--squash\"\n    ;;\n  --from )\n    start_point=$2\n    shift\n    ;;\n  -- )\n    # terminate argument parsing\n    shift\n    argv+=(\"$@\")\n    break\n    ;;\n  finish )\n    finish=true\n    ;;\n  * )\n    argv+=(\"$1\")\n    ;;\n  esac\n  shift\ndone\n\nconcatargs() {\n  str=$(IFS='-'; echo \"$*\")\n  branch=\"$branch_prefix$branch_separator$str\"\n}\n\ntest -z \"${argv[0]}\" && echo \"$branch_prefix\" \"<name> required.\" 1>&2 && exit 1\n\nconcatargs \"${argv[@]}\"\n\nif \"${finish}\"\nthen\n  git merge ${merge_mode} \"$branch\" && git delete-branch \"$branch\"\nelse\n  if [[ -n $remote ]] && [[ -z $start_point ]]\n  then\n    git create-branch -r \"$remote\" \"$branch\"\n  fi\n\n  if [[ -z $remote ]] && [[ -z $start_point ]]\n  then\n    git create-branch \"$branch\"\n  fi\n\n  if [[ -n $remote ]] && [[ -n $start_point ]]\n  then\n    git create-branch -r \"$remote\" --from \"$start_point\" \"$branch\"\n  fi\n\n  if [[ -z $remote ]] && [[ -n $start_point ]]\n  then\n    git create-branch --from \"$start_point\" \"$branch\"\n  fi\nfi\n"
  },
  {
    "path": "bin/git-force-clone",
    "content": "#! /usr/bin/env bash\n\nset -euo pipefail\n\n_usage() {\n  echo \"\nUsage:\n  git-force-clone -b branch remote_url destination_path\n\nExample:\n  git-force-clone -b master git@github.com:me/repo.git ./repo_dir\n\nProvides the basic functionality of 'git clone', but if the destination git\nrepository already exists it will force-reset it to resemble a clone of the\nremote.\n\nBecause it doesn't actually delete the directory, it is usually significantly\nfaster than the alternative of deleting the directory and cloning the\nrepository from scratch.\n\n**CAUTION**: If the repository exists, this will destroy *all* local work:\nchanged files will be reset, local branches and other remotes will be removed.\n\nOPTIONS:\n  -b, --branch    The branch to pull from the remote\n  -h, --help      Display this help message\n\"\n}\n\n_check() {\n  if [ -z \"$1\" ]; then\n    echo \"Error: Missing ${2}\"\n    _usage\n    exit 1\n  fi\n}\n\nmain() {\n  while [[ -n \"${1:-}\" ]] && [[ \"${1:0:1}\" == \"-\" ]]; do\n    case $1 in\n      -b | --branch )\n        branch=${2:-}\n        shift\n        ;;\n      -h | --help )\n        _usage\n        exit 0\n        ;;\n      * )\n        echo \"Error: Invalid option: $1\"  >>/dev/stderr\n        _usage\n        exit 1\n        ;;\n    esac\n    shift\n  done\n\n  remote_url=${1:-}\n  destination_path=${2:-}\n\n  _check \"${remote_url}\" \"remote_url\"\n  _check \"${destination_path}\" \"destination_path\"\n\n  if [ -d \"${destination_path}/.git\" ]; then\n    (\n      cd \"${destination_path}\"\n\n      # Delete all remotes\n      for remote in $(git remote); do\n        git remote rm \"${remote}\"\n      done\n\n      # Add origin\n      git remote add origin \"${remote_url}\"\n      git fetch origin\n\n      # Set default branch\n      if [ -z \"${branch:-}\" ]; then\n        branch=$(LC_ALL=C git remote show origin | grep -oP '(?<=HEAD branch: )[^ ]+$')\n        git remote set-head origin \"${branch}\"\n      else\n        git remote set-head origin -a\n      fi\n\n      # Make sure current branch is clean\n      git clean -fd\n      git reset --hard HEAD\n\n      # Get on the desired branch\n      git checkout \"${branch}\"\n      git reset --hard \"origin/${branch}\"\n\n      # Delete all other branches\n      # shellcheck disable=SC2063\n      branches=$(git branch | grep -v '*' | xargs)\n      if [ -n \"${branches}\" ]; then\n        git branch -D \"${branches}\"\n      fi\n    )\n  elif [ -n \"${branch:-}\" ]; then\n    git clone -b \"${branch}\" \"${remote_url}\" \"${destination_path}\"\n  else\n    git clone \"${remote_url}\" \"${destination_path}\"\n  fi\n}\n\nmain \"$@\"\n\nexit 0\n"
  },
  {
    "path": "bin/git-fork",
    "content": "#!/usr/bin/env bash\n\nabort() {\n  echo \"$@\"\n  exit 1\n}\n\nurl=\"$1\"\ntest -z \"$url\" && url=$(git remote get-url origin 2> /dev/null) && origin=true\n# validate repo url\ntest -z \"$url\" && abort \"github repo needs to be specified as an argument\"\n\n# validate user\necho \"Enter your github username\"\nread -r user\n[ -n \"$user\" ] || abort \"git username required\"\n# personal access token\n# config name is github-personal-access-token '_' is not allowed in git config\n\ngithub_personal_access_token=$(git config --default \"$GITHUB_TOKEN\" git-extras.github-personal-access-token)\n\ntest -z \"$github_personal_access_token\" && abort \"GITHUB_TOKEN, or git config git-extras.github-personal-access-token required\"\n\n# extract owner + project from repo url\nproject=${url##*/}\nowner=${url%/\"$project\"}\nproject=${project%.git}\nif [[ $owner == git@* ]]; then\n  owner=${owner##*:}\nelse\n  owner=${owner##*/}\nfi\n\n# validate\n[[ -z \"$project\" || -z \"$owner\" ]] && abort \"github repo needs to be specified as an argument\"\n\n# create fork\nif ! curl -qsf \\\n  -X POST \\\n  -u \"$user:$github_personal_access_token\" \\\n  -H \"X-GitHub-OTP: $MFA_CODE\" \\\n  \"https://api.github.com/repos/$owner/$project/forks\"\nthen\n  abort \"fork failed\"\nfi\n\necho \"Add GitHub remote branch via SSH (you will be prompted to verify the server's credentials)? (y/n)\"\nread -r use_ssh\n# Check if user has ssh configured with GitHub\nif [ -n \"$use_ssh\" ] && ssh -T git@github.com 2>&1 | grep -qi 'success'; then\n  remote_prefix=\"git@github.com:\"\nelse\n  remote_prefix=\"https://github.com/\"\nfi\n\nif [ \"$origin\" = true ]; then\n    git remote rename origin upstream\n    git remote add origin \"${remote_prefix}${user}/${project}.git\"\n    git fetch origin\nelse\n    # clone forked repo into current dir\n    git clone \"${remote_prefix}${user}/${project}.git\" \"$project\"\n    # add reference to origin fork so can merge in upstream changes\n    cd \"$project\" || exit\n    git remote add upstream \"${remote_prefix}${owner}/${project}.git\"\n    git fetch upstream\nfi\n"
  },
  {
    "path": "bin/git-fresh-branch",
    "content": "#!/usr/bin/env bash\n\nbranch=$1\n\ntest -z \"$branch\" && echo \"branch required.\" 1>&2 && exit 1\n\nchanges=$(git status --porcelain)\n\nclean()\n{\n    git symbolic-ref HEAD \"refs/heads/$branch\"\n    rm .git/index\n    git clean -fdx\n}\n\nif [ -n \"$changes\" ]; then\n    read -rp \"All untracked changes will be lost. Continue [y/N]? \" res\n    case $res in\n        [Yy]* ) ;;\n        * ) exit 0;;\n    esac\nfi\n\nclean\n"
  },
  {
    "path": "bin/git-get",
    "content": "#!/usr/bin/env bash\n\n_usage() {\n    printf '%s\\n' \"usage: ${0##*/} <url>\nusage: ${0##*/} --help\n\nClone a repository in a particular directory.\"\n}\n\nif (( $# == 0 )); then\n    _usage\n    exit 0\nfi\n\nfor arg; do\n    if [ \"$arg\" = '-h' ] || [ \"$arg\" = '--help' ]; then\n        _usage\n        exit 0\n    fi\ndone\n\nurl=$1\nif ! shift; then\n    printf 'ERROR: Failed to shift' >&2\n    exit 1\nfi\n\nclone_path=$(git config --get git-extras.get.clone-path)\n\nif [ -z \"$clone_path\" ]; then\n    printf 'ERROR: %s\\n' \"Git configuration key 'git-extras.get.clone-path' must be set to a directory to clone under\" >&2\n    exit 1\nfi\n\ndirname=${url%/}\ndirname=${dirname%.git}\ndirname=${dirname##*/}\n\nmkdir -p \"$clone_path\"\ngit clone \"$url\" \"$clone_path/$dirname\" \"$@\"\n"
  },
  {
    "path": "bin/git-gh-pages",
    "content": "#!/usr/bin/env bash\n\necho 'setting up gh-pages'\necho '-------------------'\n \necho 'Tell me your github account username: '\nread -r username\n \necho 'Now, tell me your repository name: '\nread -r repository\n \ngit stash \\\n&& git checkout -b 'gh-pages' \\\n&& echo 'My Page' > index.html \\\n&& git add . \\\n&& git commit -a -m 'Initial commit' \\\n&& git remote add origin https://github.com/\"$username\"/\"$repository\".git \\\n&& git push -u origin gh-pages \\\n&& echo 'Complete' \\\n&& echo '-------------------' \\\n&& echo 'You can find your last changes in the stash!'\n"
  },
  {
    "path": "bin/git-graft",
    "content": "#!/usr/bin/env bash\n\nsrc=$1\ndst=$2\n\ntest -z \"$src\" && echo \"source branch required.\" 1>&2 && exit 1\ntest -z \"$dst\" && echo \"destination branch required.\" 1>&2 && exit 1\n\ngit checkout \"$dst\" \\\n  && git merge --no-ff \"$src\" \\\n  && git branch -d \"$src\"\n"
  },
  {
    "path": "bin/git-guilt",
    "content": "#!/usr/bin/env bash\n\nfor param in \"$@\"\ndo\n    case $param in\n        -h)\n            echo 'Usage: git-guilt [<options>] <since> <until>'\n            echo 'Calculates the change in blame between two revisions'\n            echo 'Example: git guilt HEAD~3 HEAD'\n            echo\n            echo 'Options:'\n            echo\n            echo '  -h, --help               output usage information'\n            echo '  -e, --email              display author emails instead of names'\n            echo '  -w, --ignore-whitespace  ignore whitespace only changes when attributing blame'\n            echo '  -d, --debug              output debug information'\n            exit 0\n            ;;\n        -e|--email )\n            EMAIL='-e'\n            shift\n            ;;\n        -w|--ignore-whitespace )\n            NOT_WHITESPACE='-w'\n            shift\n            ;;\n        -d|--debug )\n            DEBUG=$(git_extra_mktemp)\n            shift\n            ;;\n    esac\ndone\n\ncd \"$(git-root)\" || exit # cd for git blame\nMERGED_LOG=$(git_extra_mktemp)\nif [[ $EMAIL == '-e' ]]\nthen\n    PATTERN='s/^author-mail <\\(.*\\)>/\\1/p'\nelse\n    PATTERN='s/^author //p'\nfi\n\nfor file in $(git diff --name-only \"$@\")\ndo\n    test -n \"$DEBUG\" && echo \"git blame $file\"\n    # $1 - since $2 - until\n    # shellcheck disable=SC2086\n    git blame $NOT_WHITESPACE --line-porcelain \"$1\" -- \"$file\" 2> /dev/null |\n        LC_ALL=C sed -n \"$PATTERN\" | sort | uniq -c | LC_ALL=C sed 's/^\\(.\\)/- \\1/' >> \"$MERGED_LOG\"\n    # if $2 not given, use current commit as \"until\"\n    # shellcheck disable=SC2086\n    git blame $NOT_WHITESPACE --line-porcelain \"${2-@}\" -- \"$file\" 2> /dev/null |\n        LC_ALL=C sed -n \"$PATTERN\" | sort | uniq -c | LC_ALL=C sed 's/^\\(.\\)/+ \\1/' >> \"$MERGED_LOG\"\ndone\n\nDEBUG=\"$DEBUG\" awk '\nNR==1 {\n    # the index of $2 does not change in each line\n    name_start_at = index($0, $3)\n}\n/^\\+/ {\n    contributors[substr($0, name_start_at)] += $2\n}\n/^-/ {\n    contributors[substr($0, name_start_at)] -= $2\n}\nEND {\n    for (people in contributors) {\n        if (ENVIRON[\"DEBUG\"]) {\n           printf(\"%d %s\\n\", contributors[people], people) >> ENVIRON[\"DEBUG\"]\n        }\n        if (contributors[people] != 0) {\n            printf(\"%d %s\\n\", contributors[people], people)\n        }\n    }\n}' \"$MERGED_LOG\" | sort -nr | # only gawk supports built-in sort function\nwhile read -r line\ndo\n    people=${line#* }\n    num=${line%% *}\n\n    if [[ $num -gt 0 ]]\n    then\n        printf \"%-29s \\033[00;32m\" \"$people\"\n        if [[ $num -ge 50 ]]\n        then\n            len=${#num}\n            for (( i = 0; i < 48 - len; i++ ))\n            do\n                printf \"+\"\n            done\n            printf \"(%s)\" \"$num\"\n        else\n            for (( i = 0; i < num; i++ ))\n            do\n                printf \"+\"\n            done\n        fi\n    else\n        printf \"%-29s \\033[00;31m\" \"$people\"\n        if [[ $num -le -50 ]]\n        then\n            len=${#num}\n            for (( i = 0; i < 48 - len; i++ ))\n            do\n                printf \"-\"\n            done\n            printf \"(%s)\" \"$num\"\n        else\n            for (( i = 0; i > num; i-- ))\n            do\n                printf \"-\"\n            done\n        fi\n    fi\n    printf \"\\033[00m\\n\"\ndone\n\ntest -n \"$DEBUG\" && sort -nr \"$DEBUG\"\n"
  },
  {
    "path": "bin/git-ignore",
    "content": "#!/usr/bin/env bash\n\nGIT_DIR=$(git rev-parse --git-dir 2>/dev/null)\n\nshow_contents() {\n  local file=\"${2/#~/$HOME}\"\n  if [ -f \"$file\" ]; then\n    echo \"$1 gitignore: $2\" && cat \"$file\"\n  else\n    echo \"There is no $1 .gitignore yet\"\n  fi\n}\n\ncd_to_git_root() {\n  local error_level=\"$1\"\n\n  if ! git rev-parse --git-dir &>/dev/null; then\n    if [ \"$error_level\" = '--warn' ]; then\n      echo \"Warning: Not currently in a Git repository\" >&2\n    elif [ \"$error_level\" = '--error' ]; then\n      echo \"Error: Not currently in a Git repository\" >&2\n      exit 1\n    fi\n  fi\n\n  local result=\n  if result=$(git rev-parse --show-toplevel 2>/dev/null); then\n    cd \"$result\" || exit\n  fi\n}\n\nglobal_ignore() {\n  if ! git config --global core.excludesFile 2>/dev/null; then\n    if [ -f \"$HOME/.gitignore\" ]; then\n      echo \"$HOME/.gitignore\"\n    else\n      echo \"${XDG_CONFIG_HOME:-$HOME/.config}/git/ignore\"\n    fi\n  fi\n}\n\nshow_global() {\n  show_contents Global \"$(global_ignore)\"\n}\n\nadd_global() {\n  local global_gitignore\n  global_gitignore=\"$(global_ignore)\"\n  if [ -z \"$global_gitignore\" ]; then\n    echo \"Can't find global .gitignore.\"\n    echo \"\"\n    echo \"Use 'git config --global --add core.excludesfile ~/.gitignore-global' to set the path to your global gitignore file to '~/.gitignore-global'.\"\n    echo \"\"\n  else\n    add_patterns \"$global_gitignore\" \"$@\"\n  fi\n}\n\nshow_local() {\n  cd_to_git_root --warn\n  show_contents Local .gitignore\n}\n\nadd_local() {\n  cd_to_git_root --warn\n  add_patterns .gitignore \"$@\"\n}\n\nshow_private() {\n  cd_to_git_root --error\n  show_contents Private \"${GIT_DIR}/info/exclude\"\n}\n\nadd_private() {\n  cd_to_git_root --error\n  test -d \"${GIT_DIR}/info\" || mkdir -p \"${GIT_DIR}/info\"\n  add_patterns \"${GIT_DIR}/info/exclude\" \"$@\"\n}\n\nadd_patterns() {\n  echo \"Adding pattern(s) to: $1\"\n  local file=\"${1/#~/$HOME}\"\n  dir_name=$(dirname \"$file\")\n  if [ ! -d \"$dir_name\" ]; then\n      mkdir -p \"$dir_name\"\n  fi\n  if [ -s \"$file\" ]; then\n      # If the content of $file doesn't end with a newline, add one\n      test \"$(tail -c 1 \"$file\")\" != \"\" && echo \"\" >> \"$file\"\n  fi\n  for pattern in \"${@:2}\"; do\n    echo \"... adding '$pattern'\"\n    (test -f \"$file\" && test \"$pattern\" && grep -q -F -x -- \"$pattern\" \"$file\") || echo \"$pattern\" >> \"$file\"\n  done\n}\n\nif test $# -eq 0; then\n   show_global\n   echo \"---------------------------------\"\n   show_local\n   echo \"---------------------------------\"\n   show_private\nelse\n  case \"$1\" in\n    -l|--local)\n      test $# -gt 1 && add_local \"${@:2}\" && echo\n      show_local\n      ;;\n    -g|--global)\n      test $# -gt 1 && add_global \"${@:2}\" && echo\n      show_global\n      ;;\n    -p|--private)\n      test $# -gt 1 && add_private \"${@:2}\" && echo\n      show_private\n      ;;\n    *)\n      add_local \"$@\"\n      ;;\n  esac\nfi\n\n"
  },
  {
    "path": "bin/git-ignore-io",
    "content": "#!/usr/bin/env bash\n\ngitignore_io_url=\"https://www.toptal.com/developers/gitignore/api/\"\ndefault_path=\"$HOME/.gi_list\"\nif [[ -n \"$XDG_CACHE_HOME\" ]]; then\n  default_path=\"$XDG_CACHE_HOME/git-extras/gi_list\"\n  mkdir -p \"$XDG_CACHE_HOME/git-extras\"\nfi\n\nupdate_gi_list() {\n    curl -L -s  \"${gitignore_io_url}/list\" > \"$default_path\"\n}\n\nprint_in_alphabetical_order() {\n    local first_character previous_first_character ignorable\n    local first=true\n    for ignorable in $(echo \"$gi_list\" | sort);\n    do\n        first_character=${ignorable:0:1}\n        if [[ $first_character = \"$previous_first_character\" ]]; then\n            printf \" %s\" \"$ignorable\"\n        elif [[ $first = true ]]; then\n            previous_first_character=$first_character\n            first=false\n            printf \"%s\" \"$ignorable\"\n        else\n            previous_first_character=$first_character\n            printf \"\\n%s\" \"$ignorable\"\n        fi\n    done\n    echo\n}\n\nprint_in_table_format() {\n    echo \"$gi_list\" | column\n}\n\nsearch() {\n    for type in $gi_list;\n    do\n        if [[ \"$type\" == *$1* ]]\n        then\n            echo \"$type\"\n        fi\n    done\n}\n\nprint_last_modified_time() {\n    if ! gi_list_date=$(stat -c \"%y\" \"$default_path\" 2> /dev/null); then\n        if ! gi_list_date=$(stat -f \"%t%Sm\" \"$default_path\" 2> /dev/null); then\n            if ! gi_list_date=$(date -r \"$default_path\" +%s 2> /dev/null); then\n                gi_list_date=0\n            fi\n        fi\n    fi\n    echo \"Last update time: $gi_list_date\"\n}\n\ngi() {\n    curl -L -s $gitignore_io_url/\"$1\"\n}\n\ngi_replace() {\n    gi \"$1\" > .gitignore\n}\n\ngi_append() {\n    gi \"$1\" >> .gitignore\n}\n\nshow_usage() {\n    echo \"Usage:\"\n    echo \"  git ignore-io <types>...                    Show gitignore template\"\n    echo \"                [-a|--append] <types>...      Append new .gitignore content to .gitignore under the current directory\"\n    echo \"                [-r|--replace] <types>...      Export new .gitignore to the current directory (The old one will be replaced)\"\n    echo \"                [-l|--list-in-table]          Print available types in table format\"\n    echo \"                [-L|--list-alphabetically]    Print available types in alphabetical order    \"\n    echo \"                [-s|--search] <word>          Search word in available types\"\n    echo \"                [-t|--show-update-time]       Show the last modified time of $default_path (where the list of available types is stored)\"\n    echo \"                [-u|--update-list]            Update $default_path\"\n}\n\n\ncheck_list_exist() {\n    if ! [ -f \"$default_path\" ]; then\n        echo \"-----Initial gitignore.io list----\"\n        update_gi_list\n        echo \"-----Save to $default_path-----\"\n        echo\n    fi\n    gi_list=$(tr \",\" \"\\n\" < \"$default_path\" 2>/dev/null)\n}\n\ncheck_list_exist\nif [[ $# -eq 0 ]]; then\n    show_usage\nelse\n    case $1 in\n        -a|--append|-r|--replace)\n            opt=$1\n            shift\n            if [[ $# -eq 0 ]]; then\n                echo \"There should be at least one type\"\n                echo\n                show_usage\n                exit\n            fi\n\n            gi_to_curl=$(echo \"$@\" | tr \" \" \",\")\n            case $opt in\n            -a|--append)\n                gi_append \"$gi_to_curl\"\n                ;;\n            -r|--replace)\n                gi_replace \"$gi_to_curl\"\n                ;;\n            esac\n\n            exit\n            ;;\n        -t|--show-update-time)\n            print_last_modified_time\n            ;;\n        -u|--update-list)\n            update_gi_list\n            ;;\n        -s|--search)\n            opt=$1\n            shift\n            if [[ $# -eq 0 ]]; then\n                show_usage\n                exit\n            fi\n            search \"$1\"\n            ;;\n        -L|--list-alphabetically)\n            print_in_alphabetical_order\n            ;;\n        -l|--list-in-table)\n            print_in_table_format\n            ;;\n        -*)\n            echo No Such option\n            show_usage\n            ;;\n        *)\n            gi_to_curl=$(echo \"$@\" | tr \" \" \",\")\n            gi \"$gi_to_curl\"\n            ;;\n    esac\nfi\n"
  },
  {
    "path": "bin/git-info",
    "content": "#!/usr/bin/env bash\n\nGREEN=\"$(tput setaf 2)\"\nNORMAL=\"$(tput sgr0)\"\nif [ \"$1\" = \"--color\" ] || [ \"$2\" = \"--color\" ] || \\\n     [ \"$1\" = \"-c\" ] || [ \"$2\" = \"-c\" ] ; then\n  COLOR_TITLE=\"$GREEN\"\nelse\n  COLOR_TITLE=\"$NORMAL\"\nfi\n\nHIDE_CONFIG=\nif [ \"$1\" != \"--no-config\" ] && [ \"$2\" != \"--no-config\" ]; then\n  HIDE_CONFIG=1\nfi\n\nget_config() {\n  cmd_get_config=\"$(git config --get-all git-extras.info.config-grep)\"\n  if [ -z \"$cmd_get_config\" ]; then\n    git config --list\n  else\n    eval \"$cmd_get_config\"\n  fi\n}\n\nmost_recent_commit() {\n  cmd_get_log=\"$(git config --get-all git-extras.info.log)\"\n  if [ -z \"$cmd_get_log\" ]; then\n    git log --max-count=1 --pretty=short\n  else\n    eval \"$cmd_get_log\"\n  fi\n}\n\nsubmodules() {\n  # short sha1\n  git submodule status | sed 's/\\([^abcdef0-9]\\{0,2\\}\\)\\([abcdef0-9]\\{7\\}\\)\\([abcdef0-9]\\{33\\}\\)\\(.*\\)/\\1\\2\\4/'\n}\n\nlocal_branches() {\n  git branch\n}\n\nremote_branches() {\n  git branch -r\n}\n\nremote_urls() {\n  git remote -v\n}\n\nechon() {\n  echo \"$@\"\n  echo\n}\n\necho\nechon \"${COLOR_TITLE}## Remote URLs:${NORMAL}\"\nechon \"$(remote_urls)\"\n\nechon \"${COLOR_TITLE}## Remote Branches:${NORMAL}\"\nechon \"$(remote_branches)\"\n\nechon \"${COLOR_TITLE}## Local Branches:${NORMAL}\"\nechon \"$(local_branches)\"\n\nSUBMODULES_LOG=$(submodules)\nif [ -n \"$SUBMODULES_LOG\" ]; then\n  echon \"${COLOR_TITLE}## Submodule(s):${NORMAL}\"\n  echon \"$SUBMODULES_LOG\"\nfi\n\nechon \"${COLOR_TITLE}## Most Recent Commit:${NORMAL}\"\nechon \"$(most_recent_commit)\"\n\nif [ -n \"$HIDE_CONFIG\" ]; then\n  echon \"${COLOR_TITLE}## Configuration (.git/config):${NORMAL}\"\n  echon \"$(get_config)\"\nfi\n"
  },
  {
    "path": "bin/git-local-commits",
    "content": "#!/usr/bin/env bash\n\ngit log \"@{upstream}..@\" \"$@\"\n"
  },
  {
    "path": "bin/git-lock",
    "content": "#!/usr/bin/env bash\n\nfilename=\"$1\"\ntest -z \"$filename\" && echo \"filename required.\" 1>&2 && exit 1\ngit update-index --skip-worktree \"$filename\"\n"
  },
  {
    "path": "bin/git-locked",
    "content": "#!/usr/bin/env bash\n\ngit ls-files -v | grep ^S | sed -e 's|S ||'\n"
  },
  {
    "path": "bin/git-magic",
    "content": "#!/usr/bin/env bash\n\n\n# Bash unofficial strict mode\nset -eo pipefail\nIFS=$'\\n\\t'\n\ncd \"$(git rev-parse --show-toplevel)\"\n\nUSAGE='git-magic [-a] [-m msg] [-e] [-p] [-f]'\n\nALL=false\nPUSH=false\nFORCE=''\nARGS=()\n\nwhile getopts \"m:eapfh\" arg; do\n  case \"${arg}\" in\n    m)\n      ARGS+=(\"-m\")\n      ARGS+=(\"${OPTARG}\")\n      ;;\n    e)\n      ARGS+=(\"-e\")\n      ;;\n    a)\n      ALL=true\n      ;;\n    p)\n      PUSH=true\n      ;;\n    f)\n      FORCE='--force-with-lease'\n      ;;\n    h)\n      echo \"$USAGE\"\n      exit 0\n      ;;\n    ?)\n      echo \"${USAGE}\"\n      exit 1\n      ;;\n  esac\ndone\n\nshift $((OPTIND-1))\n\nif [[ $# != 0 ]]; then\n  echo \"Unknown arguments: $*\"\n  echo \"${USAGE}\"\n  exit 1\nfi\n\nset -- \"${ARGS[@]}\" # restore positional parameters\n\nif [[ $ALL == true ]]; then\n\n  # Check if there is no changes to stage\n  if [[ -z $(git status --porcelain) ]]; then\n    echo \"No changes to commit\"\n    exit 0\n  fi\n\n  # Get confirmation from user\n  git status\n  echo \"Everything will be added\"\n  read -rp \"Press enter to continue\"\n\n  # Restore staging area so that, for example,\n  # add and modify will not be separate entries in status\n  git restore --staged . || true\n  git add .\nfi\n\n# Commit with generated message\ngit commit --no-edit \"$@\" -m \"$(git status --porcelain -uno)\"\n\nif [[ $PUSH == true ]]; then\n  git push $FORCE\nfi\n\n# --no-edit by default. use option -e to override this\n\n# Arguments are passed with quoted \"$@\" to avoid misparsing\n\n# Generated message comes after user provided arguments\n# so that user can insert title before it\n"
  },
  {
    "path": "bin/git-merge-into",
    "content": "#!/usr/bin/env bash\n\ncurrent_branch() {\n    git rev-parse --abbrev-ref HEAD\n}\n\nusage() {\n    echo \"Usage: git merge-into [src] dest [--ff-only]\"\n}\n\ncur_branch=$(current_branch)\n\nstashed=0\nif [ -n \"$(git status --porcelain)\" ];\nthen\n    echo \"Local modifications detected, stashing\"\n    stashed=1\n    git stash\nfi\n\nif [ \"${!#}\" = '--ff-only' ]; then\n    case $# in\n        2 ) # dest --ff\n            git push \"$(git rev-parse --show-toplevel)\" \"$cur_branch\":\"$1\";;\n        3 )\n            git push \"$(git rev-parse --show-toplevel)\" \"$1\":\"$2\";;\n        * )\n            usage\n    esac\nelse\n    case $# in\n        1 )\n            git checkout \"$1\"\n            git merge \"$cur_branch\" \"$1\" && git checkout \"$cur_branch\"\n            ;;\n        2 )\n            git checkout \"$2\"\n            git merge \"$1\" \"$2\" && git checkout \"$cur_branch\"\n            ;;\n        * )\n            usage\n    esac\nfi\n\nif [ $stashed -eq 1 ];\nthen\n    git stash pop;\nfi\n"
  },
  {
    "path": "bin/git-merge-repo",
    "content": "#!/usr/bin/env bash\n\nrepo=$1\nbranch=$2\nprefix=$3\nflat=0\n\nif test \"$prefix\" = \".\"; then\n\tprefix=$(mktemp -u 'git-merge-repo.XXXXXXX')\n\tflat=1\nfi\n\ngit subtree add -P \"$prefix\" \"$repo\" \"$branch\" \"${@:4}\"\n\nmessage=$(git log -1 --pretty=%B)\n\nif test $flat -eq 1; then\n\tgit stash -u\n\tmv -i \"$prefix\"/* ./\n\tgit undo\n\tgit add .\n\tgit commit -am \"$message\"\n\tgit stash apply\n\trm -drf \"$prefix\"\nfi\n"
  },
  {
    "path": "bin/git-missing",
    "content": "#!/usr/bin/env bash\n\nusage() {\n    echo 1>&2 \"usage: git missing [<first branch>] <second branch> [<git log options>] [[--] <path>...]\"\n}\n\nif [ \"${#}\" -lt 1 ]\nthen\n    usage\n    exit 1\nfi\n\ndeclare -a git_log_args=()\ndeclare -a branches=()\ndeclare -a pathspec=()\ndeclare parse_path=false\n\nfor arg in \"$@\" ; do\n\n    if [[ $parse_path == true ]]; then\n        pathspec+=(\"$@\")\n        break\n    fi\n\n    case \"$arg\" in\n        --)\n            parse_path=true\n            ;;\n        --*)\n            git_log_args+=( \"$arg\" )\n            ;;\n        *)\n            branches+=( \"$arg\" )\n            ;;\n    esac\ndone\n\nfirstbranch=\nsecondbranch=\nif [ ${#branches[@]} -eq 2 ]\nthen\n    firstbranch=\"${branches[0]}\"\n    secondbranch=\"${branches[1]}\"\nelif [ ${#branches[@]} -eq 1 ]\nthen\n    secondbranch=\"${branches[0]}\"\nelse\n    echo >&2 \"error: at least one branch required\"\n    exit 1\nfi\n\ngit log \"${git_log_args[@]}\" \"$firstbranch\"...\"$secondbranch\" --format=\"%m %h %s\" --left-right -- \"${pathspec[@]}\"\n"
  },
  {
    "path": "bin/git-mr",
    "content": "#!/usr/bin/env bash\n\nset -eu\n\nif [  -z \"${1-}\" ] ; then\n    echo \"mr number or URL required. See --help for usage.\" 1>&2\n    exit 1\nfi\n\nif test \"$1\" = \"clean\"; then\n  git for-each-ref refs/heads/mr/* --format='%(refname)' | while read -r ref; do\n    git branch -D \"${ref#refs/heads/}\"\n  done\n  exit 0\nelif [[ $1 =~ ^(https?://[^/]+/(.+))/merge_requests/([0-9]+).*$ ]]; then\n  remote=${BASH_REMATCH[1]}.git\n  id=${BASH_REMATCH[3]}\nelse\n  id=$1\n  remote=${2:-origin}\nfi\n\nbranch=mr/$id\nremote_ref=refs/merge-requests/$id/head\ngit fetch -fu \"$remote\" \"$remote_ref:$branch\"\ngit checkout \"$branch\"\ngit config --local --replace \"branch.$branch.merge\" \"$remote_ref\"\ngit config --local --replace \"branch.$branch.remote\" \"$remote\"\n"
  },
  {
    "path": "bin/git-obliterate",
    "content": "#!/usr/bin/env bash\n\nfile=\"\"\nrange=\"\"\nfor i in \"$@\"\ndo\n    # use '--' to separate file list and rev-list arguments\n    test \"$i\" == '--' && shift && break\n    file=\"$file\"' '\"$i\"\n    shift\ndone\ntest -n \"$*\" && range=(\"$@\")\n\ntest -z \"$file\" && echo \"file required.\" 1>&2 && exit 1\nif [ -z \"${range[*]}\" ]\nthen\n    git filter-branch -f --index-filter \"git rm -r --cached \"\"$file\"\" --ignore-unmatch\" \\\n        --prune-empty --tag-name-filter cat -- --all\nelse\n    # $range is an array so that we can forward multiple rev-list arguments\n    git filter-branch -f --index-filter \"git rm -r --cached \"\"$file\"\" --ignore-unmatch\" \\\n        --prune-empty --tag-name-filter cat -- \"${range[@]}\"\nfi\n"
  },
  {
    "path": "bin/git-paste",
    "content": "#!/usr/bin/env bash\nset -e\nset -o pipefail\n\nif ! command -v pastebinit &>/dev/null; then\n    echo >&2 \"To run 'git paste', you need to install pastebinit in your system\"\n    exit 1\nfi\n\ntest $# -ne 0 || set -- '@{u}'\ngit format-patch --stdout \"$@\" | pastebinit -f diff\n"
  },
  {
    "path": "bin/git-pr",
    "content": "#!/usr/bin/env bash\n# Based on https://gist.github.com/gnarf/5406589 and https://gist.github.com/jhnns/d654d9d6da6d3b749986\nTO_MERGE=\n\npull() {\n  local remote=\"$1\"\n  local id=\"$2\"\n  local branch=\"$3\"\n  local ref=\"refs/pull/$id/head\"\n\n  if [ -n \"$TO_MERGE\" ]; then\n    ref=\"refs/pull/$id/merge\"\n  fi\n\n  git fetch -fu \"$remote\" \"$ref:$branch\" && \\\n  git checkout \"$branch\" && \\\n  git config --local --replace \"branch.$branch.merge\" \"$ref\" && \\\n  git config --local --replace \"branch.$branch.remote\" \"$remote\"\n}\n\npull_pr_if_matched() {\n  if [[ $1 =~ ^(.*):([0-9]+)|(https?://[^/]+/.+)/pull/([0-9]+).*$ ]]; then\n    if [[ -n ${BASH_REMATCH[2]} ]]; then\n        remote=\"${BASH_REMATCH[1]:-origin}\"\n        id=\"${BASH_REMATCH[2]}\"\n    else\n        remote=\"${BASH_REMATCH[3]}.git\"\n        id=\"${BASH_REMATCH[4]}\"\n    fi\n\n    branch=pr/$id\n    pull \"$remote\" \"$id\" \"$branch\"\n    return $?\n  fi\n\n  echo \"$1 doesn't match the pr id pattern.\"\n  return 1\n}\n\nfor arg in \"$@\"; do\n    case \"$arg\" in\n        -m|--merge)\n            TO_MERGE=1\n            ;;\n        *)\n            # set the argument back\n            set -- \"$@\" \"$arg\"\n            ;;\n    esac\n\n    shift\ndone\n\ntest -z \"$1\" && echo \"pr number required.\" 1>&2 && exit 1\n\nif test \"$1\" = \"clean\"; then\n  git for-each-ref refs/heads/pr/* --format='%(refname)' | while read -r ref; do\n    git branch -D \"${ref#refs/heads/}\"\n  done\n\nelif [[ \"$1\" =~ ^[0-9]+$ ]]; then\n  remote_pref=${2:-$(git config --get git-extras.pr.remote)}\n  remote=${remote_pref:-origin}\n  id=$1\n  branch=pr/$id\n  pull \"$remote\" \"$id\" \"$branch\"\n\nelse\n  rc=1\n  while [ \"$1\" != \"\" ]; do\n    pull_pr_if_matched \"$1\"\n    rc=$?\n    shift\n  done\n\n  exit \"$rc\"\nfi\n"
  },
  {
    "path": "bin/git-psykorebase",
    "content": "#!/usr/bin/env bash\nPROGRAM=$0\nPRIMARY_BRANCH=\"\"\nSECONDARY_BRANCH=\"\"\nFF=\"--ff\"\nCONTINUE=\"no\"\n\ncurrent_branch() {\n    git rev-parse --abbrev-ref HEAD\n}\n\nfunction usage()\n{\n    echo \"USAGE: ${PROGRAM} PRIMARY_BRANCH [SECONDARY_BRANCH] [--no-ff]\"\n    echo \"USAGE: ${PROGRAM} --continue\"\n    echo \"\"\n    echo \"OPTIONS:\"\n    echo \"  --no-ff:\t\t\tForce rebase commit.\"\n    echo \"  -c|--continue:\t\tContinue after the user updates conflicts.\"\n}\n\nwhile [[ $# -gt 0 ]]\ndo\n  key=\"$1\"\n\n  case $key in\n      --no-ff)\n      FF=\"--no-ff\"\n      ;;\n      -c|--continue)\n      CONTINUE=yes\n      ;;\n      *)\n      if [[ \"$PRIMARY_BRANCH\" == \"\" ]]; then\n          PRIMARY_BRANCH=$key\n      elif [[ \"$SECONDARY_BRANCH\" == \"\" ]]; then\n          SECONDARY_BRANCH=$key\n      else\n          usage\n          exit 20  # Error during arguments parsing\n      fi\n      ;;\n  esac\n  shift  # past argument or value\ndone\n\nif [[ \"$SECONDARY_BRANCH\" == \"\" ]]; then\n    SECONDARY_BRANCH=$(current_branch)\nfi\n\nif [[ \"$CONTINUE\" == \"yes\" ]]; then\n    TARGET_BRANCH=$(current_branch)\n    SECONDARY_BRANCH=${TARGET_BRANCH%\"-rebased-on-top-of-\"*}\n    PRIMARY_BRANCH=${TARGET_BRANCH#*\"-rebased-on-top-of-\"}\n    if [[ \"${SECONDARY_BRANCH}-rebased-on-top-of-${PRIMARY_BRANCH}\" != $TARGET_BRANCH ]]; then\n        echo \"Couldn't continue rebasing on ${TARGET_BRANCH}\"\n        exit 30  # Impossible to detect PRIMARY_BRANCH AND SECONDARY_BRANCH\n    fi\n\n    echo \"Continuing rebasing of $SECONDARY_BRANCH on top of $PRIMARY_BRANCH\"\n    git commit || exit 51\n    git branch -d \"${SECONDARY_BRANCH}\"  || exit 52\n    git branch -m \"${TARGET_BRANCH}\" \"${SECONDARY_BRANCH}\" || exit 53\n\nelif [[ \"$PRIMARY_BRANCH\" == \"\" ]]; then\n    usage\n    exit 10  # Missing arguments PRIMARY_BRANCH\nelse\n    echo \"Rebasing $SECONDARY_BRANCH on top of $PRIMARY_BRANCH\"\n    TARGET_BRANCH=\"${SECONDARY_BRANCH}-rebased-on-top-of-${PRIMARY_BRANCH}\"\n\n    git checkout \"${PRIMARY_BRANCH}\" || exit 41\n    git checkout -b \"${TARGET_BRANCH}\" || exit 42\n\n    if git merge \"${SECONDARY_BRANCH}\" ${FF} \\\n        -m \"Psycho-rebased branch ${SECONDARY_BRANCH} on top of ${PRIMARY_BRANCH}\"; then\n        git branch -d \"${SECONDARY_BRANCH}\" || exit 43\n        git branch -m \"${TARGET_BRANCH}\" \"${SECONDARY_BRANCH}\" || exit 44\n    else\n        echo \"Resolve the conflict and run ``${PROGRAM} --continue``.\"\n        exit 1\n    fi\nfi\n"
  },
  {
    "path": "bin/git-pull-request",
    "content": "#!/usr/bin/env bash\n\n#\n# Echo <msg> and exit\n#\n\nabort() {\n  echo >&2 \"$@\"\n  exit 1\n}\n\n#\n# Produce json with <title>, <body>, <head> and <base>\n#\n\njson() {\n  local title=\"${1//\\\"/\\\\\\\"}\"\n  local body=\"${2//\\\"/\\\\\\\"}\"\n  local head=\"${3//\\\"/\\\\\\\"}\"\n  local base=\"${4//\\\"/\\\\\\\"}\"\n  cat <<EOF\n{\n  \"title\": \"$title\",\n  \"body\": \"$body\",\n  \"head\": \"$head\",\n  \"base\": \"$base\"\n}\nEOF\n}\n\n# personal access token\n# config name is github-personal-access-token '_' is not allowed in git config\n\ngithub_personal_access_token=$(git config --default \"$GITHUB_TOKEN\" git-extras.github-personal-access-token)\n\ntest -z \"$github_personal_access_token\" && abort \"GITHUB_TOKEN or git config git-extras.github-personal-access-token required\"\n\n# branch\n\nbranch=${1-$(git symbolic-ref HEAD | sed 's/refs\\/heads\\///')}\nremote=$(git config branch.\"$branch\".remote)\nif [ -z \"$remote\" ]; then\n    echo 'no upstream found, push to origin as default'\n    remote=\"origin\"\nfi\n[ \"$remote\" = \".\" ] && abort \"the upstream should be a remote branch.\"\n\n# make sure it's pushed\n\ngit push \"$remote\" \"$branch\" || abort \"failed to push $branch\"\n\nremote_url=$(git config remote.\"$remote\".url)\nif [[ \"$remote_url\" == git@* ]]; then\n    project=${remote_url##*:}\nelse\n    project=${remote_url#https://*/}\nfi\nproject=${project%.git}\n\n# prompt\n\necho\necho \"  create pull-request for $project '$branch'\"\necho\nprintf \"  title: \" && read -r title\nprintf \"  body: \" && read -r body\nprintf \"  base [%s]: \" \"$(git_extra_default_branch)\" && read -r base\nprintf \"  GitHub two-factor authentication code (leave blank if not set up): \" && read -r mfa_code\necho\n\n# create pull request\n\nif [ -z \"$base\" ]\nthen\n    base=\"$(git_extra_default_branch)\"\nfi\n\nbody=$(json \"$title\" \"$body\" \"$branch\" \"$base\")\n\ncurl \\\n\t\t-X POST \\\n\t\t-H \"Accept: application/vnd.github.v3+json\" \\\n\t\t-H \"Authorization: token $github_personal_access_token\" \\\n\t\t-H \"X-GitHub-OTP: $mfa_code\" \\\n    \"https://api.github.com/repos/$project/pulls\" -d \"$body\"\n"
  },
  {
    "path": "bin/git-reauthor",
    "content": "#!/usr/bin/env bash\n\n\ninit_variables() {\n  COMMAND=${0#*-}\n\n  CONFIG=false\n  ALL=false\n  unset OLD_EMAIL\n  unset CORRECT_EMAIL\n  unset CORRECT_NAME\n  TYPE='both'\n}\n\n\nusage() {\n  cat << EOF\nusage: git ${COMMAND} [<options>]\n\nOptions\n    -a, --all                     rewrite all identities in commits and tags\n    -c, --use-config              define correct values from user Git config\n    -e, --correct-email  <email>  define the correct email to set\n    -n, --correct-name   <name>   define the correct name to set\n    -o, --old-email      <email>  rewrite identities matching old email in commits and tags\n    -t, --type           <id>     define the type of identities affected by the rewrite\n                                  author, committer, both (default)\nEOF\n}\n\n\nerror() {\n  if [[ -n \"$1\" ]]; then\n    local msg=$( echo \"error: $1\" | sed 's/\\\\n/\\\\n       /g' )\n    echo -e \"${msg}\" >&2\n  fi\n  usage\n  exit 1\n}\n\n\nreauthor() {\n  local author='\n    if ${ALL} || [ \"${GIT_AUTHOR_EMAIL}\" = \"${OLD_EMAIL}\" ]; then\n      [ -z \"${CORRECT_EMAIL+x}\" ] || export GIT_AUTHOR_EMAIL=\"${CORRECT_EMAIL}\"\n      [ -z \"${CORRECT_NAME+x}\" ] || export GIT_AUTHOR_NAME=\"${CORRECT_NAME}\"\n    fi\n  '\n  local committer='\n    if ${ALL} || [ \"${GIT_COMMITTER_EMAIL}\" = \"${OLD_EMAIL}\" ]; then\n      [ -z \"${CORRECT_EMAIL+x}\" ] || export GIT_COMMITTER_EMAIL=\"${CORRECT_EMAIL}\"\n      [ -z \"${CORRECT_NAME+x}\" ] || export GIT_COMMITTER_NAME=\"${CORRECT_NAME}\"\n    fi\n  '\n  local filter\n\n  case \"${TYPE}\" in\n    author) filter=\"${author}\" ;;\n    committer) filter=\"${committer}\" ;;\n    both) filter=\"${author} ${committer}\" ;;\n  esac\n\n  export ALL\n  export OLD_EMAIL\n  export CORRECT_EMAIL\n  export CORRECT_NAME\n\n  git filter-branch --force --env-filter \"${filter}\" \\\n  --tag-name-filter cat -- --branches --tags\n}\n\n\nparse_options() {\n  while [[ \"$#\" -gt 0 ]]; do\n    case \"$1\" in\n      --all|-a)\n        ALL=true\n        shift\n        ;;\n      --correct-email|-e)\n        [[ -n \"${2+x}\" ]] || error 'Missing correct-email value'\n        CORRECT_EMAIL=\"$2\"\n        shift 2\n        ;;\n      -h)\n        usage\n        exit 0\n        ;;\n      --correct-name|-n)\n        [[ -n \"${2+x}\" ]] || error 'Missing correct-name value'\n        CORRECT_NAME=\"$2\"\n        shift 2\n        ;;\n      --old-email|-o)\n        [[ -n \"${2+x}\" ]] || error 'Missing old-email value'\n        OLD_EMAIL=\"$2\"\n        shift 2\n        ;;\n      --type|-t)\n        [[ -n \"${2+x}\" ]] || error 'Missing type value'\n        TYPE=\"$2\"\n        shift 2\n        ;;\n      --use-config|-c)\n        CONFIG=true\n        shift\n        ;;\n      *)\n        error \"invalid option '$1'\"\n        ;;\n    esac\n  done\n\n  if ${CONFIG}; then\n    # use config values if not explicitly already defined\n    [[ -n \"${CORRECT_EMAIL+x}\" ]] || CORRECT_EMAIL=$( git config user.email )\n    [[ -n \"${CORRECT_NAME+x}\" ]] || CORRECT_NAME=$( git config user.name )\n  fi\n}\n\n\nvalidate_options() {\n  # Either OLD_EMAIL should be set or ALL should be true\n  if [[ -z \"${OLD_EMAIL+x}\" ]] && ! ${ALL}; then\n    msg=\"missing target of the rewrite\"\n    msg=\"${msg}\\nuse either --old-email option or --all flag\"\n    error \"${msg}\"\n  fi\n\n  # OLD_EMAIL shouldn't be set if ALL is true as well to prevent misuse\n  if [[ -n \"${OLD_EMAIL+x}\" ]] && ${ALL}; then\n    msg=\"ambiguous target of the rewrite\"\n    msg=\"${msg}\\nuse either --old-email option or --all flag\"\n    error \"${msg}\"\n  fi\n\n  # CORRECT_NAME should be either unset or set to non-empty string\n  [[ -n \"${CORRECT_NAME-x}\" ]] || error \"empty name is not allowed\"\n\n  # Either CORRECT_EMAIL or CORRECT_NAME should be set\n  if [[ -z \"${CORRECT_EMAIL+x}\" ]] && [[ -z \"${CORRECT_NAME+x}\" ]]; then\n    msg=\"missing correct email and/or name to set\"\n    msg=\"${msg}\\nuse --correct-email and/or --correct-name options\"\n    msg=\"${msg}\\nor --use-config flag with user values set in Git config\"\n    error \"${msg}\"\n  fi\n\n  # TYPE should be a valid identifier\n  if [[ \"${TYPE}\" != 'both' ]] \\\n     && [[ \"${TYPE}\" != 'author' ]] \\\n     && [[ \"${TYPE}\" != 'committer' ]]; then\n    error \"invalid type '${TYPE}'\"\n  fi\n}\n\n\ninit_variables\nparse_options \"$@\"\nvalidate_options\n\nreauthor\n"
  },
  {
    "path": "bin/git-rebase-patch",
    "content": "#!/usr/bin/env bash\n\n# Warn on a dirty work tree.\ngit rev-parse --verify HEAD >/dev/null || exit 1\ngit update-index -q --ignore-submodules --refresh\nif ! git diff-files --quiet --ignore-submodules\nthen\n        echo \"WARNING (dirty work tree): The patch will only be checked against actual commits.\"\nfi\n\n# Warn on a dirty index.\nif ! git diff-index --cached --quiet --ignore-submodules HEAD --\nthen\n        echo \"WARNING (dirty index): The patch will only be checked against actual commits.\"\nfi\n\n# Use a temporary index.\nindex=$(git_extra_mktemp)\ncleanup() {\n        rm \"$index\"\n        exit 2\n}\ntrap cleanup INT\n\n# Go back in history while parent commits are available.\necho \"Trying to find a commit the patch applies to...\"\nrev=$(git rev-parse HEAD)\nwhile [ $? = 0 ]\ndo\n        GIT_INDEX_FILE=$index git read-tree \"$rev\"\n\n        # Try to apply the patch.\n        GIT_INDEX_FILE=$index git apply --cached \"$1\" &>/dev/null\n        patch_failed=$?\n\n        # Do it again, but show the error, if the problem is the patch itself.\n        if [ $patch_failed = 128 ]\n        then\n                GIT_INDEX_FILE=$index git apply --index --check \"$1\"\n                exit $patch_failed\n        fi\n\n        # The patch applied. Commit and rebase.\n        if [ $patch_failed = 0 ]\n        then\n                # Manufacture a commit.\n                tree=$(GIT_INDEX_FILE=$index git write-tree)\n                commit=$(git commit-tree \"$tree\" -p \"$rev\" -m \"$1\")\n                rm \"$index\"\n\n                echo \"Patch applied to $(git rev-parse --short \"$rev\") as $(git rev-parse --short \"$commit\")\"\n\n                git cherry-pick \"$commit\"\n                exit $?\n        fi\n\n        rev=$(git rev-parse --verify -q \"$rev^\")\ndone\n\n# No compatible commit found. Restore.\necho \"Failed to find a commit the patch applies to.\"\nrm \"$index\"\nexit 1\n"
  },
  {
    "path": "bin/git-release",
    "content": "#!/usr/bin/env bash\nset -e\n\nhook() {\n  local hook=.git/hooks/$1.sh\n  # compat without extname\n  if test ! -f \"$hook\"; then\n    hook=.git/hooks/$1\n  fi\n\n  if test -f \"$hook\"; then\n    echo \"... $1\"\n    shift\n    if test -x \"$hook\"; then\n      $hook \"$@\"\n    else\n      . \"$hook\" \"$@\"\n    fi\n  fi\n}\n\nexit_with_msg() {\n    >&2 echo \"$1\"\n    exit 1\n}\n\nif test $# -gt 0; then\n  remote=''\n\n  # check for flags\n  while test $# != 0\n  do\n    case \"$1\" in\n    -c) need_changelog=true;;\n    -r) remote=$2; shift ;;\n    -m) msg=$2; shift ;;\n    -s)\n      test -n \"$keyid\" &&\n          exit_with_msg \"Please use '-s' OR '-u'\"\n      sign=true\n      ;;\n    -u)\n      test -n \"$sign\" &&\n          exit_with_msg \"Please use '-s' OR '-u'\"\n      keyid=$2\n      shift\n      ;;\n    --semver)\n      test -z \"$2\" &&\n          exit_with_msg \"major/minor/patch required for --semver option\"\n      semver=$2\n      shift\n      ;;\n    --prefix)\n      test -z \"$2\" &&\n          exit_with_msg \"prefix string required for --prefix option\"\n      prefix=\"$2\"\n      shift\n      ;;\n    --no-empty-commit) no_empty_commit=true;;\n    --) shift; hook_args=\"$hook_args $*\"; break;;\n    *) test -z \"$version\" && version=$1 ;;\n    esac\n\n    shift\n\n  done\n\n  if [ -n \"$semver\" ]; then\n    if [ -z \"$(git tag)\" ]; then\n      echo \"there is no tag in the git repo\" 1>&2\n      exit 1\n    fi\n\n    latest_tag=$(git describe --tags \"$(git rev-list --tags --max-count=1)\")\n\n    if [[ ! \"$latest_tag\" =~ \\\n        ^$prefix([^0-9]*)([1-9][0-9]+|[0-9])\\.([1-9][0-9]+|[0-9])\\.([1-9][0-9]+|[0-9])(.*) ]]; then\n      echo \"the latest tag doesn't match semver format requirement\" 1>&2\n      exit 1\n    fi\n\n    case \"$semver\" in\n    major ) version=\"${BASH_REMATCH[2]}\" ;;\n    minor ) version=\"${BASH_REMATCH[3]}\" ;;\n    patch ) version=\"${BASH_REMATCH[4]}\" ;;\n    *     ) echo \"invalid semver argument given: $semver\" 1>&2\n            exit 1\n            ;;\n    esac\n\n    (( ++version ))\n\n    case \"$semver\" in\n    major ) version=\"$prefix${BASH_REMATCH[1]}$version.0.0${BASH_REMATCH[5]}\" ;;\n    minor ) version=\"$prefix${BASH_REMATCH[1]}${BASH_REMATCH[2]}.$version.0${BASH_REMATCH[5]}\" ;;\n    patch ) version=\"$prefix${BASH_REMATCH[1]}${BASH_REMATCH[2]}.${BASH_REMATCH[3]}.$version${BASH_REMATCH[5]}\" ;;\n    esac\n  fi\n\n  hook_args=\"$version\"\n\n  if [ -z \"$msg\" ]; then\n    msg=\"Release ${version}\"\n  fi\n\n  # shellcheck disable=SC2086\n  hook pre-release $hook_args \\\n    || exit_with_msg \"pre-release hook failed! Cancelling release.\"\n  echo \"... releasing $version\"\n  if [ \"$need_changelog\" = true ]; then\n    git-changelog -t \"$version\"\n  fi\n\n  if [ \"$no_empty_commit\" = true ]; then\n    git commit -a -m \"$msg\" || true\n  else\n    git commit -a -m \"$msg\" --allow-empty\n  fi\n\n  declare -a sign_args\n  if [ \"$sign\" = true ]; then\n    sign_args=(\"-s\")\n  fi\n\n  if [ -n \"$keyid\" ]; then\n    sign_args=(\"-u\" \"$keyid\")\n  fi\n\n  # shellcheck disable=SC2086\n  git tag \"${sign_args[@]}\" $version -a -m \"$msg\" \\\n    && git push $remote --tags \\\n    && git push $remote \\\n    && hook post-release $hook_args \\\n    && echo \"... complete\"\nelse\n  echo \"tag required\" 1>&2 && exit 1\nfi\n"
  },
  {
    "path": "bin/git-rename-branch",
    "content": "#!/usr/bin/env bash\nset -e\n\n# Assert there is at least one branch provided\ntest -z \"$1\" && echo \"new branch name required.\" 1>&2 && exit 1\n\nif [ -z \"$2\" ]; then\n    new_branch=\"$1\"\n    old_branch=\"$(git symbolic-ref --short -q HEAD)\"\nelse\n    new_branch=\"$2\"\n    old_branch=\"$1\"\nfi\n\nremote=$(git config branch.\"$old_branch\".remote; true)\n\ngit branch -m \"$old_branch\" \"$new_branch\"\n# check if the branch is tracking a remote branch\nif [[ -n \"$remote\" && \"$remote\" != \".\" ]]\nthen\n    git push \"$remote\" :\"$old_branch\"\n    git push --set-upstream \"$remote\" \"$new_branch\"\nfi\n"
  },
  {
    "path": "bin/git-rename-file",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n# Usage function\nusage() {\n    cat <<EOF\nUsage: git rename-file [OPTIONS] <source> <destination>\n\nDescription:\n  Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.\n  It combines the functionality of the \"mv\" command and \"git mv\". This is particularly useful for renaming files or directories\n  to change only their case, which might not be detected by Git on case-insensitive filesystems.\n\nOptions:\n  -h, --help  Show this help message and exit.\n\nExamples:\n  git rename-file old_filename new_filename\n  git rename-file old_directory new_directory\nEOF\n}\n\n# Check for help option\nif [[ \"$1\" == \"-h\" || \"$1\" == \"--help\" ]]; then\n    usage\n    exit 0\nfi\n\n# Check for correct number of arguments\nif [ \"$#\" -ne 2 ]; then\n    echo \"Error: Incorrect number of arguments.\"\n    echo \"\"\n    usage >&2\n    exit 1\nfi\n\n# Assign variables\nSOURCE=\"$1\"\nDESTINATION=\"$2\"\nTEMP_NAME=\"${SOURCE}.temp\"\n\n# Function to check if a file or directory exists in a case-sensitive manner\ncheck_case_sensitive_exists() {\n    local path=\"$1\"\n    local dir\n    local base\n\n    dir=$(dirname \"$path\")\n    base=$(basename \"$path\")\n\n    if [ -e \"$dir\" ]; then\n        if (cd \"$dir\" && find . -maxdepth 1 -name \"$base\" | grep -q \"$base\"); then\n            return 0\n        fi\n    fi\n    return 1\n}\n\n# Check if source exists and is under version control\nif ! check_case_sensitive_exists \"$SOURCE\"; then\n    echo \"Error: Source '$SOURCE' does not exist.\"\n    exit 1\nfi\n\nif ! git ls-files --error-unmatch \"$SOURCE\" > /dev/null 2>&1; then\n    echo \"Error: Source '$SOURCE' is not under version control. If file or directory is new, it must at least be staged.\"\n    exit 1\nfi\n\n# Check if destination already exists\nif check_case_sensitive_exists \"$DESTINATION\"; then\n    echo \"Error: Destination '$DESTINATION' already exists.\"\n    exit 1\nfi\n\n# Check if the destination directory exists\nDEST_DIR=$(dirname \"$DESTINATION\")\nif ! check_case_sensitive_exists \"$DEST_DIR\"; then\n    echo \"Error: Destination directory '$DEST_DIR' does not exist.\"\n    exit 1\nfi\n\n# Create a rollback function\nrollback() {\n    echo \"Rolling back changes...\"\n    if [ -e \"$TEMP_NAME\" ]; then\n        git mv -f \"$TEMP_NAME\" \"$SOURCE\"\n    fi\n}\n\n# Trap errors to trigger rollback\ntrap 'rollback' ERR\n\n# Move the file to a temporary name within the Git repository\ngit mv \"$SOURCE\" \"$TEMP_NAME\"\n\n# Move the temporary file to the desired destination\ngit mv \"$TEMP_NAME\" \"$DESTINATION\"\n\necho \"Successfully renamed '$SOURCE' to '$DESTINATION'.\"\n"
  },
  {
    "path": "bin/git-rename-remote",
    "content": "#!/usr/bin/env bash\n\nset -euo pipefail\n\nold=$1\nnew=$2\n\ntest -z \"$old\" && echo \"old remote name required.\" 1>&2 && exit 1\ntest -z \"$new\" && echo \"new remote name required.\" 1>&2 && exit 1\n\nif ! git config --get \"remote.$old.fetch\" > /dev/null; then\n  echo \"remote $old doesn't exist\"\n  exit 1\nfi\n\nif git config --get \"remote.$new.fetch\" > /dev/null; then\n  git remote remove \"$new\"\nfi\ngit remote rename \"$old $new\"\ngit remote -v\n"
  },
  {
    "path": "bin/git-rename-tag",
    "content": "#!/usr/bin/env bash\n\nold=$1\nnew=$2\n\ntest -z \"$old\" && echo \"old tag name required.\" 1>&2 && exit 1\ntest -z \"$new\" && echo \"new tag name required.\" 1>&2 && exit 1\n\ngit tag \"$new\" \"$old\"\ngit tag -d \"$old\"\ngit push origin \"$new\"\ngit push origin \":refs/tags/$old\"\n"
  },
  {
    "path": "bin/git-repl",
    "content": "#!/usr/bin/env bash\nshopt -s extglob\n\ngit version\necho \"git-extras version \"\"$(git-extras -v)\"\necho \"Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl.\"\n\nHISTIGNORE=${HISTIGNORE:-+([[:space:]])}\nHISTCONTROL=${HISTCONTROL:-ignoredups}\nuse_local_history=$(git config --get --default 'false' git-extras.repl.use-local-history)\nif [[ \"$use_local_history\" == \"true\" ]]; then\n  HISTFILE=\"$(git rev-parse --show-toplevel)/.git_extras_repl_history\"\nelse\n  HISTFILE=${XDG_STATE_HOME:-$HOME/.local/state}/git_extras_repl_history\nfi\n\n# file doesn't exist, is empty, or contains only whitespace\nif [[ ! -f \"$HISTFILE\" ]] || [[ ! -s \"$HISTFILE\" ]] || ! grep -q '[^[:space:]]' \"$HISTFILE\"; then\n  # `history -r` .... `history -a` are not happy with an empty initial file in bash 3.2.57, which is what MacOS 26 ships with\n  echo '!echo welcome to git-repl!' >> \"$HISTFILE\"\nfi\nhistory -r\n\nwhile true; do\n  # Current branch\n  cur=$(git symbolic-ref HEAD 2> /dev/null | cut -d/ -f3-)\n\n  # Prompt\n  if test -n \"$cur\"; then\n    cur_string=\" ($cur)\"\n  else\n    cur_string=\"\"\n  fi\n  if test -n \"$exit_status\" && test \"$exit_status\" -ne 0; then\n    es_string=$' \\e[31m['\"$exit_status\"$']\\e[0m'\n  else\n    es_string=\"\"\n  fi\n  prompt_character=$(git config --get --default '>' git-extras.repl.prompt-character)\n\n  prefix=$(git config --get --default 'git' git-extras.repl.prefix)\n\n  show_project_name=$(git config --get --default 'false' git-extras.repl.show-project-name)\n  if [[ \"$show_project_name\" == \"true\" ]]; then\n    project_name=\" $(basename \"$(git rev-parse --show-toplevel)\" .git)\"\n  else\n    project_name=\"\"\n  fi\n\n  prompt_base=\"$prefix$project_name$cur_string$es_string$prompt_character\"\n  prompt_base_stripped=$(echo \"$prompt_base\" | awk '{$1=$1};1')\n  prompt=\"$prompt_base_stripped \"\n\n  # Use arguments as a command if any are provided.\n  if [ $# -ne 0 ]; then\n    cmd=$*\n    set --\n    echo \"$prompt\" \"$cmd\" # It is as though you had entered a command.\n  else\n    # Readline\n    read -e -r -p \"$prompt\" cmd\n    # Check for EOF, and end the program if so (handles ^D).\n    test $? -ne 0 && break\n  fi\n\n  # Add command to history if it is not all whitespace\n  if [[ ! \"$cmd\" =~ ^[[:space:]]*$ ]]; then\n    history -s \"$cmd\"\n  fi\n\n  # Built-in commands\n  case $cmd in\n    ls) cmd=ls-files;;\n    \"\")\n      on_enter_cmd=$(git config --get --default '' git-extras.repl.on-enter-command)\n      if test -n \"$on_enter_cmd\"; then\n        cmd=\"$on_enter_cmd\"\n      else\n        continue\n      fi\n      ;;\n    quit|exit|q) break;;\n  esac\n\n  history -a\n\n  if [[ $cmd == !*  ]]; then\n    # shellcheck disable=SC2086\n    eval ${cmd:1}\n  elif [[ $cmd == git* ]]; then\n    # shellcheck disable=SC2086\n    eval $cmd\n  else\n    eval git \"$cmd\"\n  fi\n  exit_status=$?\ndone\n\necho\n"
  },
  {
    "path": "bin/git-reset-file",
    "content": "#!/usr/bin/env bash\n\nfile=\"$1\"\ncommit=\"$2\"\n\nif [[ -f $file ]]; then\n\tgit rm --cached -q -f -- \"$file\"\n\tif [[ -z $commit ]]; then\n\t\tgit checkout HEAD -- \"$file\"\n\t\techo \"Reset '$1' to HEAD\"\n\telse\n\t\tgit checkout \"$commit\" -- \"$file\"\n\t\techo \"Reset '$1' to $commit\"\n\tfi\nelse\n\techo \"File '$1' not found in $PWD\"\nfi\n"
  },
  {
    "path": "bin/git-root",
    "content": "#!/usr/bin/env bash\n\ngit_root() {\n  git rev-parse --show-toplevel\n}\n\n# get the relative path of current path according to root of repo\ngit_root_relative() {\n    rel=$(git rev-parse --show-prefix)\n    if [ -z \"$rel\" ]; then\n        # git rev-parse --show-prefix will output empty string when we are in the root dir\n        echo \".\"\n    else\n        echo \"$rel\"\n    fi\n}\n\nif test $# -eq 0; then\n    git_root\nelse\n    case \"$1\" in\n    -r|--relative)\n        git_root_relative\n        ;;\n    *)\n        git_root\n        ;;\n    esac\nfi\n\n"
  },
  {
    "path": "bin/git-scp",
    "content": "#!/usr/bin/env bash\n\nCOLOR_RED()   { test -t 1 && echo -n \"$(tput setaf 1)\"; }\nCOLOR_GREEN() { test -t 1 && echo -n \"$(tput setaf 2)\"; }\nCOLOR_YELLOW(){ test -t 1 && echo -n \"$(tput setaf 3)\"; }\nCOLOR_BLUE()  { test -t 1 && echo -n \"$(tput setaf 4)\"; }\nCOLOR_RESET() { test -t 1 && echo -n \"$(tput sgr 0)\"; }\n\nfunction _test_git_scp()\n{\n\tcommand -v rsync    > /dev/null || _error requires rsync\n\tcommand -v git      > /dev/null || _error requires git\n\tcommand -v ssh      > /dev/null || _error requires ssh\n\tcommand -v php      > /dev/null || _info  optional php\n\tcommand -v dos2unix > /dev/null || _info  optional dos2unix\n}\n\nfunction set_remote()\n{\n\tremote=$1\n\tif [ \"$(git remote | grep -c -- \"^$remote$\")\" -eq 0 ]\n\tthen\n\t\tCOLOR_RED\n\t\techo \"Remote $remote does not exist in your git config\"\n\t\tCOLOR_RESET\n\t\texit 1\n\tfi\n}\n\n# Check file for PHP syntax errors\n# takes a list of filenames\nfunction php_lint()\n{\n\tlocal error_count=()\n\tfor i\n\tdo\n\t\t# check if file exists\n\t\t# check if file ends with \".php\"\n\t\ttest ! -f \"$i\" && continue\n\t\tcase \"$i\" in\n\t\t\t*\\.php|*\\.phtml)\n\t\t\t\tif ! php -l \"$i\" > /dev/null; then\n\t\t\t\t\terror_count[${#error_count[@]}]=\"$i\"\n\t\t\t\tfi\n\t\t\t;;\n\t\tesac\n\tdone\n\n\t# syntax check fails, force exit\n\ttest ${#error_count[@]} -gt 0 &&\n\t\tCOLOR_RED &&\n\t\techo \"Error: ${#error_count[@]} PHP syntax error found\" &&\n\t\techo \"${error_count[@]}\" | tr \" \" '\\n' &&\n\t\tCOLOR_RESET &&\n\t\texit 255\n\n\treturn 0\n}\n\nfunction _dos2unix()\n{\n\tcommand -v dos2unix > /dev/null && dos2unix \"$@\"\n\treturn 0\n}\n\nfunction _sanitize()\n{\n\tgit config --get-all extras.scp.sanitize | while read -r i\n\tdo\n\t\tcase $i in\n\t\t\tphp_lint) php_lint  \"$@\";; # git config --global --add extras.scp.sanitize php_lint\n\t\t\tdos2unix) _dos2unix \"$@\";; # git config --global --add extras.scp.sanitize dos2unix\n\t\tesac\n\tdone\n\treturn $?\n}\n\nfunction scp_and_stage\n{\n\tset_remote \"$1\"\n\tshift\n\n\tlocal refhead\n\trefhead=\"$(git rev-parse --quiet --verify \"$1\")\"\n\tif [ -n \"$refhead\" ]\n\tthen\n\t\tshift\n\t\t[ \"$(git branch --contains \"$refhead\" | grep -c '\\*')\" -eq 0 ] &&\n\t\t\t_error \"refhead provided is not part of current branch\"\n\tfi\n\n\tif [ $# -ge 1 ]\n\tthen\n\t\tlist=$(git ls-files \"$@\")\" \"$(git ls-files -o \"$@\")\n\telif [ -n \"$refhead\" ]\n\tthen\n\t\tgit diff --stat \"$refhead\"\n\t\tlist=$(git diff \"$refhead\" --name-only)\n\telse\n\t\tgit diff\n\t\tlist=$(git diff --name-only)\n\tfi\n\n\tdeleted=$(for i in $list; do [ -f \"$i\" ] || echo \"$i\"; done)\n\t   list=$(for i in $list; do [ -f \"$i\" ] && echo \"$i\"; done)\n\n\tif [ -n \"$list\" ]\n\tthen\n\t\tlocal _TMP=${0///}\n\t\t# shellcheck disable=SC2086\n\t\techo \"$list\" > \"$_TMP\" &&\n\t\t_sanitize $list &&\n\t\t_info \"Pushing to $remote ($(git config \"remote.$remote.url\"))\" &&\n\t\trsync -rlDv --files-from=\"$_TMP\" ./ \"$(git config \"remote.$remote.url\")/\" &&\n\t\tgit add --force $list &&\n\t\trm \"$_TMP\"\n\tfi\n\n\tdeleted=$(for i in $deleted; do echo \"$(git config \"remote.$remote.url\" | cut -d: -f2)/$i\"; done)\n\n\t[ -n \"$deleted\" ] &&\n\tCOLOR_RED &&\n\techo Deleted remote files &&\n\tssh \"$(git config \"remote.$remote.url\" | cut -d: -f1)\" -t \"rm $deleted\" &&\n\techo \"$deleted\"\n\tCOLOR_RESET\n}\n\nfunction reverse_scp()\n{\n\tset_remote \"$1\"\n\tshift\n\n\tlocal _TMP=${0///}\n\techo \"$@\" > \"$_TMP\" &&\n\t\trsync -rlDv --files-from=\"$_TMP\" \"$(git config \"remote.$remote.url\")/\" ./ &&\n\t\trm \"$_TMP\"\n}\n\nfunction _info()\n{\n\tCOLOR_YELLOW\n\ttest $# -gt 0 && echo \"$@\"\n\tCOLOR_RESET\n}\n\nfunction _usage()\n{\n\techo \"Usage:\n\tgit scp -h|help|?\n\tgit scp <remote> [ref|file..]         # scp and stage your files to specified remote\n\tgit scp <remote> [<ref>]              # show diff relative to <ref> and upload unstaged files to <remote>\n\tgit rscp <remote> [<file|directory>]  # copy <remote> files to current working directory\n\t\"\n\n\tcase $1 in\n\t\t-v|verbose|--verbose) grep -A100 '^#* OPTIONS #*$' \"$0\" ;;\n\tesac\n\texit\n}\n\nfunction _error()\n{\n\t[ $# -eq 0 ] && _usage && exit 0\n\n\techo\n\techo \"ERROR: $*\"\n\techo\n\texit 1\n}\n\n### OPTIONS ###\ncase $(basename \"$0\") in\n\tgit-scp)\n\t\tcase $1 in\n\t\t\t''|-h|'?'|help|--help) shift; _test_git_scp; _usage \"$@\";;\n\t\t\t*)                   scp_and_stage \"$@\";;\n\t\tesac\n\t;;\n\tgit-rscp)                  reverse_scp \"$@\";;\nesac\n"
  },
  {
    "path": "bin/git-sed",
    "content": "#!/usr/bin/env bash\n\nusage() {\n    cat <<EOF\nusage: git sed [ -c ] [ -f <flags> ] <search> <replacement> [ <flags> ]\n\nRun git grep and then send results to sed for replacement with the\ngiven flags, if they are provided via -f or as the third argument.\n\nAlso runs git commit if -c is provided.\nEOF\n}\n\n# don't commit by default\ndo_commit() {\n    true\n}\n\npathspec=\nwhile [ \"$1\" != \"\" ]; do\n    case \"$1\" in\n        -c|--commit)\n            if git status --porcelain | grep .; then\n                echo \"you need to commit your changes before running with --commit\"\n                exit 1\n            fi\n            do_commit() {\n                git commit -m\"replace $search with $replacement\n\nactual command:\n\n    $command\" -a\n            }\n            ;;\n        -f|--flags)\n            if [ \"$2\" = \"\" ]; then\n                usage\n                echo \"missing argument for $1\"\n                exit 1\n            fi\n            shift\n            flags=$1\n            ;;\n        -h|--help)\n            usage\n            exit\n            ;;\n        --)\n            pathspec=\"$*\"\n            break\n            ;;\n        -*)\n            usage\n            echo \"unknown flag: $1\"\n            exit 1\n            ;;\n        *)\n            if [ \"$search\" = \"\" ]; then\n                search=\"$1\"\n            elif [ \"$replacement\" = \"\" ]; then\n                replacement=\"$1\"\n            elif [ \"$flags\" = \"\" ]; then\n                flags=\"$1\"\n            else\n                usage\n                echo \"too many arguments: $1\"\n                exit 1\n            fi\n            ;;\n    esac\n    shift\ndone\n\nall=\"$search$replacement$flags\"\ncase \"$all\" in\n    */*)\n        ascii=\"$(for((i=32;i<=127;i++)) do printf '%b' \"\\\\$(printf '%03o' \"$i\")\"; done)\"\n        escaped=\"${all//-/\\\\-}\"\n        escaped=\"${escaped//[/\\\\[}\"\n        sep=\"$(printf '%s' \"$ascii\" | tr -d \"$escaped\")\"\n        sep=\"$(printf %.1s \"$sep\")\"\n        if [ \"$sep\" = \"\" ] ; then\n            echo 'could not find an unused character for sed separator character'\n            exit 1\n        fi\n        ;;\n    *)\n        sep=/\n        ;;\nesac\n\nr=$(xargs -r false < /dev/null > /dev/null 2>&1 && echo r)\nneed_bak=$(sed -i s/hello/world/ \"$(git_extra_mktemp)\" > /dev/null 2>&1 || echo true)\n\nif [ \"$need_bak\" ]; then\n    command=\"git grep -lz '$search' $pathspec | xargs -0$r sed -i '' 's$sep$search$sep$replacement$sep$flags'\"\n    # shellcheck disable=SC2086\n    git grep -lz \"$search\" $pathspec | xargs -0\"$r\" sed -i '' \"s$sep$search$sep$replacement$sep$flags\"\nelse\n    command=\"git grep -lz '$search' $pathspec | xargs -0$r sed -i 's$sep$search$sep$replacement$sep$flags'\"\n    # shellcheck disable=SC2086\n    git grep -lz \"$search\" $pathspec | xargs -0\"$r\" sed -i \"s$sep$search$sep$replacement$sep$flags\"\nfi\ndo_commit\n"
  },
  {
    "path": "bin/git-setup",
    "content": "#!/usr/bin/env bash\n\nCOMMIT_MESSAGE='Initial commit'\n\nif [ \"$1\" = \"-m\" ]; then\n    COMMIT_MESSAGE=$2\n    shift; shift\nfi\n\ngitdirexists(){\n    if [ -d \".git\" ]; then\n        echo \".git directory already exists, aborting\"\n        exit 1\n    fi\n}\n\ndir=$(test -z \"$*\" && echo \".\" || echo \"$*\")\nmkdir -p \"$dir\" \\\n  && cd \"$dir\" \\\n  && gitdirexists \\\n  && git init \\\n  && git add . \\\n  && git commit --allow-empty -m \"$COMMIT_MESSAGE\"\n"
  },
  {
    "path": "bin/git-show-merged-branches",
    "content": "#!/usr/bin/env bash\n\ngit branch --no-color --merged | grep -v \"\\*\" | grep -v \"$(git_extra_default_branch)\" | tr -d ' '\n"
  },
  {
    "path": "bin/git-show-tree",
    "content": "#!/usr/bin/env bash\n\ngit log --all --graph --decorate --oneline --simplify-by-decoration\n"
  },
  {
    "path": "bin/git-show-unmerged-branches",
    "content": "#!/usr/bin/env bash\n\ngit branch --no-color --no-merged | grep -v \"\\*\" | grep -v \"$(git_extra_default_branch)\" | tr -d ' '\n"
  },
  {
    "path": "bin/git-squash",
    "content": "#!/usr/bin/env bash\n\nSQUASH_MSG=\nfor arg in \"$@\"; do\n    case \"$arg\" in\n        --squash-msg)\n            SQUASH_MSG=1\n            ;;\n        *)\n            # set the argument back\n            set -- \"$@\" \"$arg\"\n            ;;\n    esac\n\n    shift\ndone\n\nsrc=\"$1\"\nmsg=\"$2\"\nif [[ -n \"$msg\" ]] && [[ -n \"$SQUASH_MSG\" ]]; then\n    >&2 echo \"When commit message is given, --squash-msg is not allowed.\"\n    exit 1\nfi\n\nis_branch() {\n  git show-ref --verify --quiet \"refs/heads/$src\"\n}\n\nis_commit_reference() {\n  git rev-parse --verify --quiet \"$src\" > /dev/null 2>&1\n}\n\nis_on_current_branch() {\n  local commit_sha\n  commit_sha=$(git rev-parse \"$src\")\n  git rev-list HEAD |\n    grep -q -- \"$commit_sha\"\n}\n\ncommit_if_msg_provided() {\n  if test -n \"$msg\"; then\n    git commit -a -m \"$msg\"\n  fi\n}\n\nprompt_continuation_if_squashing_default_branch() {\n  if [[ $src == $(git_extra_default_branch) ]]; then\n    read -p \"Warning: squashing '$src'! Continue [y/N]? \" -r\n    if ! [[ $REPLY =~ ^[Yy]$ ]]; then\n      echo \"Exiting\"\n      exit 1\n    fi\n  fi\n}\n\nsquash_branch() {\n  prompt_continuation_if_squashing_default_branch\n  if [ -n \"$SQUASH_MSG\" ]; then\n      base=$(git merge-base \"$src\" @)\n      msg=$(git log \"$base\"..\"$src\" --format=\"%s%n%n%b\" --no-merges --reverse)\n  fi\n  git merge --squash \"$src\" || exit 1  # quits if `git merge` fails\n  commit_if_msg_provided\n}\n\nsquash_current_branch() {\n  if [ -n \"$SQUASH_MSG\" ]; then\n      msg=$(git log \"$src\"..@ --format=\"%s%n%n%b\" --no-merges --reverse)\n  fi\n  git reset --soft \"$src\" || exit 1    # quits if `git reset` fails\n  commit_if_msg_provided\n}\n\nif is_branch; then\n  squash_branch\nelif is_commit_reference && is_on_current_branch; then\n  squash_current_branch\nelse\n  echo \"Source branch or commit reference required.\" 1>&2 && exit 1\nfi\n"
  },
  {
    "path": "bin/git-stamp",
    "content": "#!/usr/bin/env bash\n\n\ninit_variables() {\n  COMMAND=${0#*-}\n\n  REPLACE=false\n  unset ID\n  unset MSG\n}\n\n\nusage() {\n  cat << EOF\nusage: git ${COMMAND} [<options>] <id> [<messages>]\n\nOptions:\n    -r, --replace    replace all previous stamps with same id\nEOF\n}\n\n\nerror() {\n  if [[ -n \"$1\" ]]; then\n    echo \"error: $1\" >&2\n  fi\n  usage\n  exit 1\n}\n\n\nstamp() {\n  local commit_msg=$( git log -1 --pretty=%B )\n  local stamp_msg\n  [[ -n \"${MSG}\" ]] && stamp_msg=\"${ID} ${MSG}\" || stamp_msg=\"${ID}\"\n\n  if ${REPLACE}; then\n    # remove previous stamps with same ID from the commit message\n    commit_msg=$(\n      echo \"${commit_msg}\" \\\n        | grep --ignore-case --invert-match \"^${ID}\\b\" \\\n        | cat -s\n    )\n  fi\n\n  # append the stamp to the commit message in a new paragraph\n  git commit --amend \\\n    --message \"${commit_msg}\" \\\n    --message \"${stamp_msg}\" \\\n    > /dev/null\n\n  # show result\n  git log -1 --pretty=full\n}\n\n\nparse_options() {\n  while [[ \"$#\" -gt 0 ]]; do\n    case \"$1\" in\n      -h)\n        usage\n        exit 0\n        ;;\n      --replace|-r)\n        REPLACE=true\n        shift\n        ;;\n      *)\n        break\n        ;;\n    esac\n  done\n\n  ID=\"$1\"\n  MSG=\"${*:2}\"\n}\n\n\nvalidate_options() {\n  # ID should be set to non-empty string\n  if [[ -z \"${ID}\" ]]; then\n    error \"missing stamp identifier\"\n  fi\n}\n\n\ninit_variables\nparse_options \"$@\"\nvalidate_options\n\nstamp\n"
  },
  {
    "path": "bin/git-standup",
    "content": "#!/usr/bin/env bash\n\n# Code modified from https://github.com/kamranahmedse/git-standup,\n# under the MIT LICENSE.\nusage() {\n    cat <<EOS\n    Usage:\n    git standup [-a <author name>] [-w <weekstart-weekend>|-d <days-ago>] [-m <max-dir-depth>] [-D date-format] [-L] [-h] [-f] [-B] [-n <number-of-commits] [-F <gpg|authordate>]\n\n    -a      - Specify author to restrict search to, default to current git user.\n              Use \"-a all\" if you don't want the restriction.\n    -w      - Specify weekday range to limit search to\n    -m      - Specify the depth of recursive directory search\n    -L      - Toggle inclusion of symbolic links in recursive directory search\n    -d      - Specify the number of days back to include\n    -D      - Specify the date format for \"git log\" (default: relative)\n    -h      - Display this help screen\n    -f      - Fetch the latest commits beforehand\n    -B      - Display the commits in branch groups\n    -n      - Limit the number of commits displayed per group\n    -F gpg  - Show if commit is GPG signed (G) or not (N)\n    -F authordate - Print author date instead of commit date\n\n    Examples:\n    git standup -a \"John Doe\" -w \"MON-FRI\" -m 3\nEOS\n}\n\nwarn() {\n    >&2 echo \"${BOLD}${RED}WARNING: $1${NORMAL}\"\n}\n\ngit rev-parse --show-toplevel > /dev/null 2>&1\nin_git_repo=$?\n\n# Use colors, but only if connected to a terminal, and that terminal\n# supports them.\nif command -v tput &>/dev/null; then\n    ncolors=$(tput colors)\nfi\nif [[ -t 1 ]] && [[ -n \"$ncolors\" ]] && [[ \"$ncolors\" -ge 8 ]] ; then\n    RED=\"$(tput setaf 1)\"\n    GREEN=\"$(tput setaf 2)\"\n    YELLOW=\"$(tput setaf 3)\"\n    BOLD=\"$(tput bold)\"\n    NORMAL=\"$(tput sgr0)\"\n    BOLD=$(tput bold)\n    UNDERLINE=$(tput smul)\n    NORMAL=$(tput sgr0)\n    COLOR=always\nelse\n    RED=\"\"\n    GREEN=\"\"\n    YELLOW=\"\"\n    BOLD=\"\"\n    NORMAL=\"\"\n    BOLD=\"\"\n    UNDERLINE=\"\"\n    NORMAL=\"\"\n    COLOR=never\nfi\n\n# Only enable exit-on-error after the non-critical colorization stuff,\n# which may fail on systems lacking tput or terminfo\nset -e\n\nRANGE_SPECIFIED=\nCOMMIT_DATE_FORMAT=%cd\nUSE_GPG_FORMAT=no\n\nwhile getopts \"hgfF:Bd:a:w:m:D:n:L\" opt; do\n    case $opt in\n        h)\n            usage\n            exit 0\n            ;;\n        a)\n            if [[ \"$OPTARG\" = 'all' ]] ; then\n                AUTHOR=\".*\"\n            else\n                AUTHOR=\"$OPTARG\"\n            fi\n            ;;\n        d)\n            test -n \"$RANGE_SPECIFIED\" && warn \"-d option is conflict with -w\"\n            RANGE_SPECIFIED=yes\n            if [ \"$OPTARG\" -lt 1 ]; then\n                >&2 echo \"Specify days less than one is invalid\"\n                exit 1\n            fi\n            SINCE=\"$OPTARG days ago\"\n            ;;\n        w)\n            if [ -n \"$RANGE_SPECIFIED\" ]; then\n                warn \"-w option is conflict with -d\"\n                continue\n            fi\n            RANGE_SPECIFIED=yes\n\n            week_range=${OPTARG}\n            week_start=\"${week_range%%-*}\"\n            week_start=\"${week_start:=\"Mon\"}\"\n            week_end=\"${week_range##*-}\"\n            week_end=${week_end:=\"Fri\"}\n\n            ## In case it is the start of week, we need to\n            ## show the commits since the last weekend\n            shopt -s nocasematch\n            if [[ \"$week_start\" == \"$(LC_ALL=C date +%a)\" ]] ; then\n                SINCE=\"last $week_end\";\n            fi\n            ;;\n        f)\n            FETCH_LAST_COMMIT=true\n            ;;\n        m)\n            MAXDEPTH=$((OPTARG + 1))\n            if [ \"$MAXDEPTH\" -lt 1 ]; then\n                >&2 echo \"Specify depth less than one is invalid\"\n                exit 1\n            fi\n            ;;\n        L)\n            INCLUDE_LINKS=-L\n            ;;\n        D)\n            GIT_DATE_FORMAT=${OPTARG}\n            ;;\n        g)\n            warn \"-g option is deprecated, use '-F gpg' instead\"\n            USE_GPG_FORMAT=yes\n            ;;\n        B)\n            GROUP_BY_BRANCHES=true\n            ;;\n        n)\n            MAX_COMMIT_NUM=${OPTARG}\n            ;;\n        F)\n            case $OPTARG in\n                gpg)\n                    USE_GPG_FORMAT=yes\n                    ;;\n                authordate)\n                    COMMIT_DATE_FORMAT=%ad\n                    ;;\n                *)\n                    warn \"Invalid argument for -F: $OPTARG\"\n                    usage\n                    exit 1\n                    ;;\n            esac\n            ;;\n        \\?)\n            usage\n            exit 1\n            ;;\n    esac\ndone\n\nshift $((OPTIND-1))\n\nif [[ $# -gt 0 ]]; then\n    warn \"please upgrade to new-style interface. Run 'git help standup' to get more info.\"\n    if [[ $# -gt 3 ]] ; then\n        usage\n        exit 1\n    fi\n    AUTHOR=$1\n    SINCE=$2\n    UNTIL=$3\nfi\n\nAUTHOR=${AUTHOR:=\"$(git config user.name || echo '')\"}\nif [ -z \"${AUTHOR}\" ]; then\n    warn \"please configure an author with 'git config user.name' or specify an author via '-a'\"\n    exit 1\nfi\n\nFETCH_LAST_COMMIT=${FETCH_LAST_COMMIT:=false}\nMAXDEPTH=${MAXDEPTH:=2}\nGIT_PRETTY_FORMAT=\"%Cred%h%Creset - %s %Cgreen(${COMMIT_DATE_FORMAT}) %C(bold blue)<%an>%Creset\"\nGIT_DATE_FORMAT=${GIT_DATE_FORMAT:=relative}\nif [[ \"$USE_GPG_FORMAT\" == 'yes' ]]; then\n    GIT_PRETTY_FORMAT=\"$GIT_PRETTY_FORMAT %C(yellow)gpg: %G?%Creset\"\nfi\n\n# Handle config of implicit week\nIMPLICIT_WEEK=$(git config --get git-extras.standup.implicit-week || echo '')\nif [[ -z \"$RANGE_SPECIFIED\" ]] && [[ -n \"${IMPLICIT_WEEK}\" ]]; then\n    week_start=${IMPLICIT_WEEK%%-*}\n    week_end=${IMPLICIT_WEEK##*-}\n    shopt -s nocasematch\n    if [[ \"$week_start\" == \"$(LC_ALL=C date +%a)\" ]]; then\n        SINCE=\"last $week_end\"\n    fi\n    UNTIL=today\nelse\n    SINCE=${SINCE:=yesterday}\n    UNTIL=${UNTIL:=today}\nfi\n\nGIT_LOG_COMMAND=\"git --no-pager log \\\n    --no-merges\n    --since \\\"$SINCE\\\"\n    --until \\\"$UNTIL\\\"\n    --author=\\\"$AUTHOR\\\"\n    --abbrev-commit\n    --oneline\n    --color=$COLOR\n    --pretty=format:'$GIT_PRETTY_FORMAT'\n    --date='$GIT_DATE_FORMAT'\"\nif [[ -n \"$MAX_COMMIT_NUM\" ]]; then\n    GIT_LOG_COMMAND=\"$GIT_LOG_COMMAND --max-count=$MAX_COMMIT_NUM\"\nfi\n\ngit_output() {\n    if [ \"$GROUP_BY_BRANCHES\" = true ]; then\n        local branches\n        branches=$(git branch --sort=-committerdate | awk '{print substr($0, 3)}')\n        for branch in $branches; do\n            # shellcheck disable=SC2086\n            if output=$(eval $GIT_LOG_COMMAND \"$branch\"); then\n                if [[ -n \"$output\" ]] ;  then\n                    echo \"${GREEN}${branch}${NORMAL}\"\n                    echo \"$output\"\n                    echo \"\"\n                fi\n            fi\n            # TODO optimize:return if the latest commit of a branch is earlier than the 'since' day\n        done\n    else\n        # shellcheck disable=SC2086\n        eval $GIT_LOG_COMMAND --all\n    fi\n}\n\n## For when the command has been run in a non-repo directory\nif [[ $in_git_repo != 0 ]]; then\n    ## Set delimiter to newline for the loop\n    IFS=$'\\n'\n    ## Recursively search for git repositories\n    # shellcheck disable=SC2086\n    PROJECT_DIRS=$(find $INCLUDE_LINKS . -maxdepth \"$MAXDEPTH\" -mindepth 0 -name .git)\n\n    # Fetch the latest commits, if required\n    if [ \"$FETCH_LAST_COMMIT\" = true ]; then\n\n        echo \"${BOLD}${GREEN}Fetching commits ..${NORMAL}\"\n\n        # Foreach of the project directories, fetch the commits\n        for DIR in $PROJECT_DIRS; do\n            DIR=\"$(dirname \"$DIR\")\"\n            pushd \"$DIR\" > /dev/null\n\n            if [[ -d \".git\" ]] ; then\n                echo \"   ${YELLOW}$(basename \"$DIR\")${NORMAL}\"\n                git fetch --all > /dev/null 2>&1\n            fi\n\n            popd > /dev/null\n        done\n    fi\n\n    # Get the standup details for each of the projects\n    for DIR in $PROJECT_DIRS; do\n        DIR=\"$(dirname \"$DIR\")\"\n        pushd \"$DIR\" > /dev/null\n        ## Show the detail only if it is a git repository\n        if [[ -d \".git\" || -f \".git\" ]] ; then\n            if GITOUT=$(git_output); then\n                ## Only output if there is some activities\n                if [[ -n \"$GITOUT\" ]] ;  then\n                    echo \"${BOLD}${UNDERLINE}${YELLOW}$(basename \"$DIR\")${NORMAL}\"\n                    echo \"$GITOUT\"\n                    echo \"\"\n                fi\n            else\n                echo \"Repository under $DIR could not be queried.\" >&2\n            fi\n        fi\n        popd > /dev/null\n    done\nelse\n    if [ \"$FETCH_LAST_COMMIT\" = true ]; then\n        echo \"${GREEN}Fetching commits ..${NORMAL}\"\n        git fetch --all > /dev/null 2>&1\n    fi\n\n    if GITOUT=$(git_output); then\n        if [[ -n \"$GITOUT\" ]] ;  then\n            echo \"$GITOUT\"\n        else\n            if [[ $AUTHOR = '.*' ]] ; then\n                AUTHOR=\"all the contributors\"\n            fi\n\n            echo \"${YELLOW}Seems like $AUTHOR did nothing!${NORMAL}\"\n        fi\n    fi\nfi\n"
  },
  {
    "path": "bin/git-summary",
    "content": "#!/usr/bin/env bash\n\n\ncd \"$(git root)\" || { echo \"Can't cd to top level directory\";exit 1; }\n\nPROJECT_FULL_PATH=\nSUMMARY_BY_LINE=\nDEDUP_BY_EMAIL=\nMERGES_ARG=\nOUTPUT_STYLE=\nfor arg in \"$@\"; do\n    case \"$arg\" in\n        --full-path)\n            PROJECT_FULL_PATH=1\n            ;;\n        --line)\n            SUMMARY_BY_LINE=1\n            ;;\n        --dedup-by-email)\n            DEDUP_BY_EMAIL=1\n            ;;\n        --no-merges)\n            MERGES_ARG=\"--no-merges\"\n            ;;\n        --output-style)\n            OUTPUT_STYLE=\"$2\"\n            shift\n            ;;\n        -*)\n            >&2 echo \"unknown argument $arg found\"\n            exit 1\n            ;;\n        *)\n            # set the argument back\n            set -- \"$@\" \"$arg\"\n            ;;\n    esac\n\n    shift\ndone\n\nif [ -n \"$DEDUP_BY_EMAIL\" ] && [ -n \"$SUMMARY_BY_LINE\" ]; then\n    >&2 echo \"--dedup-by-email used with --line is not supported\"\n    exit 1\nfi\n\nif [ -n \"$MERGES_ARG\" ] && [ -n \"$SUMMARY_BY_LINE\" ]; then\n    >&2 echo \"--no-merges used with --line is not supported\"\n    exit 1\nfi\n\ncommit=\"HEAD\"\nif [ -n \"$SUMMARY_BY_LINE\" ]; then\n  paths=( \"$@\" )\nelse\n  [ $# -ne 0 ] && commit=$*\nfi\n\nif [[ -n \"$PROJECT_FULL_PATH\" ]]; then\n  project=${PWD/${HOME}/\\~}\nelse\n  project=${PWD##*/}\nfi\n\n#\n# get date for the given <commit>\n#\ncommit_date() {\n  # the $1 can be empty\n  # shellcheck disable=SC2086\n  git log $MERGES_ARG --pretty='format: %ai' \"$1\" | cut -d ' ' -f 2\n}\n\n#\n# get active days for the given <commit>\n#\nactive_days() {\n  commit_date \"$1\" | sort -r | uniq | awk '\n    { sum += 1 }\n    END { print sum }\n  '\n}\n\n#\n# get the commit total\n#\ncommit_count() {\n  # shellcheck disable=SC2086\n  git rev-list $MERGES_ARG --count \"$commit\"\n}\n\n#\n# total file count\n#\nfile_count() {\n  git ls-files | wc -l | tr -d ' '\n}\n\n#\n# remove duplicate authors who belong to the same email address\n#\ndedup_by_email() {\n    # in:\n    # 27  luo zexuan <LuoZexuan@xxx.com>\n    #  7  罗泽轩 <luozexuan@xxx.com>\n    # out:\n    # 34 luo zexuan\n    LC_ALL=C awk '\n    {\n        sum += $1\n        last_field = tolower($NF)\n        if (last_field in emails) {\n            emails[last_field] += $1\n        } else {\n            email = last_field\n            emails[email] = $1\n            # set commits/email to empty\n            $1=$NF=\"\"\n            sub(/^[[:space:]]+/, \"\", $0)\n            sub(/[[:space:]]+$/, \"\", $0)\n            name = $0\n            if (name in names) {\n                # when the same name is associated with existed email,\n                # merge the previous email into the later one.\n                emails[email] += emails[names[name]]\n                emails[names[name]] = 0\n            }\n            names[name] = email\n        }\n    }\n    END {\n        for (name in names) {\n            email = names[name]\n            printf \"%6d\\t%s\\n\", emails[email], name\n        }\n    }' | sort -rn -k 1\n}\n\n#\n# list authors\n#\nformat_authors() {\n  # a rare unicode character is used as separator to avoid conflicting with\n  # author name. However, Linux column utility will escape tab if separator\n  # specified, so we do unesaping after it.\n  LC_ALL=C awk '\n  { args[NR] = $0; sum += $0 }\n  END {\n    for (i = 1; i <= NR; ++i) {\n      printf \"%s♪%2.1f%%\\n\", args[i], 100 * args[i] / sum\n    }\n  }\n  ' | column -t -s♪ | sed \"s/\\\\\\x09/\\t/g\"\n}\n\n#\n# fetch repository age from oldest commit\n#\nrepository_age() {\n  git log --reverse --pretty=oneline --format=\"%ar\" | head -n 1 | LC_ALL=C sed 's/ago//'\n}\n\n#\n# fetch repository age of the latest commit\n#\nlast_active() {\n  git log --pretty=oneline --format=\"%ar\" -n 1\n}\n\n#\n# list the last modified author for each line\n#\nsingle_file() {\n  while read -r data\n  do\n    if [[ $(file \"$data\") = *text* ]]; then\n      git blame --line-porcelain \"$data\" 2>/dev/null | grep \"^author \" | LC_ALL=C sed -n 's/^author //p';\n    fi\n  done\n}\n\ncurrent_branch_name() {\n  git rev-parse --abbrev-ref HEAD\n}\n\n#\n# list the author for all file\n#\nlines() {\n  git ls-files -- \"$@\" | single_file\n}\n\n#\n# get the number of the lines\n#\nline_count() {\n  lines \"$@\" | wc -l\n}\n\nuncommitted_changes_count() {\n  git status --porcelain | wc -l\n}\n\n\nCOLUMN_CMD_DELIMTER=\"¬\" # Hopefully, this symbol is not used in branch names... I use it as a separator for columns\nSP=\"$COLUMN_CMD_DELIMTER|\"\n\nprint_summary_by_line() {\n  if [ \"$OUTPUT_STYLE\" = \"tabular\" ]; then\n    tabular_headers=\"# Repo $SP Lines\"\n    echo -e \"$tabular_headers\\n$project $SP $(line_count \"${paths[@]}\")\" | column -t -s \"$COLUMN_CMD_DELIMTER\"\n  elif [ \"$OUTPUT_STYLE\" = \"oneline\" ]; then\n    echo \"$project / lines: $(line_count \"${paths[@]}\")\"\n  elif [ -n \"$SUMMARY_BY_LINE\" ]; then\n    echo\n    echo \" project     : $project\"\n    echo \" lines       : $(line_count \"${paths[@]}\")\"\n    echo \" authors     :\"\n    lines \"${paths[@]}\" | sort | uniq -c | sort -rn | format_authors\n  fi\n}\n\nprint_summary() {\n  if [ \"$OUTPUT_STYLE\" = \"tabular\" ]; then\n    tabular_headers=\"# Repo $SP Age $SP Last active $SP Active on $SP Commits $SP Uncommitted $SP Branch\"\n    echo -e \"$tabular_headers\\n$project $SP $(repository_age) $SP $(last_active) $SP $(active_days \"$commit\") days $SP $(commit_count \"$commit\") $SP $(uncommitted_changes_count) $SP $(current_branch_name)\" | column -t -s \"$COLUMN_CMD_DELIMTER\"\n  elif [ \"$OUTPUT_STYLE\" = \"oneline\" ]; then\n    echo \"$project / age: $(repository_age) / last active: $(last_active) / active on $(active_days \"$commit\") days / commits: $(commit_count \"$commit\") / uncommitted: $(uncommitted_changes_count) / branch: $(current_branch_name)\"\n  else\n    echo\n    echo \" project     : $project\"\n    echo \" repo age    : $(repository_age)\"\n    echo \" branch:     : $(current_branch_name)\"\n    echo \" last active : $(last_active)\"\n    echo \" active on   : $(active_days \"$commit\") days\"\n    echo \" commits     : $(commit_count \"$commit\")\"\n\n    # The file count doesn't support passing a git ref so ignore it if a ref is given\n    if [ \"$commit\" = \"HEAD\" ]; then\n      echo \" files       : $(file_count)\"\n    fi\n    echo \" uncommitted : $(uncommitted_changes_count)\"\n    echo \" authors     : \"\n    if [ -n \"$DEDUP_BY_EMAIL\" ]; then\n      # the $commit can be empty\n      # shellcheck disable=SC2086\n      git shortlog $MERGES_ARG -n -s -e \"$commit\" | dedup_by_email | format_authors\n    else\n      # shellcheck disable=SC2086\n      git shortlog $MERGES_ARG -n -s \"$commit\" | format_authors\n    fi\n  fi\n}\n\nif [ -n \"$SUMMARY_BY_LINE\" ]; then\n  print_summary_by_line\nelse\n  print_summary\nfi\n"
  },
  {
    "path": "bin/git-sync",
    "content": "#!/usr/bin/env bash\n\nfunction _usage()\n{\n  local command=\"git sync\"\n  cat << EOS\nUsage:\n  ${command} [<remote> <branch>]\n  ${command} -h | --help\n  ${command} -s | --soft\n  ${command} -f | --force\n\nSync local branch with <remote>/<branch>.\nWhen <remote> and <branch> are not specified on the command line, upstream of local branch will be used by default.\nAll changes and untracked files and directories will be removed unless you add -s(--soft).\n\nExamples:\n  Sync with upstream of local branch:\n    ${command}\n\n  Sync with origin/master:\n    ${command} origin master\n\n  Sync without cleaning untracked files:\n    ${command} -s\n\n  Sync without interaction:\n    ${command} -f\nEOS\n}\n\nfunction main()\n{\n  while [ \"$1\" != \"\" ]; do\n    case $1 in\n      -h | --help)\n        _usage\n        exit\n        ;;\n      -s | --soft)\n        local soft=\"true\"\n        ;;\n      -f | --force)\n        local force=\"YES\"\n        ;;\n      * )\n        if [ \"${remote}\" = \"\" ]; then\n          local remote=\"$1\"\n        elif [ \"${branch}\" = \"\" ]; then\n          local branch=\"$1\"\n        else\n          echo -e \"Error: too many arguments.\\n\"\n          _usage\n          exit 1\n        fi\n        ;;\n    esac\n    shift\n  done\n\n  local remote_branch\n  if [ -z \"${remote}\" ]; then\n    if ! remote_branch=\"$(git rev-parse --abbrev-ref --symbolic-full-name '@{u}' 2>/dev/null)\"; then\n      echo \"There is no upstream information of local branch.\"\n      exit 1\n    fi\n    local branch=\"$(git rev-parse --abbrev-ref --symbolic-full-name @)\"\n    local remote=$(git config \"branch.${branch}.remote\")\n  elif [ -z \"${branch}\" ]; then\n    echo -e \"Error: too few arguments.\\n\"\n    _usage\n    exit 1\n  else\n    remote_branch=\"${remote}/${branch}\"\n  fi\n\n  if [ \"${force}\" != \"YES\" ]; then\n    if [ \"${soft}\" = \"true\" ]; then\n      echo -n \"Are you sure you want to sync with '${remote_branch}'? [y/N]: \"\n    else\n      echo -n \"Are you sure you want to clean all changes & sync with '${remote_branch}'? [y/N]: \"\n    fi\n    local force\n    read -r force\n  fi\n  case \"${force}\" in\n    \"Y\" | \"y\" | \"yes\" | \"Yes\" | \"YES\" )\n      if [ \"${soft}\" = \"true\" ]; then\n        git fetch \"${remote}\" \"${branch}\" && git reset --hard \"${remote_branch}\"\n      else\n        git fetch \"${remote}\" \"${branch}\" && git reset --hard \"${remote_branch}\" && git clean -d -f -x\n      fi\n      ;;\n    * )\n      echo \"Canceled.\"\n      ;;\n  esac\n}\n\nmain \"$@\"\n\n"
  },
  {
    "path": "bin/git-touch",
    "content": "#!/usr/bin/env bash\n\nUSAGE(){\n  echo \"git touch <filename> [ <filename> . . .]\" 1>&2\n  exit 1\n}\n\ntest $# -lt 1 && USAGE\n\nfor filename in \"$@\"; do\n  touch \"$filename\" \\\n    && git add \"$filename\"\ndone\n"
  },
  {
    "path": "bin/git-undo",
    "content": "#!/usr/bin/env bash\n\ncstr=\"commits\"\nccnt=$(git rev-list --count HEAD)\nif [ \"$ccnt\" -eq 1 ]; then cstr=\"commit\"; fi\nparm3=\"\"\n\nfunction _undo()\n{\n  type=${1:-soft}\n  undo_cnt=${2:-1}\n  reset=${3:-\"\"}\n\n  if [ \"$undo_cnt\" -gt \"$ccnt\" ]; then\n    echo \"Only $ccnt $cstr, cannot undo $undo_cnt\"\n  elif [ \"$type\" = \"hard\" ] && [ \"$ccnt\" -eq \"$undo_cnt\" ]; then\n    echo \"Cannot hard undo all commits\"\n  elif [ \"$type\" = \"soft\" ] && [ \"$ccnt\" -eq 1 ]; then\n    git update-ref -d HEAD\n  else\n    git reset \"--$type\" \"HEAD~$undo_cnt\"\n  fi\n  if [ \"$reset\" != \"\" ]; then git reset; fi\n}\n\ncase \"$1\" in\n  -h)\n    cat << EOL\nThis will erase any changes since your last commit.\nIf you want to get help info, run \"git undo --help\" instead.\nDo you want to continue? [yN]\"\nEOL\n    read -r res\n    case \"${res}\" in\n      \"Y\" | \"y\")\n        parm1=hard\n        parm2=${2:-1}\n        ;;\n      * )\n        exit 0\n        ;;\n    esac\n    ;;\n  --hard)\n    parm1=hard\n    parm2=${2:-1}\n    ;;\n  -s|--soft)\n    parm1=soft\n    parm2=${2:-1}\n    parm3=reset\n    ;;\n  \"\")\n    parm1=soft\n    parm2=1\n    ;;\n  *[!0-9]*)\n    echo \"Invalid parameter: $1\"\n    exit 1\n    ;;\n  *)\n    parm1=soft\n    parm2=\"$1\"\n    ;;\nesac\n\nif [[ ! $parm2 =~ ^[1-9][0-9]*$ ]]; then\n    echo \"Invalid undo count: $parm2\"\n    exit 1\nfi\n\n_undo \"$parm1\" \"$parm2\" \"$parm3\"\n"
  },
  {
    "path": "bin/git-unlock",
    "content": "#!/usr/bin/env bash\n\nfilename=\"$1\"\ntest -z \"$filename\" && echo \"filename required.\" 1>&2 && exit 1\ngit update-index --no-skip-worktree \"$filename\"\n"
  },
  {
    "path": "bin/git-unwip",
    "content": "#!/usr/bin/env bash\n\n# Based on scripts from git-utils:\n# * https://github.com/ddollar/git-utils/blob/master/git-unwip\n\n# Check if the last commit is a 'WIP' commit\nLAST_COMMIT=`git log -1 --pretty=%B | tr -d '[:space:]'`\n\nif [ 'WIP' != $LAST_COMMIT ]; then\n  echo 'Last commit is not a WIP commit, so it will not be unWIP-ed.'\n  exit 1\nfi\n\ngit undo --soft\n"
  },
  {
    "path": "bin/git-utimes",
    "content": "#!/usr/bin/env bash\n#\n# Change files modification time to their last commit date\n#\n\n# Bash unofficial strict mode\nset -euo pipefail\nIFS=$'\\n\\t'\n\nif [[ \"${1:-}\" == \"--newer\" ]]; then\n  op=le\n  shift\nelse\n  op=eq\nfi\n\n# BSD systems\nif date -j &>/dev/null; then\n  stat_flags=\"-f %m\"\n  date_flags=\"-r\"\nelse\n  # Non-BSD systems\n  stat_flags=\"-c %Y\"\n  date_flags=\"-d@\"\nfi\n\nbash_opts=()\nif bash --help 2>&1 | grep -q -- '--noprofile'; then\n  bash_opts+=(--noprofile)\nfi\nif bash --help 2>&1 | grep -q -- '--norc'; then\n  bash_opts+=(--norc)\nfi\n\nstatus_opts=(--porcelain --short)\n# %ct: committer date, UNIX timestamp / %at: author date, UNIX timestamp\nlog_opts=(--format='%ct')\nif git status --help 2>&1 | grep -q -- \"--no-renames\"; then\n  status_opts+=(--no-renames)\n  log_opts+=(--no-renames)\nfi\nif git status --help 2>&1 | grep -q -- \"--untracked-files\"; then\n  status_opts+=(--untracked-files=no)\nfi\nif git status --help 2>&1 | grep -q -- \"--ignored\"; then\n  status_opts+=(--ignored=no)\nfi\n\nprefix=\"$(git rev-parse --show-prefix) \"\nstrip=\"${#prefix}\"\n\ntmpfile=$(mktemp)\n# shellcheck disable=SC2064\ntrap \"rm -f '${tmpfile}'\" 0\n\nawk_flags=(\n  -F'\\t'\n  -v date_flags=\"${date_flags}\"\n  -v op=\"${op}\"\n  -v stat_flags=\"${stat_flags}\"\n  -v strip=\"${strip}\"\n  -v tmpfile=\"${tmpfile}\"\n)\n\n# sanity check, not required:\nif awk --help 2>&1 | grep -q -- '--posix'; then\n  awk_flags+=(--posix)\nfi\n\nread -r -d '' awk_script <<\"EOF\" || true\nBEGIN {\n  seen[\"\"]=1\n  print \"#!/usr/bin/env bash\"\n  print \"set +e\"\n  print \"t() {\"\n  print \" test -e \\\"$2\\\" || return 0\"\n  printf(\" test \\\"$(stat %s \\\"$2\\\" 2>/dev/null)\\\" -%s \\\"$1\\\" && return 0\\n\", stat_flags, op)\n  if (date_flags == \"-d@\") {\n    print \" echo \\\"+ touch -h -d@$1 $2\\\"\"\n    print \" touch -h -d@$1 \\\"$2\\\"\"\n  } else {\n    print \" t=$(date -r$1 \\\"+%Y%m%d%H%M.%S\\\")\"\n    print \" echo \\\"+ touch -h -t $t $2\\\"\"\n    print \" touch -h -t $t \\\"$2\\\"\"\n  }\n  print \"}\"\n}\nFILENAME==tmpfile {\n  skip[$1]=1\n  next\n}\n# skip blank lines\n!/^$/ {\n  # skip deletes\n  if (substr($1, length($1), 1) ~ /D/) {\n    next\n  }\n  if (NF == 1) {\n    ct=$1\n    next\n  }\n  $2 = substr($2, strip, length($2)- strip + 1)\n  if ($2 in seen) {\n    next\n  }\n  if ($2 in skip) {\n    next\n  }\n  seen[$2]=1\n  # remove enclosing double quotes that git adds:\n  if (substr($2, 1, 1) == \"\\\"\" && substr($2, length($2), 1) == \"\\\"\") {\n    $2 = substr($2, 2, length($2) - 2)\n    # unescape remaining double quotes\n    gsub(/\\\\\"/, \"\\\"\", $2)\n    # unescape escaped backslashes\n    gsub(/\\\\\\\\/, \"\\\\\", $2)\n  }\n  # escape apostrophes: ' => '\\''\n  gsub(/'/, \"'\\\\''\", $2)\n  printf(\"t %s '%s'\\n\", ct, $2)\n}\nEOF\n\n# prefix is stripped:\ngit --no-pager status \"${status_opts[@]}\" . \\\n  | cut -c 4- >\"${tmpfile}\"\n\n# prefix is not stripped:\ngit --no-pager log --raw --no-merges \"${log_opts[@]}\" . \\\n  | awk \"${awk_flags[@]}\" \"${awk_script}\" \"${tmpfile}\" - \\\n  | BASH_ENV='' bash \"${bash_opts[@]}\" -\n"
  },
  {
    "path": "bin/git-wip",
    "content": "#!/usr/bin/env bash\n\n# Based on scripts from git-utils:\n# * https://github.com/ddollar/git-utils/blob/master/git-wip\n# * https://github.com/ddollar/git-utils/blob/master/git-addremove\n\ngit add --all\ngit commit --all --message=\"WIP\"\n"
  },
  {
    "path": "brew-release.patch",
    "content": "diff --git a/bin/git-extras b/bin/git-extras\nindex e49cd24..4ae28b5 100755\n--- a/bin/git-extras\n+++ b/bin/git-extras\n@@ -4,13 +4,12 @@ VERSION=\"4.3.0\"\n INSTALL_SCRIPT=\"https://raw.githubusercontent.com/tj/git-extras/main/install.sh\"\n\n update() {\n-  local bin=\"$(command -v git-extras)\"\n-  local prefix=${bin%/*/*}\n-  local orig=$PWD\n-\n-  curl -s $INSTALL_SCRIPT | PREFIX=\"$prefix\" bash /dev/stdin \\\n-    && cd \"$orig\" \\\n-    && echo \"... updated git-extras $VERSION -> $(git extras --version)\"\n+  echo \"This git-extras installation is managed by Homebrew.\"\n+  echo \"If you'd like to update git-extras, run the following:\"\n+  echo\n+  echo \"  brew upgrade git-extras\"\n+  echo\n+  return 1\n }\n\n updateForWindows() {\n"
  },
  {
    "path": "check_dependencies.sh",
    "content": "#!/usr/bin/env bash\n\nerr() {\n    echo >&2 \"$1\"\n    exit 1\n}\n\nif ! command -v column >/dev/null 2>&1; then\n    err \"Need to install dependency 'column' before installation (can be found in bsdmainutils)\"\nfi\n"
  },
  {
    "path": "check_integrity.sh",
    "content": "#!/usr/bin/env bash\n\nerr() {\n    echo >&2 \"$1\"\n    exit 1\n}\n\nmake_doc() {\n    echo \"touch man/git-$1.md && make man/git-$1.{1,html}\"\n}\n\ncheck_bash_script() {\n    local cmd=\"git-$1\"\n\n    test -f \"bin/$cmd\" \\\n        || err \"bin/$cmd does not exist\"\n\n    test -x \"bin/$cmd\" \\\n        || err \"Run 'chmod +x bin/$cmd' to make it executable\"\n\n    shebang=$(head -n1 \"bin/$cmd\")\n    [[ \"$shebang\" =~ \\#![[:space:]]*/usr/bin/env[[:space:]]+bash ]] \\\n        || err \"Start git-$1 with '#!/usr/bin/env bash'\"\n}\n\ncheck_git_extras_cmd_list() {\n    local whitelist=('extras')\n    for cmd in \"${whitelist[@]}\"; do\n        test \"$1\" == \"$cmd\" && return\n    done\n\n    grep \"\\- \\*\\*git\\-$1(1)\\*\\*\" man/git-extras.md >/dev/null \\\n        || err \"Add git-$1 in the list of commands in man/git-extras.md via $(make_doc \"$1\")\"\n}\n\ncheck_man_page_index() {\n    grep \"git\\-$1(1) git\\-$1\" man/index.txt >/dev/null \\\n        || err \"Add git-$1 to index.txt via $(make_doc \"$1\")\"\n}\n\ncheck_documentation() {\n    local cmd=\"git-$1\"\n    test -f \"man/$cmd.md\" || err \"man/$cmd.md is required for bin/$cmd\"\n\n    if [ ! -f \"man/$cmd.1\" ] || [ ! -f \"man/$cmd.html\" ]\n    then\n        err \"Create man/$cmd.1 and man/$cmd.html via $(make_doc \"$1\")\"\n    fi\n\n    if [ \"man/$cmd.md\" -nt \"man/$cmd.1\" ] || [ \"man/$cmd.md\" -nt \"man/$cmd.html\" ]\n    then\n      err \"man/$cmd.md, man/$cmd.1, and man/$cmd.html all exist, but man/$cmd.md is newer. You should rm man/$cmd.{1,html} && $(make_doc \"$1\")\"\n    fi\n\n    check_git_extras_cmd_list \"$@\"\n    check_man_page_index \"$@\"\n}\n\ncheck_Commands_page() {\n    # These are special cases. All listed together, so we ignore them\n    local whitelist=('bug' 'chore' 'feature' 'refactor')\n    for cmd in \"${whitelist[@]}\"; do\n        test \"$1\" == \"$cmd\" && return\n    done\n\n    grep \"\\- \\[\\`git $1\\`\\](#git-$1)\" Commands.md >/dev/null \\\n        || err \"Add git-$1 in the list of commands in Commands.md\"\n\n    grep \"^## git $1\" Commands.md >/dev/null \\\n        || err \"Add description of git-$1 in Commands.md\"\n}\n\ncheck_completion() {\n    grep \"$1:\" etc/git-extras-completion.zsh > /dev/null || \\\n        err \"Add git-$1 to the completion list at the end of etc/git-extras-completion.zsh\"\n}\n\ncheck() {\n    check_bash_script \"$1\"\n    check_documentation \"$1\"\n    check_Commands_page \"$1\"\n    check_completion \"$1\"\n}\n\ntest $# == 0 && set -- $(find bin | cut -b 5- | xargs)\n\n./bin/git-utimes --newer\n\nfor name in \"$@\"; do\n    name=${name#git-}\n    [[ \"$name\" == \"rscp\" ]] && continue\n    check \"$name\"\ndone\n\necho 'All done'\n"
  },
  {
    "path": "etc/bash_completion.sh",
    "content": "# shellcheck shell=bash\n# bash completion support for git-extras.\n\n__gitex_heads_unique() {\n  local branch specified=(\"${COMP_WORDS[@]:2}\")\n  for branch in $(__git_heads); do\n    [[ \" ${specified[*]} \" == *\" $branch \"* ]] || printf '%s\\n' \"$branch\"\n  done\n}\n\n_git_authors(){\n  __gitcomp \"-l --list --no-email\"\n}\n\n_git_browse(){\n  __git_complete_remote_or_refspec\n}\n\n_git_browse_ci(){\n  __git_complete_remote_or_refspec\n}\n\n_git_brv(){\n  __gitcomp \"-r --reverse\"\n}\n\n_git_changelog(){\n  local s_opts=( '-a' '-l' '-t' '-f' '-s' '-n' '-p' '-x' '-h' '?' )\n  local l_opts=(\n    '--all'\n    '--list'\n    '--tag'\n    '--final-tag'\n    '--start-tag'\n    '--start-commit'\n    '--no-merges'\n    '--prune-old'\n    '--stdout'\n    '--help'\n  )\n  local merged_opts_str=\"\"\n  merged_opts_str+=\"$(printf \"%s \" \"${s_opts[@]}\")\"\n  merged_opts_str+=\"$(printf \"%s \" \"${l_opts[@]}\")\"\n\n  __gitcomp \"$merged_opts_str\"\n}\n\n_git_coauthor(){\n  local oldIfs=$IFS\n  IFS=$'\\n'\n  local cur=\"${COMP_WORDS[COMP_CWORD]}\"\n  local selection=\n  if ((COMP_CWORD == 2)); then\n    for line in $(git authors --list); do\n      selection+=\"${line% *}\"$'\\n'\n    done\n  elif ((COMP_CWORD == 3)); then\n    local chosen_name=\"${COMP_WORDS[COMP_CWORD-1]}\"\n    for line in $(git authors --list); do\n      if [ \"$chosen_name\" = \"${line% *}\" ]; then\n        local email=${line#*<}\n        email=${email%>*}\n        selection+=\"$email\"$'\\n'\n      fi\n    done\n  fi\n  compopt +o default\n  compopt -o filenames\n  COMPREPLY=($(compgen -W \"$selection\" -- \"$cur\"))\n  IFS=$oldIfs\n}\n\n_git_contrib(){\n# git completion function modified from\n# https://github.com/markgandolfo/git-bash-completion/blob/master/git-completion.bash\n  contributors=\"$(git shortlog -s | cut -f2)\"\n  local all c s=$'\\n' IFS=$'\\n'\n  local cur=\"${COMP_WORDS[COMP_CWORD]}\"\n  for c in $contributors; do\n    all=\"$all$c $s\"\n  done\n  COMPREPLY=($(compgen -W \"$all\" -- \"$cur\"))\n}\n\n_git_commits_since(){\n  __gitcomp \"-r --ref\"\n}\n\n_git_count(){\n  __gitcomp \"--all\"\n}\n\n__git_cp(){\n  __git_complete_file\n}\n\n_git_delete_branch(){\n  __gitcomp \"$(__gitex_heads_unique)\"\n}\n\n_git_delete_squashed_branches(){\n  __gitcomp \"$(__git_heads)\"\n}\n\n_git_delete_submodule(){\n  __gitcomp \"$(git submodule status | awk '{print $2}')\"\n}\n\n_git_delete_tag(){\n  __gitcomp \"$(__git_tags)\"\n}\n\n_git_effort(){\n  __git_has_doubledash && return\n\n  case \"$cur\" in\n  --*)\n    # shellcheck disable=SC2154\n    __gitcomp \"\n      --above\n      $__git_log_common_options\n      $__git_log_shortlog_options\n      \"\n    return\n    ;;\n  esac\n}\n\n_git_extras(){\n  __gitcomp \"--version update\"\n}\n\n__git_extras_workflow(){\n  __gitcomp \"$(__git_heads | grep -- \"^$1/\" | sed s/^\"$1\"\\\\///g) finish\"\n}\n\n_git_feature(){\n  __git_extras_workflow \"feature\"\n}\n\n_git_graft(){\n  __gitcomp \"$(__git_heads)\"\n}\n\n_git_ignore(){\n  case \"$cur\" in\n  --*)\n    __gitcomp \"--global --local --private\"\n    return\n    ;;\n  -*)\n    __gitcomp \"--global --local --private -g -l -p\"\n    return\n    ;;\n  esac\n}\n\n_git_info(){\n  __gitcomp \"--color -c --no-config\"\n}\n\n_git_missing(){\n    # Suggest all known refs\n    __gitcomp \"$(git for-each-ref --format='%(refname:short)')\"\n}\n\n_git_psykorebase(){\n  __gitcomp \"$(__git_heads) --continue --no-ff\"\n}\n\n_git_reauthor(){\n  local prev=\"${COMP_WORDS[COMP_CWORD-1]}\"\n  local comp\n\n  if [[ \"${prev}\" == '--type' ]] || [[ \"${prev}\" == '-t' ]]; then\n    comp='author committer full'\n  else\n    comp='--all --correct-email --correct-name --old-email --type --use-config'\n  fi\n\n   __gitcomp \"${comp}\"\n}\n\n__git_extras_rename(){\n  if ((COMP_CWORD == 2 || COMP_CWORD == 3)); then\n    __gitcomp \"$1\"\n  fi\n}\n\n_git_rename_branch(){\n  __git_extras_rename \"$(__git_heads)\"\n}\n\n_git_rename_remote(){\n  __git_extras_rename \"$(__git_remotes)\"\n}\n\n_git_rename_tag(){\n  __git_extras_rename \"$(__git_tags)\"\n}\n\n_git_rscp(){\n  __git_complete_remote_or_refspec\n}\n\n_git_scp(){\n  __git_complete_remote_or_refspec\n}\n\n_git_squash(){\n  __gitcomp \"$(__git_heads)\"\n}\n\n_git_stamp(){\n  __gitcomp '--replace -r'\n}\n\n_git_undo(){\n   __gitcomp \"--hard --soft -h -s\"\n}\n"
  },
  {
    "path": "etc/git-extras-completion.zsh",
    "content": "# ------------------------------------------------------------------------------\n# Description\n# -----------\n#\n#  Completion script for git-extras (https://github.com/tj/git-extras).\n#\n#  This depends on and reuses some of the internals of the _git completion\n#  function that ships with zsh itself. It will not work with the _git that ships\n#  with git.\n#\n# ------------------------------------------------------------------------------\n# Authors\n# -------\n#\n#  * Alexis GRIMALDI (https://github.com/agrimaldi)\n#  * spacewander (https://github.com/spacewander)\n#\n# ------------------------------------------------------------------------------\n# Inspirations\n# -----------\n#\n#  * git-extras (https://github.com/tj/git-extras)\n#  * git-flow-completion (https://github.com/bobthecow/git-flow-completion)\n#\n# ------------------------------------------------------------------------------\n\n\n# Internal functions\n# These are a lot like their __git_* equivalents inside _git\n\n__gitex_command_successful () {\n  if (( ${#*:#0} > 0 )); then\n    _message 'not a git repository'\n    return 1\n  fi\n  return 0\n}\n\n__gitex_commits() {\n    declare -A commits\n    git log --oneline -15 | sed 's/\\([[:alnum:]]\\{7\\}\\) /\\1:/' | while read commit\n    do\n        hash=$(echo $commit | cut -d':' -f1)\n        commits[$hash]=\"$commit\"\n    done\n    local ret=1\n    _describe -t commits commit commits && ret=0\n}\n\n__gitex_remote_names() {\n    local expl\n    declare -a remote_names\n    remote_names=(${(f)\"$(_call_program remotes git remote 2>/dev/null)\"})\n    __gitex_command_successful || return\n    _wanted remote-names expl remote-name compadd $* - $remote_names\n}\n\n__gitex_tag_names() {\n    local expl\n    declare -a tag_names\n    tag_names=(${${(f)\"$(_call_program tags git for-each-ref --format='\"%(refname)\"' refs/tags 2>/dev/null)\"}#refs/tags/})\n    __gitex_command_successful || return\n    _wanted tag-names expl tag-name compadd $* - $tag_names\n}\n\n\n__gitex_branch_names() {\n    local expl\n    declare -a branch_names\n    branch_names=(${${(f)\"$(_call_program branchrefs git for-each-ref --format='\"%(refname)\"' refs/heads 2>/dev/null)\"}#refs/heads/})\n    __gitex_command_successful || return\n    _wanted branch-names expl branch-name compadd $* - $branch_names\n}\n\n__gitex_branch_names_unique() {\n    local expl\n    declare -a branch_names already_specified\n    branch_names=(${${(f)\"$(_call_program branchrefs git for-each-ref --format='\"%(refname)\"' refs/heads 2>/dev/null)\"}#refs/heads/})\n    __gitex_command_successful || return\n    already_specified=(${words[2,-1]})\n    _wanted branch-names expl branch-name compadd -F already_specified $* - $branch_names\n}\n\n__gitex_specific_branch_names() {\n    local expl\n    declare -a branch_names\n    branch_names=(${${(f)\"$(_call_program branchrefs git for-each-ref --format='\"%(refname)\"' refs/heads/\"$1\" 2>/dev/null)\"}#refs/heads/$1/})\n    __gitex_command_successful || return\n    _wanted branch-names expl branch-name compadd - $branch_names\n}\n\n__gitex_feature_branch_names() {\n    __gitex_specific_branch_names 'feature'\n}\n\n__gitex_submodule_names() {\n    local expl\n    declare -a submodule_names\n    submodule_names=(${(f)\"$(_call_program branchrefs git submodule status | awk '{print $2}')\"})  # '\n    __gitex_command_successful || return\n    _wanted submodule-names expl submodule-name compadd $* - $submodule_names\n}\n\n__gitex_workspace_names() {\n    local expl\n    declare -a workspace_names\n    workspace_names=($(git bulk --listall | awk '{print $1}' | cut -d \".\" -f 2))\n    __gitex_command_successful || return\n    _wanted workspace-names expl workspace-names compadd $* - $workspace_names\n}\n\n__gitex_author_names() {\n    local expl\n    declare -a author_names\n    author_names=(${(f)\"$(_call_program branchrefs git log --format='%aN' | sort -u)\"})\n    __gitex_command_successful || return\n    _wanted author-names expl author-name compadd $* - $author_names\n}\n\n__gitex_author_emails() {\n    local expl\n    declare -a author_names\n    author_names=(${(f)\"$(_call_program branchrefs git log --format='%aE' | sort -u)\"})\n    __gitex_command_successful || return\n    _wanted author-names expl author-name compadd $* - $author_names\n}\n\n# subcommands\n# new subcommand should be added in alphabetical order\n_git-authors() {\n    _arguments  -C \\\n        '(--list -l)'{--list,-l}'[show authors]' \\\n        '--no-email[without email]' \\\n}\n\n_git-brv() {\n    _arguments \\\n        '(-r --reverse)'{-r,--reverse}'[reverse order]'\n}\n\n_git-bulk() {\n    _arguments \\\n        '-a[Run a git command on all workspaces and their repositories.]' \\\n        '-g[Ask the user for confirmation on every execution (guarded mode).]' \\\n        '-w[Run the git command on the specified workspace.]:workspace-name:__gitex_workspace_names' \\\n        '-q[Suppress bulk output about current execution (quiet mode).]' \\\n        '--no-follow-symlinks[Do not traverse symbolic links when searching for git repositories.]' \\\n        '--no-follow-hidden[Do not traverse hidden directories when searching for git repositories.]' \\\n        '--addworkspace[Register a workspace for bulk operations.]' \\\n        '--removeworkspace[Remove the specified workspace.]:workspace-name:__gitex_workspace_names' \\\n        '--addcurrent[Adds the current directory as workspace to git bulk operations]' \\\n        '--purge[Removes all defined repository locations.]' \\\n        '--listall[List all registered repositories.]' \\\n        '--help[Show the help.]'\n}\n\n_git-changelog() {\n    _arguments \\\n        '(-l --list)'{-l,--list}'[list commits]' \\\n}\n\n_git-clear() {\n    _arguments \\\n        '(-f --force)'{-f,--force}'[force clear]' \\\n        '(-h --help)'{-h,--help}'[help message]' \\\n}\n\n_git-coauthor() {\n    _arguments \\\n        ':co-author[co-author to add]:__gitex_author_names' \\\n        ':co-author-email[email address of co-author to add]:__gitex_author_emails'\n}\n\n_git-commits-since() {\n    _arguments \\\n        '(-r --ref)'{-r,--ref}'[show commits since ref]'\n}\n\n_git-contrib() {\n    _arguments \\\n        ':author:__gitex_author_names'\n}\n\n\n_git-count() {\n    _arguments \\\n        '--all[detailed commit count]'\n}\n\n_git-create-branch() {\n    local curcontext=$curcontext state line\n    _arguments -C \\\n        ': :->command' \\\n        '*:: :->option-or-argument'\n\n    case \"$state\" in\n        (command)\n            _arguments \\\n                '(--remote -r)'{--remote,-r}'[setup remote tracking branch]'\n            ;;\n        (option-or-argument)\n            curcontext=${curcontext%:*}-$line[1]:\n            case $line[1] in\n                -r|--remote )\n                    _arguments -C \\\n                        ':remote-name:__gitex_remote_names'\n                    ;;\n            esac\n    esac\n}\n\n_git-delete-branch() {\n    __gitex_branch_names_unique\n}\n\n_git-delete-squashed-branches() {\n    _arguments \\\n        ':branch-name:__gitex_branch_names'\n}\n\n\n_git-delete-submodule() {\n    _arguments \\\n        ':submodule-name:__gitex_submodule_names'\n}\n\n\n_git-delete-tag() {\n    _arguments \\\n        ':tag-name:__gitex_tag_names'\n}\n\n\n_git-effort() {\n    _arguments \\\n        '--above[ignore file with less than x commits]'\n}\n\n\n_git-extras() {\n    local curcontext=$curcontext state line ret=1\n    declare -A opt_args\n\n    _arguments -C \\\n        ': :->command' \\\n        '*:: :->option-or-argument' && ret=0\n\n    case $state in\n        (command)\n            declare -a commands\n            commands=(\n                'update:update git-extras'\n            )\n            _describe -t commands command commands && ret=0\n            ;;\n    esac\n\n    _arguments \\\n        '(-v --version)'{-v,--version}'[show current version]'\n}\n\n\n_git-feature() {\n    local curcontext=$curcontext state line ret=1\n    declare -A opt_args\n\n    _arguments -C \\\n        ': :->command' \\\n        '*:: :->option-or-argument' && ret=0\n\n    case $state in\n        (command)\n            declare -a commands\n            commands=(\n                'finish:merge feature into the current branch'\n            )\n            _describe -t commands command commands && ret=0\n            ;;\n        (option-or-argument)\n            curcontext=${curcontext%:*}-$line[1]:\n            case $line[1] in\n                (finish)\n                    _arguments -C \\\n                        '--squash[Use squash merge]' \\\n                        ':branch-name:__gitex_feature_branch_names'\n                    ;;\n                -r|--remote )\n                    _arguments -C \\\n                        ':remote-name:__gitex_remote_names'\n                    ;;\n            esac\n            return 0\n    esac\n\n    _arguments \\\n        '(--remote -r)'{--remote,-r}'[setup remote tracking branch]'\n}\n\n_git-graft() {\n    _arguments \\\n        ':src-branch-name:__gitex_branch_names' \\\n        ':dest-branch-name:__gitex_branch_names'\n}\n\n_git-guilt() {\n    _arguments -C \\\n        '(--email -e)'{--email,-e}'[display author emails instead of names]' \\\n        '(--ignore-whitespace -w)'{--ignore-whitespace,-w}'[ignore whitespace only changes]' \\\n        '(--debug -d)'{--debug,-d}'[output debug information]' \\\n        '-h[output usage information]'\n}\n\n_git-ignore() {\n    _arguments -C \\\n        '(--local -l)'{--local,-l}'[show local gitignore]' \\\n        '(--global -g)'{--global,-g}'[show global gitignore]' \\\n        '(--private -p)'{--private,-p}'[show repo gitignore]' \\\n        '*:filename:_files'\n}\n\n\n_git-info() {\n    _arguments -C \\\n        '(--color -c)'{--color,-c}'[use color for information titles]' \\\n        '--no-config[do not show list all variables set in config file, along with their values]'\n}\n\n\n_git-merge-into() {\n    _arguments '--ff-only[merge only fast-forward]'\n    _arguments \\\n        ':src:__gitex_branch_names' \\\n        ':dest:__gitex_branch_names'\n}\n\n_git-missing() {\n    _arguments \\\n        ':first-branch-name:__gitex_branch_names' \\\n        ':second-branch-name:__gitex_branch_names'\n}\n\n_git-release() {\n    _arguments -C \\\n        '-c[Generates/populates the changelog with all commit message since the last tag.]' \\\n        '-r[The \"remote\" repository that is destination of a push operation.]' \\\n        '-m[use the custom commit information instead of the default message.]' \\\n        '-s[Create a signed and annotated tag.]' \\\n        '-u[Create a tag, annotated and signed with the given key.]' \\\n        '--semver[If the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag.]' \\\n        '--prefix[Add a prefix string to semver to allow more complex tags.]' \\\n        '--no-empty-commit[Avoid creating empty commit if nothing could be committed.]' \\\n        '--[The arguments listed after \"--\" separator will be passed to pre/post-release hook.]'\n}\n\n_git-rename-file() {\n    _arguments -C \\\n        '-h[show usage information]' \\\n        '--help[show usage information]' \\\n        '1:source:__git_files' \\\n        '2:destination:__git_files'\n}\n\n_git-squash() {\n    _arguments '--squash-msg[commit with the squashed commit messages]'\n    _arguments \\\n        ':branch-name:__gitex_branch_names'\n}\n\n_git-stamp() {\n    _arguments -C \\\n         '(--replace -r)'{--replace,-r}'[replace stamps with same id]'\n}\n\n_git-standup() {\n    _arguments -C \\\n        '-a[Specify the author of commits. Use \"all\" to specify all authors.]' \\\n        '-d[Show history since N days ago]' \\\n        '-D[Specify the date format displayed in commit history]' \\\n        '-f[Fetch commits before showing history]' \\\n        '-g[Display GPG signed info]' \\\n        '-h[Display help message]' \\\n        '-L[Enable the inclusion of symbolic links]' \\\n        '-m[The depth of recursive directory search]' \\\n        '-B[Display the commits in branch groups]'\n}\n\n_git-summary() {\n    _arguments '--full-path[show repository full path]'\n    _arguments '--line[summarize with lines rather than commits]'\n    _arguments '--dedup-by-email[remove duplicate users by the email address]'\n    _arguments '--no-merges[exclude merge commits]'\n    __gitex_commits\n}\n\n_git-undo(){\n    _arguments -C \\\n        '(--soft -s)'{--soft,-s}'[only rolls back the commit but changes remain un-staged]' \\\n        '(--hard -h)'{--hard,-h}'[wipes your commit(s)]'\n}\n\nzstyle -g existing_user_commands ':completion:*:*:git:*' user-commands\n\nzstyle ':completion:*:*:git:*' user-commands $existing_user_commands \\\n    alias:'define, search and show aliases' \\\n    abort:'abort current revert, merge, rebase, or cherry-pick process' \\\n    archive-file:'export the current head of the git repository to an archive' \\\n    authors:'generate authors report' \\\n    browse:'open repo website in browser' \\\n    browse-ci:'open repo CI page in browser' \\\n    bug:'create bug branch' \\\n    bulk:'run bulk commands' \\\n    brv:'list branches sorted by their last commit date'\\\n    changelog:'generate a changelog report' \\\n    chore:'create chore branch' \\\n    clear-soft:'soft clean up a repository' \\\n    clear:'rigorously clean up a repository' \\\n    coauthor:'add a co-author to the last commit' \\\n    commits-since:'show commit logs since some date' \\\n    continue:'continue current revert, merge, rebase, or cherry-pick process' \\\n    contrib:'show user contributions' \\\n    count:'show commit count' \\\n    create-branch:'create branches' \\\n    delete-branch:'delete branches' \\\n    delete-merged-branches:'delete merged branches' \\\n    delete-squashed-branches:'delete squashed branches' \\\n    delete-submodule:'delete submodules' \\\n    delete-tag:'delete tags' \\\n    delta:'lists changed files' \\\n    effort:'show effort statistics on file(s)' \\\n    extras:'awesome git utilities' \\\n    feature:'create/merge feature branch' \\\n    force-clone:'overwrite local repositories with clone' \\\n    fork:'fork a repo on GitHub' \\\n    fresh-branch:'create fresh branches' \\\n    get:'clone a repository in a directory' \\\n    gh-pages:'create the GitHub pages branch' \\\n    graft:'merge and destroy a given branch' \\\n    guilt:'calculate change between two revisions' \\\n    ignore-io:'get sample gitignore file' \\\n    ignore:'add .gitignore patterns' \\\n    info:'returns information on current repository' \\\n    local-commits:'list local commits' \\\n    lock:'lock a file excluded from version control' \\\n    locked:'ls files that have been locked' \\\n    magic:'commits everything with a generated message' \\\n    merge-into:'merge one branch into another' \\\n    merge-repo:'merge two repo histories' \\\n    missing:'show commits missing from another branch' \\\n    mr:'checks out a merge request locally' \\\n    obliterate:'rewrite past commits to remove some files' \\\n    paste:'send patches to pastebin sites' \\\n    pr:'checks out a pull request locally' \\\n    psykorebase:'rebase a branch with a merge commit' \\\n    pull-request:'create pull request to GitHub project' \\\n    reauthor:'replace the author and/or committer identities in commits and tags' \\\n    rebase-patch:'rebases a patch' \\\n    refactor:'create refactor branch' \\\n    release:'commit, tag and push changes to the repository' \\\n    rename-branch:'rename a branch' \\\n    rename-file:'rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity' \\\n    rename-tag:'rename a tag' \\\n    rename-remote:'rename a remote' \\\n    repl:'git read-eval-print-loop' \\\n    reset-file:'reset one file' \\\n    root:'show path of root' \\\n    scp:'copy files to ssh compatible `git-remote`' \\\n    sed:'replace patterns in git-controlled files' \\\n    setup:'set up a git repository' \\\n    show-merged-branches:'show merged branches' \\\n    show-tree:'show branch tree of commit history' \\\n    show-unmerged-branches:'show unmerged branches' \\\n    squash:'import changes from a branch' \\\n    stamp:'stamp the last commit message' \\\n    standup:'recall the commit history' \\\n    summary:'show repository summary' \\\n    sync:'sync local branch with remote branch' \\\n    touch:'touch and add file to the index' \\\n    undo:'remove latest commits' \\\n    unlock:'unlock a file excluded from version control' \\\n    utimes:'change files modification time to their last commit date' \\\n    unwip:'undo a WIP commit' \\\n    wip:'create a WIP commit'\n"
  },
  {
    "path": "etc/git-extras.fish",
    "content": "\nset __fish_git_extras_commands \\\n    \"alias:Define, search and show aliases\" \\\n    \"archive-file:Export the current HEAD of the git repository to an archive\" \\\n    \"authors:Generate authors report\" \\\n    \"browse:View the web page for the current repository\" \\\n    \"browse-ci:View the CI page for the current repository\" \\\n    \"brv:List branches sorted by their last commit date\" \\\n    \"bulk:Run git commands on multiple repositories\" \\\n    \"changelog:Generate a changelog report\" \\\n    \"clear-soft:Soft clean up a repository\" \\\n    \"clear:Rigorously clean up a repository\" \\\n    \"coauthor:Add a co-author to the last commit\" \\\n    \"commits-since:Show commit logs since some date\" \\\n    \"contrib:Show user's contributions\" \\\n    \"count:Show commit count\" \\\n    \"cp:Copy a file keeping its history\" \\\n    \"create-branch:Create branches\" \\\n    \"delete-branch:Delete branches\" \\\n    \"delete-merged-branches:Delete merged branches\" \\\n    \"delete-squashed-branches:Delete squashed branches\" \\\n    \"delete-submodule:Delete submodules\" \\\n    \"delete-tag:Delete tags\" \\\n    \"delta:Lists changed files\" \\\n    \"effort:Show effort statistics on file(s)\" \\\n    \"feature:Create/Merge feature branch\" \\\n    \"force-clone:overwrite local repositories with clone\" \\\n    \"fork:Fork a repo on github\" \\\n    \"fresh-branch:Create fresh branches\" \\\n    \"get:Clone a repository in a directory\" \\\n    \"gh-pages:Create the GitHub Pages branch\" \\\n    \"graft:Merge and destroy a given branch\" \\\n    \"guilt:calculate change between two revisions\" \\\n    \"ignore-io:Get sample gitignore file\" \\\n    \"ignore:Add .gitignore patterns\" \\\n    \"info:Returns information on current repository\" \\\n    \"local-commits:List local commits\" \\\n    \"lock:Lock a file excluded from version control\" \\\n    \"locked:ls files that have been locked\" \\\n    \"merge-into:Merge one branch into another\" \\\n    \"merge-repo:Merge two repo histories\" \\\n    \"missing:Show commits missing from another branch\" \\\n    \"mr:Checks out a merge request locally\" \\\n    \"obliterate:rewrite past commits to remove some files\" \\\n    \"paste:Send patches to pastebin for chat conversations\" \\\n    \"pr:Checks out a pull request locally\" \\\n    \"psykorebase:Rebase a branch with a merge commit\" \\\n    \"pull-request:Create pull request for GitHub project\" \\\n    \"reauthor:Rewrite history to change author's identity\" \\\n    \"rebase-patch:Rebases a patch\" \\\n    \"release:Commit, tag and push changes to the repository\" \\\n    \"rename-branch:rename local branch and push to remote\" \\\n    \"rename-file:rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity\" \\\n    \"rename-remote:Rename a remote\" \\\n    \"rename-tag:Rename a tag\" \\\n    \"repl:git read-eval-print-loop\" \\\n    \"reset-file:Reset one file\" \\\n    \"root:show path of root\" \\\n    \"scp:Copy files to SSH compatible git-remote\" \\\n    \"sed:replace patterns in git-controlled files\" \\\n    \"setup:Set up a git repository\" \\\n    \"show-merged-branches:Show merged branches\" \\\n    \"show-tree:show branch tree of commit history\" \\\n    \"show-unmerged-branches:Show unmerged branches\" \\\n    \"squash:Import changes from a branch\" \\\n    \"stamp:Stamp the last commit message\" \\\n    \"standup:Recall the commit history\" \\\n    \"summary:Show repository summary\" \\\n    \"sync:Sync local branch with remote branch\" \\\n    \"touch:Touch and add file to the index\" \\\n    \"undo:Remove latest commits\" \\\n    \"unlock:Unlock a file excluded from version control\"\n\n# completion for git-extras itself\ncomplete -c git -f -n __fish_git_needs_command -a extras -d 'GIT utilities: repo summary, repl, changelog population, and more'\ncomplete -c git -f -n '__fish_git_using_command extras' -s h -l help -d 'Show the help message, can be used for any git-extras commands'\ncomplete -c git -f -n '__fish_git_using_command extras' -s v -l version -d 'Show git-extras version number'\ncomplete -c git -f -n '__fish_git_using_command extras; and not contains -- update (commandline -opc)' -a update -d 'Self update'\n\n# completion for git-extras provided commands\nset __fish_git_extras_commands (printf -- '%s\\n' $__fish_git_extras_commands | sed 's/:/\\textras:/' | string collect | string escape)\ncomplete -c git -n __fish_git_needs_command -a \"$__fish_git_extras_commands\"\n# authors\ncomplete -c git -f -n '__fish_git_using_command authors' -s l -l list -d 'show authors'\ncomplete -c git -f -n '__fish_git_using_command authors' -l no-email -d 'without email'\n# brv\ncomplete -c git -f -n '__fish_git_using_command brv' -s r -l reverse -d 'reverse the sort order'\n# bulk\ncomplete -c git -n '__fish_git_using_command bulk' -s a -d 'Run a git command on all workspaces and their repositories'\ncomplete -c git -n '__fish_git_using_command bulk' -s g -d 'Ask the user for confirmation on every execution'\ncomplete -c git -x -n '__fish_git_using_command bulk' -s w -d 'Run on specified workspace'\ncomplete -c git -x -n '__fish_git_using_command bulk' -l addworkspace -d 'Register a workspace for builk operations'\ncomplete -c git -x -n '__fish_git_using_command bulk; and contains addworkspace (commandline -opc)' -l addworkspace -d 'the URL or file with URLs to be added'\ncomplete -c git -x -n '__fish_git_using_command bulk' -l removeworkspace -d 'Remove the workspace with the logical name <ws-name >'\ncomplete -c git -x -n '__fish_git_using_command bulk' -l addcurrent -d 'Add the current directory as a workspace'\ncomplete -c git -x -n '__fish_git_using_command bulk' -l purge -d 'Removes all defined repository locations'\ncomplete -c git -x -n '__fish_git_using_command bulk' -l listall -d 'List all registered repositories'\n# changelog\ncomplete -c git -f -n '__fish_git_using_command changelog' -s a -l all -d 'Retrieve all commits'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s l -l list -d 'Show commits in list format (without titles, dates)'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s t -l tag -d 'Specify a tag label to use for most-recent (untagged) commits'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s f -l final-tag -d 'When specifying a range, the newest tag at which point commit retrieval will end'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s s -l start-tag -d 'When specifying a range, the oldest tag to retrieve commits from'\ncomplete -c git -f -n '__fish_git_using_command changelog' -l start-commit -d 'Like the --start-tag but specify the oldest commit instead of tag'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s n -l no-merges -d 'Filters out merge commits (commits with more than 1 parent) from generated changelog'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s m -l merges-only -d 'Uses only merge commits (commits with more than 1 parent) for generated changelog'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s p -l prune-old -d 'Replace existing changelog entirely with newly generated content'\ncomplete -c git -f -n '__fish_git_using_command changelog' -s x -l stdout -d 'Write output to stdout instead of to a new changelog file'\n# coauthor\nfunction __fish_git_arg_number -a number\n    set -l cmd (commandline -opc)\n    test (count $cmd) -eq $number\nend\nfunction __fish_git_extra_coauthor_name\n    for line in (git authors --list)\n        printf '%s\\n' $line | string replace --regex ' <.*' ''\n    end\nend\nfunction __fish_git_extra_coauthor_email\n    set -l cmd (commandline -opc)\n    # name provided in the previous positional argument\n    set -l name $cmd[3]\n\n    for line in (git authors --list)\n        set -l loop_name (printf '%s\\n' $line | string replace --regex ' <.*' '')\n\n        if test \"$name\" = \"$loop_name\"\n            printf '%s\\n' $line | string replace --regex '.*?<' '' | string replace --regex '>.*?' ''\n        end\n    end\nend\ncomplete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 2' -a '(__fish_git_extra_coauthor_name)'\ncomplete -c git -f -n '__fish_git_using_command coauthor; and __fish_git_arg_number 3' -a '(__fish_git_extra_coauthor_email)'\n# commits-since\ncomplete -c git -f -n '__fish_git_using_command commits-since' -s r -l ref -d 'show commits since ref'\n# count\ncomplete -c git -f -n '__fish_git_using_command count' -l all -d 'detailed commit count'\n# create-branch\ncomplete -c git -x -n '__fish_git_using_command create-branch' -s r -l remote -a '(__fish_git_unique_remote_branches)' -d 'setup remote tracking branch'\n# delete-branch\ncomplete -c git -x -n '__fish_git_using_command delete-branch' -a '(__fish_git_branches)' -d 'branch to delete'\n# delete-squashed-branches\ncomplete -c git -x -n '__fish_git_using_command delete-squashed-branches' -a '(__fish_git_branches)' -d 'branch to target for squashed merges'\n# delete-submodule\ncomplete -c git -x -n \"__fish_git_using_command delete-submodule\" -a \"(__fish_git submodule status 2>/dev/null | string trim | cut -d ' ' -f 2)\" -d 'submodule to delete'\n# delete-tag\ncomplete -c git -x -n \"__fish_git_using_command delete-tag\" -a '(__fish_git for-each-ref --format=\"%(refname)\" refs/tags 2>/dev/null)' -d 'tag to delete'\n# effort\ncomplete -c git -f -n '__fish_git_using_command effort' -l above -d 'ignore file with less than x commits'\n# feature\ncomplete -c git -x -n '__fish_git_using_command feature' -s a -l alias -d 'use branch_prefix instead of feature'\ncomplete -c git -f -n '__fish_git_using_command feature; and not contains -- finish (commandline -opc)' -a finish -d 'merge and delete the feature branch'\ncomplete -c git -f -n '__fish_git_using_command feature; and contains -- finish (commandline -opc)' -l squash -d 'Run a squash merge'\ncomplete -c git -x -n '__fish_git_using_command feature; and contains -- finish (commandline -opc)' -a '(__fish_git for-each-ref --format=\"%(refname)\" 2>/dev/null | grep \"refs/heads/feature\")' -d 'name of feature branch'\ncomplete -c git -x -n '__fish_git_using_command feature; and not contains -- finish (commandline -opc)' -s r -l remote -a '(__fish_git_unique_remote_branches)' -d 'Setup a remote tracking branch'\n# graft\ncomplete -c git -x -n '__fish_git_using_command graft' -s r -l remote -a '(__fish_git_branches)' -d src-branch-name\ncomplete -c git -x -n '__fish_git_using_command graft' -s r -l remote -a '(__fish_git_branches)' -d dest-branch-name\n# guilt\ncomplete -c git -f -n '__fish_git_using_command guilt' -s w -l ignore-whitespace -d 'ignore whitespace only changes'\ncomplete -c git -f -n '__fish_git_using_command guilt' -s e -l email -d 'display author emails instead of names'\ncomplete -c git -f -n '__fish_git_using_command guilt' -s d -l debug -d 'output debug information'\ncomplete -c git -f -n '__fish_git_using_command guilt' -s h -d 'output usage information'\n# ignore\ncomplete -c git -f -n '__fish_git_using_command ignore' -s l -l local -d 'show local gitignore'\ncomplete -c git -f -n '__fish_git_using_command ignore' -s g -l global -d 'show global gitignore'\ncomplete -c git -f -n '__fish_git_using_command ignore' -s p -l private -d 'show repo gitignore'\n# ignore-io\nfunction __fish_git_extra_get_ignore_io_types\n    # we will first remove every tab spaces, and then append `\\t` at the end to remove the default description\n    git ignore-io -l | string replace -r --all -- \"\\t+\" \"\\n\" | string replace -r -- \"\\$\" \"\\t\"\nend\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -a '(__fish_git_extra_get_ignore_io_types)'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s a -l append -a '(__fish_git_extra_get_ignore_io_types)' -d 'append .gitignore'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s r -l replace -a '(__fish_git_extra_get_ignore_io_types)' -d 'replace .gitignore'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s l -l list-in-table -d 'print available types in table format'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s L -l list-alphabetically -d 'print available types in alphabetical order'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s s -l search -d 'search word in available types'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s t -l show-update-time -d 'Show the last modified time of ~/.gi_list'\ncomplete -c git -x -n '__fish_git_using_command ignore-io' -s u -l update -d 'Update ~/.gi_list'\n# merge-into\ncomplete -c git -n '__fish_git_using_command merge-into' -l ff-only -d 'merge only fast-forward'\ncomplete -c git -x -n '__fish_git_using_command merge-into' -a '(__fish_git_branches)'\n# missing\ncomplete -c git -x -n '__fish_git_using_command missing' -a '(__fish_git_branches)'\n# rename-file\ncomplete -c git -f -n '__fish_git_using_command rename-file' -s h -l help -d 'Show usage information'\n# squash\ncomplete -c git -x -n '__fish_git_using_command squash' -a '(__fish_git_branches)'\ncomplete -c git -x -n '__fish_git_using_command squash' -l squash-msg -d 'commit with the squashed commit messages'\n# stamp\ncomplete -c git -x -n '__fish_git_using_command stamp' -s r -l replace -d 'replace stamps with same id'\n# standup\ncomplete -c git -x -n '__fish_git_using_command standup' -s a -d 'Specify the author of commits. Use all to specify all authors'\ncomplete -c git -x -n '__fish_git_using_command standup' -s m -d 'The depth of recursive directory search'\ncomplete -c git -x -n '__fish_git_using_command standup' -s d -d 'Show history since N days ago'\ncomplete -c git -x -n '__fish_git_using_command standup' -s D -d 'Specify the date format displayed in commit history'\ncomplete -c git -n '__fish_git_using_command standup' -s f -d 'Fetch commits before showing history'\ncomplete -c git -n '__fish_git_using_command standup' -s g -d 'Display GPG signed info'\ncomplete -c git -n '__fish_git_using_command standup' -s h -l help -d 'Display help message'\ncomplete -c git -n '__fish_git_using_command standup' -s L -d 'Enable the inclusion of symbolic links'\ncomplete -c git -n '__fish_git_using_command standup' -s B -d 'Display the commits in branch group'\ncomplete -c git -x -n '__fish_git_using_command standup' -s n -d 'Limit the number of commits displayed per group'\n# summary\ncomplete -c git -n '__fish_git_using_command summary' -l line -d 'summarize with lines rather than commits'\ncomplete -c git -n '__fish_git_using_command summary' -l dedup-by-email -d 'remove duplicate users by the email address'\ncomplete -c git -n '__fish_git_using_command summary' -l no-merges -d 'exclude merge commits'\n# release\ncomplete -c git -x -n '__fish_git_using_command release' -s c -d 'Generates/populates the changelog with all commit message since the last tag'\ncomplete -c git -x -n '__fish_git_using_command release' -s r -d 'The remote repository that is destination of a push operation'\ncomplete -c git -x -n '__fish_git_using_command release' -s m -d 'use the custom commit information instead of the default message'\ncomplete -c git -x -n '__fish_git_using_command release' -s s -d 'Create a signed and annotated tag'\ncomplete -c git -x -n '__fish_git_using_command release' -s u -d 'Create a tag, annotated and signed with the given key'\ncomplete -c git -x -n '__fish_git_using_command release' -l semver -d 'If the latest tag matches semver format, increase part of it as the new release tag'\ncomplete -c git -x -n '__fish_git_using_command release' -l no-empty-commit -d 'Avoid creating empty commit if nothing could be committed'\n# undo\ncomplete -c git -x -n '__fish_git_using_command undo' -s s -l soft -d 'only rolls back the commit but changes remain un-staged'\ncomplete -c git -x -n '__fish_git_using_command undo' -s h -l hard -d 'wipes your commit(s)'\n"
  },
  {
    "path": "helper/git-extra-utility",
    "content": "# put all utility functions here\n\n# make a temporary file\ngit_extra_mktemp() {\n    mktemp -t \"$(basename \"$0\")\".XXXXXXX\n}\n\ngit_extra_default_branch() {\n    local extras_default_branch init_default_branch\n    extras_default_branch=$(git config --get git-extras.default-branch)\n    init_default_branch=$(git config --get init.defaultBranch)\n    if [ -n \"$extras_default_branch\" ]; then\n        echo \"$extras_default_branch\"\n    elif [ -n \"$init_default_branch\" ]; then\n        echo \"$init_default_branch\"\n    else\n        echo \"main\"\n    fi\n}\n"
  },
  {
    "path": "helper/has-git-commit",
    "content": "#\n# check whether current directory contains any git commit\n#\n\nhas_git_commit() {\n  git rev-parse --short HEAD > /dev/null 2>&1\n  result=$?\n  if test $result != 0; then\n    >&2 echo 'Not git commit found!'\n    exit $result\n  fi\n}\n\nhas_git_commit\n"
  },
  {
    "path": "helper/is-git-repo",
    "content": "#\n# check whether current directory is inside a git repository\n#\n\nis_git_repo() {\n  git rev-parse --show-toplevel > /dev/null 2>&1\n  result=$?\n  if test $result != 0; then\n    >&2 echo 'Not a git repo!'\n    exit $result\n  fi\n}\n\nis_git_repo\n"
  },
  {
    "path": "helper/reset-env",
    "content": "# reset environment variables that could interfere with normal usage\nunset -v GREP_OPTIONS\n"
  },
  {
    "path": "install.cmd",
    "content": "@ECHO OFF\n:: don't leak env variables into the calling interpreter...\nsetlocal\n:: better defaults for dealing with quotes...\n:: You need to escape ! afterwards with ^^! or \"^!\"\nSETLOCAL enabledelayedexpansion\n\n:: A comment on quotes around file path variables:\n:: only add quotes around the variable when you use the variable\n:: as a file path (exists, type, pipe,...) and the parenthesis of a\n:: for, not when used as a string (-> setting variables)\n\n:: more does not work if the codepage is set to unicode 65001\nfor /F \"tokens=*\" %%F in ('chcp') do (\n    for %%A in (%%F) do (set _last=%%A)\n)\nSET CP=%_last:~0%\nif \"!CP:~-1!\"==\".\" (\n    SET CP=!CP:~0,-1!\n)\nchcp 850 > NUL\n:: echo %CP%\n\n:: not so sane default...\nSET PREFIX=C:\\SCM\\PortableGit\\mingw64\n\n:: find a git.exe in path and use that as a default dir\nwhere /Q git.exe\nif errorlevel 1 goto :defaultpath\n\nfor /F \"delims=\" %%F in ('where git.exe') do (\n    set bindir=%%~dpF\n    rem break after the first, so that we get the first in path\n    goto :break\n)\ngoto :defaultpath\n\n:break\nrem remove the last slash\nSET bindir=%bindir:~0,-1%\nfor %%G in (\"%bindir%\") do set installdir=%%~dpG\nset PREFIX=%installdir%mingw64\ngoto :foundprefix\n\n:defaultpath\n:: default for Git for Windows 2.x\nif exist \"%ProgramFiles%\\Git\" (\n    set PREFIX=%ProgramFiles%\\Git\\mingw64\n)\n\n:foundprefix\n:: overwrite with whatever the user supplied...\nIF NOT \"%~1\"==\"\" (\n    REM make it easier for the user to specify a prefix:\n    REM just supplying the git dir is enough...\n    if exist \"%~1\\mingw64\" (\n        set PREFIX=%~1\\mingw64\n    ) else (\n        echo Using git install path \"%~1\" as PREFIX, please make sure it's really a\n        echo path to the mingw64 directory...\n        echo.\n        SET PREFIX=%~1\n    )\n)\n:: remove a trailing slash, but only after removing quotes...\nset PREFIX=!PREFIX:\"=!\nIF %PREFIX:~-1%==\\ SET PREFIX=%PREFIX:~0,-1%\n\nfor %%H in (\"%PREFIX%\") do set GIT_INSTALL_DIR=%%~dpH\n\nset GIT_INSTALL_DIR=!GIT_INSTALL_DIR:\"=!\nIF %GIT_INSTALL_DIR:~-1%==\\ SET GIT_INSTALL_DIR=%GIT_INSTALL_DIR:~0,-1%\n\nif not exist \"%GIT_INSTALL_DIR%\\mingw64\" (\n    echo No mingw64 folder found in %GIT_INSTALL_DIR%.\n    echo.\n    echo Please supply a proper \"Git for Windows 2.x\" install path:\n    echo \"install.cmd c:\\[git-install-path]\"\n    set ERROR=1\n    goto :exit\n)\n\necho Installing to %PREFIX%\nSET HTMLDIR=%PREFIX%\\share\\doc\\git-doc\nSET GITEXTRAS=%~dp0\n\nIF NOT EXIST \"%PREFIX%\\bin\" MKDIR \"%PREFIX%\\bin\"\n\n:: Check that we can install into that dir or need admin rights...\nset _testfile=%PREFIX%\\bin\\testfile_to_check_if_dir_is_writeable-577423947123.~\ncopy NUL \"%_testfile%\" >NUL 2>&1\nIF EXIST \"%_testfile%\" (\n    set IS_WRITEABLE=yes\n    del \"%_testfile%\"\n) else (\n    set IS_WRITEABLE=no\n)\nif \"%IS_WRITEABLE%\"==\"no\" (\n    echo.\n    echo Directory for binaries [\"%PREFIX%\\bin\"] is not writeable by install.cmd.\n    echo.\n    echo You probably need to run install.cmd from an admin prompt.\n    set ERROR=1\n    goto :exit\n)\n\nFOR /F \"eol=# delims=\" %%A in (not_need_git_repo) DO (\n    SET COMMANDS_WITHOUT_REPO=!COMMANDS_WITHOUT_REPO! %%A\n)\n\necho Installing binaries...\nFOR /R \"%GITEXTRAS%\\bin\" %%i in (*.*) DO (\n    IF \"%DEBUG%\"==\"true\" ( ECHO \"Writing File: %PREFIX%\\bin\\%%~ni\" )\n\n    ECHO #^^!/usr/bin/env bash > \"%PREFIX%\\bin\\%%~ni\"\n    TYPE \"%GITEXTRAS%\\helper\\reset-env\" >> \"%PREFIX%\\bin\\%%~ni\"\n    TYPE \"%GITEXTRAS%\\helper\\git-extra-utility\" >> \"%PREFIX%\\bin\\%%~ni\"\n    TYPE \"%GITEXTRAS%\\helper\\is-git-repo\" >> \"%PREFIX%\\bin\\%%~ni\"\n    \n    REM Added /E option for installation fix on Windows 10.0.17134 and higher\n    MORE /E +2 \"%GITEXTRAS%\\bin\\%%~ni\" >> \"%PREFIX%\\bin\\%%~ni\"\n)\n\nFOR %%i in (%COMMANDS_WITHOUT_REPO%) DO (\n    IF \"%DEBUG%\"==\"true\" ( ECHO \"Writing File: %PREFIX%\\bin\\%%i\" )\n\n    ECHO #^^!/usr/bin/env bash > \"%PREFIX%\\bin\\%%i\"\n    TYPE \"%GITEXTRAS%\\helper\\reset-env\" >> \"%PREFIX%\\bin\\%%i\"\n    TYPE \"%GITEXTRAS%\\helper\\git-extra-utility\" >> \"%PREFIX%\\bin\\%%i\"\n    \n    REM Added /E option for installation fix on Windows 10.0.17134 and higher\n    MORE /E +2 \"%GITEXTRAS%\\bin\\%%i\" >> \"%PREFIX%\\bin\\%%i\"\n)\n\necho Installing man pages...\nset _QUIET=/NP /NFL /NDL /NJS /NJH\nROBOCOPY %_QUIET% /IS \"%GITEXTRAS%\\man\" \"%HTMLDIR%\" *.html\nIF %ERRORLEVEL% GTR 7 (\n    echo Not all html docs could be copied to \"%GITEXTRAS%\\man\".\n    echo.\n    echo You probably need to run the install.cmd script from an admin prompt.\n    set ERROR=1\n    goto :exit\n)\necho done\n\nif not exist \"%GIT_INSTALL_DIR%\\usr\\bin\\column.exe\" (\n    where /Q column.exe\n    if errorlevel 1 (\n        echo.\n        echo column.exe is missing: Not in \"%GIT_INSTALL_DIR%\\usr\\bin\" or in PATH!\n        echo.\n        echo \"git summary\", \"git summary-line\" and \"git ignore-io\" do not work without.\n        echo If you need these commands, please install Git for Windows > 2.7.0.\n        echo.\n    )\n)\n\n\n:exit\n@chcp %CP% > NUL\n@endlocal enabledelayedexpansion\n@endlocal\n@exit /b %ERROR%\n"
  },
  {
    "path": "install.sh",
    "content": "#!/usr/bin/env bash\n\nmake_install() {\n    if [ -n \"$PREFIX\" ]\n    then\n        PREFIX=\"$PREFIX\" make install\n    else\n        sudo make install\n    fi\n}\n\ndir=$(mktemp -t -d git-extras-install.XXXXXXXXXX) \\\n    && cd \"$dir\" \\\n    && echo \"Setting up 'git-extras'....\" \\\n    && git clone https://github.com/tj/git-extras.git &> /dev/null \\\n    && cd git-extras \\\n    && git checkout \\\n        $(git describe --tags $(git rev-list --tags --max-count=1)) \\\n        &> /dev/null \\\n    && make_install \\\n    && rm -rf \"$dir\"\n\n"
  },
  {
    "path": "man/Readme.md",
    "content": "How to generate documentation:\n================================\n\n## DESCRIPTION\n\nTo generate documentation:\n\n1) Start by filling out the 'man-template.md'\n\n2) Then install a program ronn. [Get ronn from github.](https://github.com/rtomayko/ronn)\n\n3) Run make:\n\n(Assumed you are under `./man` when running the command below)\n\n```\n$ make -C .. man/git-<command>.{1,html}\n```\n\n4)  Remember, we use the following naming convention for files:\n\n```\ngit-<command>.html\ngit-<command>.1\ngit-<command>.md\n```\n\n## AUTHOR\n\nWritten by Leila Muhtasib &lt;<muhtasib@gmail.com>&gt;\nShell Script by Nick Lombard &lt;<github@jigsoft.co.za>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-abort.1",
    "content": ".\\\" generated with Ronn-NG/v0.8.0\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.8.0\n.TH \"GIT\\-ABORT\" \"1\" \"August 2020\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-abort\\fR \\- Abort current git operation\n.SH \"SYNOPSIS\"\n\\fBgit\\-abort\\fR\n.SH \"DESCRIPTION\"\nAbort current git revert, rebase, merge or cherry\\-pick process\\.\n.SH \"OPTIONS\"\nThere are no options, it just aborts current operation\\.\n.SH \"EXAMPLES\"\n\\fBgit\\-abort\\fR\n.SH \"AUTHOR\"\nWritten by Przemek Kitszel <\\fI\\%mailto:pkitszel@gmail\\.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fI\\%https://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fI\\%https://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-abort.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.8.0 (http://github.com/apjanke/ronn-ng/tree/0.8.0)'>\n  <title>git-abort(1) - Abort current git operation</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-abort(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-abort(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-abort</code> - <span class=\"man-whatis\">Abort current git operation</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-abort</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Abort current git revert, rebase, merge or cherry-pick process.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  There are no options, it just aborts current operation.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  <code>git-abort</code></p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Przemek Kitszel &lt;<a href=\"mailto:pkitszel@gmail.com\" data-bare-link=\"true\">pkitszel@gmail.com</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2020</li>\n    <li class='tr'>git-abort(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-abort.md",
    "content": "git-abort(1) -- Abort current git operation\n================================\n\n## SYNOPSIS\n\n`git-abort`\n\n## DESCRIPTION\n\n  Abort current git revert, rebase, merge or cherry-pick process.\n\n## OPTIONS\n\n  There are no options, it just aborts current operation.\n\n## EXAMPLES\n\n  `git-abort`\n\n## AUTHOR\n\nWritten by Przemek Kitszel &lt;<pkitszel@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-alias.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-ALIAS\" \"1\" \"September 2024\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-alias\\fR \\- Define, search and show aliases\n.SH \"SYNOPSIS\"\n\\fBgit\\-alias\\fR\n.br\n\\fBgit\\-alias\\fR <search\\-pattern>\n.br\n\\fBgit\\-alias\\fR <alias\\-name> <command>\n.br\n\\fBgit\\-alias\\fR [\\-\\-global]\n.br\n\\fBgit\\-alias\\fR [\\-\\-local]\n.br\n\\fBgit\\-alias\\fR [\\-\\-global] <search\\-pattern>\n.br\n\\fBgit\\-alias\\fR [\\-\\-local] <search\\-pattern>\n.br\n\\fBgit\\-alias\\fR [\\-\\-global] <alias\\-name> <command>\n.br\n\\fBgit\\-alias\\fR [\\-\\-local] <alias\\-name> <command>\n.br\n.SH \"DESCRIPTION\"\nList all aliases, show one alias, or set one (global or local) alias\\.\n.SH \"OPTIONS\"\n\\-\\-global\n.P\nShow or create alias in the system config\n.P\n\\-\\-local\n.P\nShow or create alias in the repository config\n.P\n<search\\-pattern>\n.P\nThe pattern used to search aliases\\.\n.P\n<alias\\-name>\n.P\nThe name of the alias to create\\.\n.P\n<command>\n.P\nThe command for which you are creating an alias\\.\n.SH \"EXAMPLES\"\nDefining a new alias:\n.IP \"\" 4\n.nf\n$ git alias last \"cat\\-file commit HEAD\"\n.fi\n.IP \"\" 0\n.P\nProviding only one argument, \\fBgit\\-alias\\fR searches for aliases matching the given value:\n.IP \"\" 4\n.nf\n$ git alias ^la\nlast = cat\\-file commit HEAD\n.fi\n.IP \"\" 0\n.P\n\\fBgit\\-alias\\fR will show all aliases if no argument is given:\n.IP \"\" 4\n.nf\n$ git alias\ns = status\namend = commit \\-\\-amend\nrank = shortlog \\-sn \\-\\-no\\-merges\nwhatis = show \\-s \\-\\-pretty='tformat:%h (%s, %ad)' \\-\\-date=short\nwhois = !sh \\-c 'git log \\-i \\-1 \\-\\-pretty=\"format:%an <%ae>\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Jonhnny Weslley <\\fIjw@jonhnnyweslley\\.net\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-alias.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-alias(1) - Define, search and show aliases</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-alias(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-alias(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-alias</code> - <span class=\"man-whatis\">Define, search and show aliases</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-alias</code> <br>\n<code>git-alias</code> &lt;search-pattern&gt; <br>\n<code>git-alias</code> &lt;alias-name&gt; &lt;command&gt; <br>\n<code>git-alias</code> [--global] <br>\n<code>git-alias</code> [--local] <br>\n<code>git-alias</code> [--global] &lt;search-pattern&gt; <br>\n<code>git-alias</code> [--local] &lt;search-pattern&gt; <br>\n<code>git-alias</code> [--global] &lt;alias-name&gt; &lt;command&gt; <br>\n<code>git-alias</code> [--local] &lt;alias-name&gt; &lt;command&gt; <br></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>List all aliases, show one alias, or set one (global or local) alias.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>--global</p>\n\n<p>Show or create alias in the system config</p>\n\n<p>--local</p>\n\n<p>Show or create alias in the repository config</p>\n\n<p>&lt;search-pattern&gt;</p>\n\n<p>The pattern used to search aliases.</p>\n\n<p>&lt;alias-name&gt;</p>\n\n<p>The name of the alias to create.</p>\n\n<p>&lt;command&gt;</p>\n\n<p>The command for which you are creating an alias.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Defining a new alias:</p>\n\n<pre><code>$ git alias last \"cat-file commit HEAD\"\n</code></pre>\n\n<p>Providing only one argument, <code>git-alias</code> searches for aliases matching the given value:</p>\n\n<pre><code>$ git alias ^la\nlast = cat-file commit HEAD\n</code></pre>\n\n<p><code>git-alias</code> will show all aliases if no argument is given:</p>\n\n<pre><code>$ git alias\ns = status\namend = commit --amend\nrank = shortlog -sn --no-merges\nwhatis = show -s --pretty='tformat:%h (%s, %ad)' --date=short\nwhois = !sh -c 'git log -i -1 --pretty=\"format:%an &lt;%ae&gt;\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jonhnny Weslley &lt;<a href=\"mailto:jw@jonhnnyweslley.net\" data-bare-link=\"true\">jw@jonhnnyweslley.net</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2024</li>\n    <li class='tr'>git-alias(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-alias.md",
    "content": "git-alias(1) -- Define, search and show aliases\n===============================================\n\n## SYNOPSIS\n\n`git-alias` <br>\n`git-alias` &lt;search-pattern&gt; <br>\n`git-alias` &lt;alias-name&gt; &lt;command&gt; <br>\n`git-alias` [--global] <br>\n`git-alias` [--local] <br>\n`git-alias` [--global] &lt;search-pattern&gt; <br>\n`git-alias` [--local] &lt;search-pattern&gt; <br>\n`git-alias` [--global] &lt;alias-name&gt; &lt;command&gt; <br>\n`git-alias` [--local] &lt;alias-name&gt; &lt;command&gt; <br>\n\n## DESCRIPTION\n\n  List all aliases, show one alias, or set one (global or local) alias.\n\n## OPTIONS\n\n  --global\n\n  Show or create alias in the system config\n\n  --local\n\n  Show or create alias in the repository config\n\n  &lt;search-pattern&gt;\n\n  The pattern used to search aliases.\n\n  &lt;alias-name&gt;\n\n  The name of the alias to create.\n\n  &lt;command&gt;\n\n  The command for which you are creating an alias.\n\n\n## EXAMPLES\n\n Defining a new alias:\n\n    $ git alias last \"cat-file commit HEAD\"\n\n Providing only one argument, `git-alias` searches for aliases matching the given value:\n\n    $ git alias ^la\n    last = cat-file commit HEAD\n\n `git-alias` will show all aliases if no argument is given:\n\n    $ git alias\n    s = status\n    amend = commit --amend\n    rank = shortlog -sn --no-merges\n    whatis = show -s --pretty='tformat:%h (%s, %ad)' --date=short\n    whois = !sh -c 'git log -i -1 --pretty=\"format:%an <%ae>\n\n## AUTHOR\n\nWritten by Jonhnny Weslley &lt;<jw@jonhnnyweslley.net>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-archive-file.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-ARCHIVE\\-FILE\" \"1\" \"May 2020\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-archive\\-file\\fR \\- Export the current HEAD of the git repository to an archive\n.SH \"SYNOPSIS\"\n\\fBgit\\-archive\\-file\\fR\n.SH \"DESCRIPTION\"\nExport the current HEAD of the repository into an archive with an identifiable and unique name\\.\n.SH \"OPTIONS\"\nThis command does not take any options\\.\n.SH \"EXAMPLES\"\nArchive naming conventions:\n.P\nOn any branch: \\fBgit\\-extras\\.1\\.7\\.0\\-110\\-gafefba7\\.branch\\-name\\.zip\\fR\n.P\nOn master branch: \\fBgit\\-extras\\.1\\.7\\.0\\-110\\-gafefba7\\.zip\\fR\n.P\nOn a detached HEAD (e\\.g\\. a tag): \\fBgit\\-extras\\.1\\.7\\.0\\.zip\\fR\n.P\nThe \\'/\\' and \\'\\e\\' in the branch name will be converted into \\'\\-\\'\\.\n.SH \"AUTHOR\"\nWritten by Philipp Klose <\\fIme@thehippo\\.de\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-archive-file.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-archive-file(1) - Export the current HEAD of the git repository to an archive</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-archive-file(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-archive-file(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-archive-file</code> - <span class=\"man-whatis\">Export the current HEAD of the git repository to an archive</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-archive-file</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Export the current HEAD of the repository into an archive with an identifiable and unique name.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>This command does not take any options.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Archive naming conventions:</p>\n\n<p>On any branch: <code>git-extras.1.7.0-110-gafefba7.branch-name.zip</code></p>\n\n<p>On master branch: <code>git-extras.1.7.0-110-gafefba7.zip</code></p>\n\n<p>On a detached HEAD (e.g. a tag): <code>git-extras.1.7.0.zip</code></p>\n\n<p>The '/' and '\\' in the branch name will be converted into '-'.</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Philipp Klose &lt;<a href=\"mailto:me@thehippo.de\" data-bare-link=\"true\">me@thehippo.de</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2020</li>\n    <li class='tr'>git-archive-file(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-archive-file.md",
    "content": "git-archive-file(1) -- Export the current HEAD of the git repository to an archive\n===============================================\n\n## SYNOPSIS\n\n`git-archive-file` \n\n## DESCRIPTION\n\nExport the current HEAD of the repository into an archive with an identifiable and unique name.\n\n## OPTIONS\n\nThis command does not take any options.\n\n\n## EXAMPLES\n\nArchive naming conventions:\n\nOn any branch: `git-extras.1.7.0-110-gafefba7.branch-name.zip`\n\nOn master branch: `git-extras.1.7.0-110-gafefba7.zip`\n\nOn a detached HEAD (e.g. a tag): `git-extras.1.7.0.zip`\n\nThe '/' and '\\\\' in the branch name will be converted into '-'.\n\n## AUTHOR\n\nWritten by Philipp Klose &lt;<me@thehippo.de>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-authors.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-AUTHORS\" \"1\" \"November 2023\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-authors\\fR \\- Generate authors report\n.SH \"SYNOPSIS\"\n\\fBgit\\-authors\\fR [\\-l, \\-\\-list] [\\-\\-no\\-email]\n.SH \"DESCRIPTION\"\n.TS\nallbox;\nPopulates the file matching _authors\tcontributors \\-i_ with the authors of commits, according to the number of commits per author\\.\n.TE\n.P\nSee the \"MAPPING AUTHORS\" section of \\fBgit\\-shortlog\\fR(1) to coalesce together commits by the same person\\.\n.SH \"OPTIONS\"\n\\-l, \\-\\-list\n.P\nShow authors\\.\n.P\n\\-\\-no\\-email\n.P\nDon\\'t show authors\\' email\\.\n.SH \"EXAMPLES\"\nUpdating AUTHORS file:\n.IP \"\" 4\n.nf\n$ git authors\n.fi\n.IP \"\" 0\n.P\nListing authors:\n.IP \"\" 4\n.nf\n$ git authors \\-\\-list\nTJ Holowaychuk <tj@vision\\-media\\.ca>\nhemanth\\.hm <hemanth\\.hm@gmail\\.com>\nJonhnny Weslley <jw@jonhnnyweslley\\.net>\nnickl\\- <github@jigsoft\\.co\\.za>\nLeila Muhtasib <muhtasib@gmail\\.com>\n.fi\n.IP \"\" 0\n.P\nListing authors without email:\n.IP \"\" 4\n.nf\n$ git authors \\-\\-list \\-\\-no\\-email\nTJ Holowaychuk\nhemanth\\.hm\nJonhnny Weslley\nnickl\\-\nLeila Muhtasib\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Titus Wormer <\\fItituswormer@gmail\\.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-authors.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-authors(1) - Generate authors report</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-authors(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-authors(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-authors</code> - <span class=\"man-whatis\">Generate authors report</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-authors</code> [-l, --list] [--no-email]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<table>\n  <tbody>\n    <tr>\n      <td>Populates the file matching _authors</td>\n      <td>contributors -i_ with the authors of commits, according to the number of commits per author.</td>\n    </tr>\n  </tbody>\n</table>\n\n<p>See the \"MAPPING AUTHORS\" section of <strong>git-shortlog</strong>(1) to coalesce together commits by the same person.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-l, --list</p>\n\n<p>Show authors.</p>\n\n<p>--no-email</p>\n\n<p>Don't show authors' email.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Updating AUTHORS file:</p>\n\n<pre><code>$ git authors\n</code></pre>\n\n<p>Listing authors:</p>\n\n<pre><code>$ git authors --list\nTJ Holowaychuk &lt;tj@vision-media.ca&gt;\nhemanth.hm &lt;hemanth.hm@gmail.com&gt;\nJonhnny Weslley &lt;jw@jonhnnyweslley.net&gt;\nnickl- &lt;github@jigsoft.co.za&gt;\nLeila Muhtasib &lt;muhtasib@gmail.com&gt;\n</code></pre>\n\n<p>Listing authors without email:</p>\n\n<pre><code>$ git authors --list --no-email\nTJ Holowaychuk\nhemanth.hm\nJonhnny Weslley\nnickl-\nLeila Muhtasib\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Titus Wormer &lt;<a href=\"mailto:tituswormer@gmail.com\" data-bare-link=\"true\">tituswormer@gmail.com</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>November 2023</li>\n    <li class='tr'>git-authors(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-authors.md",
    "content": "git-authors(1) -- Generate authors report\n=================================================\n\n## SYNOPSIS\n\n`git-authors` [-l, --list] [--no-email]\n\n## DESCRIPTION\n\n  Populates the file matching _authors|contributors -i_ with the authors of commits, according to the number of commits per author.\n\n  See the \"MAPPING AUTHORS\" section of **git-shortlog**(1) to coalesce together commits by the same person.\n\n## OPTIONS\n\n  -l, --list\n\n  Show authors.\n\n  --no-email\n\n  Don't show authors' email.\n\n## EXAMPLES\n\n  Updating AUTHORS file:\n\n    $ git authors\n\n  Listing authors:\n\n    $ git authors --list\n    TJ Holowaychuk <tj@vision-media.ca>\n    hemanth.hm <hemanth.hm@gmail.com>\n    Jonhnny Weslley <jw@jonhnnyweslley.net>\n    nickl- <github@jigsoft.co.za>\n    Leila Muhtasib <muhtasib@gmail.com>\n\n  Listing authors without email:\n\n    $ git authors --list --no-email\n    TJ Holowaychuk\n    hemanth.hm\n    Jonhnny Weslley\n    nickl-\n    Leila Muhtasib\n\n## AUTHOR\n\nWritten by Titus Wormer &lt;<tituswormer@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-browse-ci.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-BROWSE\\-CI\" \"1\" \"March 2022\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-browse\\-ci\\fR \\-\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-browse\\-ci\\fR [remote_name]\n.\n.SH \"DESCRIPTION\"\nOpens the current git repository CI page in your default web browser\\.\n.\n.SH \"OPTIONS\"\n<remote_name>\n.\n.P\nThe name of the remote you wish to browse to\\. Defaults to the first remote if not specified\\.\n.\n.SH \"EXAMPLES\"\n$ git browse\\-ci\n.\n.P\n$ git browse\\-ci upstream\n.\n.SH \"AUTHOR\"\nWritten by Peter Benjamin <\\fIhttps://github\\.com/pbnj\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-browse-ci.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-browse-ci(1) - &lt;View the web page for the current repository&gt;</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-browse-ci(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-browse-ci(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-browse-ci</code> - <span class=\"man-whatis\"><view the web page for current repository /></span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-browse-ci</code> [remote_name]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Opens the current git repository CI page in your default web browser.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;remote_name&gt;</p>\n\n<p>The name of the remote you wish to browse to. Defaults to\nthe first remote if not specified.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  $ git browse-ci</p>\n\n<p>  $ git browse-ci upstream</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Peter Benjamin &lt;<a href=\"https://github.com/pbnj\" data-bare-link=\"true\">https://github.com/pbnj</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>March 2022</li>\n    <li class='tr'>git-browse-ci(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-browse-ci.md",
    "content": "git-browse-ci(1) -- <View the web page for the current repository>\n================================\n\n## SYNOPSIS\n\n`git-browse-ci` [remote_name]\n\n## DESCRIPTION\n\nOpens the current git repository CI page in your default web browser.\n\n## OPTIONS\n\n&lt;remote_name&gt;\n\nThe name of the remote you wish to browse to. Defaults to\nthe first remote if not specified.\n\n## EXAMPLES\n\n  $ git browse-ci\n\n  $ git browse-ci upstream\n\n## AUTHOR\n\nWritten by Peter Benjamin &lt;<https://github.com/pbnj>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-browse.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-BROWSE\" \"1\" \"June 2022\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-browse\\fR \\-\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-browse\\fR [remote_name] [file_name] [line_1] [line_2]\n.\n.SH \"DESCRIPTION\"\nOpens the current git repository website in your default web browser\\.\n.\n.SH \"OPTIONS\"\n<remote_name>\n.\n.P\nThe name of the remote you wish to browse to\\. Defaults to the first remote if not specified\\.\n.\n.P\n<file_name>\n.\n.P\nThe name of the file you wish to browse to\\.\n.\n.P\n<line_1>\n.\n.P\nThe line number of the file you wish to browse to\\.\n.\n.P\n<line_2>\n.\n.P\nThe line range (from <line_1> to <line_2>) of the file you wish to browse to\\.\n.\n.SH \"EXAMPLES\"\n$ git browse\n.\n.P\n$ git browse upstream\n.\n.P\n$ git browse upstream bin/git\\-browse\n.\n.P\n$ git browse upstream bin/git\\-browse 42\n.\n.P\n$ git browse upstream bin/git\\-browse 1 42\n.\n.SH \"AUTHOR\"\nWritten by Mark Pitman <\\fIhttps://github\\.com/mapitman\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-browse.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-browse(1) - &lt;View the web page for the current repository&gt;</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-browse(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-browse(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-browse</code> - <span class=\"man-whatis\"><view the web page for current repository /></span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-browse</code> [remote_name] [file_name] [line_1] [line_2]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Opens the current git repository website in your default web browser.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;remote_name&gt;</p>\n\n<p>The name of the remote you wish to browse to. Defaults to\nthe first remote if not specified.</p>\n\n<p>&lt;file_name&gt;</p>\n\n<p>The name of the file you wish to browse to.</p>\n\n<p>&lt;line_1&gt;</p>\n\n<p>The line number of the file you wish to browse to.</p>\n\n<p>&lt;line_2&gt;</p>\n\n<p>The line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to\nbrowse to.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  $ git browse</p>\n\n<p>  $ git browse upstream</p>\n\n<p>  $ git browse upstream bin/git-browse</p>\n\n<p>  $ git browse upstream bin/git-browse 42</p>\n\n<p>  $ git browse upstream bin/git-browse 1 42</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Mark Pitman &lt;<a href=\"https://github.com/mapitman\" data-bare-link=\"true\">https://github.com/mapitman</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>June 2022</li>\n    <li class='tr'>git-browse(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-browse.md",
    "content": "git-browse(1) -- <View the web page for the current repository>\n================================\n\n## SYNOPSIS\n\n`git-browse` [remote_name] [file_name] [line_1] [line_2]\n\n## DESCRIPTION\n\nOpens the current git repository website in your default web browser.\n\n## OPTIONS\n\n&lt;remote_name&gt;\n\nThe name of the remote you wish to browse to. Defaults to\nthe first remote if not specified.\n\n&lt;file_name&gt;\n\nThe name of the file you wish to browse to.\n\n&lt;line_1&gt;\n\nThe line number of the file you wish to browse to.\n\n&lt;line_2&gt;\n\nThe line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to\nbrowse to.\n\n## EXAMPLES\n\n  $ git browse\n\n  $ git browse upstream\n\n  $ git browse upstream bin/git-browse\n\n  $ git browse upstream bin/git-browse 42\n\n  $ git browse upstream bin/git-browse 1 42\n\n## AUTHOR\n\nWritten by Mark Pitman &lt;<https://github.com/mapitman>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-brv.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-BRV\" \"1\" \"December 2023\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-brv\\fR \\- List branches sorted by their last commit date\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-brv\\fR [\\-r|\\-\\-reverse]\n.\n.SH \"DESCRIPTION\"\nPretty listing of branches sorted by the date of their last commit\\.\n.\n.SH \"OPTIONS\"\n\\-r | \\-\\-reverse\n.\n.P\nReverses the output to put the most recent branch at the bottom of the list\\. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt\\. This can be configured as the default by setting \\fBgit\\-extras\\.brv\\.reverse\\fR to true in your git options\\.\n.\n.SH \"EXAMPLES\"\nSimply run \\fBgit brv\\fR\n.\n.IP \"\" 4\n.\n.nf\n\n$ git brv\n2020\\-01\\-14 adds\\-git\\-brv fork/adds\\-git\\-brv 1ca0d76 Fixes #700: Adds git\\-brv\n2020\\-01\\-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git\\-sed\\-pathspec\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nTo display the rows in reverse order: \\fBgit brv \\-\\-reverse\\fR\n.\n.IP \"\" 4\n.\n.nf\n\n$ git brv \\-\\-reverse\n2020\\-01\\-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git\\-sed\\-pathspec\n2020\\-01\\-14 adds\\-git\\-brv fork/adds\\-git\\-brv 1ca0d76 Fixes #700: Adds git\\-brv\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Øsse <\\fIhttps://github\\.com/Osse\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-brv.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-brv(1) - List branches sorted by their last commit date</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-brv(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-brv(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-brv</code> - <span class=\"man-whatis\">List branches sorted by their last commit date</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-brv</code> [-r|--reverse]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Pretty listing of branches sorted by the date of their last commit.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -r | --reverse</p>\n\n<p>  Reverses the output to put the most recent branch at the bottom of the list. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt. This can be configured as the default by setting <code>git-extras.brv.reverse</code> to true in your git options.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Simply run <code>git brv</code></p>\n\n<pre><code>$ git brv\n2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n</code></pre>\n\n<p>  To display the rows in reverse order: <code>git brv --reverse</code></p>\n\n<pre><code>$ git brv --reverse\n2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Øsse &lt;<a href=\"https://github.com/Osse\" data-bare-link=\"true\">https://github.com/Osse</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>December 2023</li>\n    <li class='tr'>git-brv(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-brv.md",
    "content": "git-brv(1) -- List branches sorted by their last commit date\n========================================================\n\n## SYNOPSIS\n\n`git-brv` [-r|--reverse]\n\n## DESCRIPTION\n\n  Pretty listing of branches sorted by the date of their last commit.\n\n## OPTIONS\n\n  -r | --reverse\n\n  Reverses the output to put the most recent branch at the bottom of the list. This is useful when there are large amount of branches as the most recent branch is shown just above the next prompt. This can be configured as the default by setting `git-extras.brv.reverse` to true in your git options.\n\n## EXAMPLES\n\n  Simply run `git brv`\n\n    $ git brv\n    2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n    2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n\n  To display the rows in reverse order: `git brv --reverse`\n\n    $ git brv --reverse\n    2020-01-08 master       origin/master     265b03e Merge pull request #816 from spacewander/git-sed-pathspec\n    2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv\n\n## AUTHOR\n\nWritten by Øsse &lt;<https://github.com/Osse>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-bulk.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-BULK\" \"1\" \"February 2025\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-bulk\\fR \\- Run git commands on multiple repositories\n.SH \"SYNOPSIS\"\n\\fBgit\\-bulk\\fR [\\-g] [\\-\\-no\\-follow\\-symlinks] [\\-\\-no\\-follow\\-hidden] ([\\-a]|[\\-w\n.br\n\\fBgit\\-bulk\\fR \\-\\-addworkspace\n.br\n\\fBgit\\-bulk\\fR \\-\\-removeworkspace <ws\\-name>\n.br\n\\fBgit\\-bulk\\fR \\-\\-addcurrent <ws\\-name>\n.br\n\\fBgit\\-bulk\\fR \\-\\-purge\n.br\n\\fBgit\\-bulk\\fR \\-\\-listall\n.SH \"DESCRIPTION\"\ngit bulk adds convenient support for operations that you want to execute on multiple git repositories\\.\n.IP \"\\[ci]\" 4\nsimply register workspaces that contain multiple git repos in their directory structure\n.IP \"\\[ci]\" 4\nrun any git command on the repositories of the registered workspaces in one command to \\fBgit bulk\\fR\n.IP \"\\[ci]\" 4\nuse the \"guarded mode\" to check on each execution\n.IP \"\" 0\n.SH \"OPTIONS\"\n\\-a\n.P\nRun a git command on all workspaces and their repositories\\.\n.P\n\\-g\n.P\nAsk the user for confirmation on every execution\\.\n.P\n\\-\\-no\\-follow\\-symlinks\n.P\nDo not traverse symbolic links under the workspace when searching for git repositories\\.\n.P\n\\-\\-no\\-follow\\-hidden\n.P\nDo not traverse hidden (dotted) directories under the workspace when searching for git repositories\\.\n.P\n\\-w <ws\\-name>\n.P\nRun the git command on the specified workspace\\. The workspace must be registered\\.\n.P\n<git command>\n.P\nAny git Command you wish to execute on the repositories\\.\n.P\n\\-\\-addworkspace\n.P\nRegister a workspace for bulk operations\\. All repositories in the directories below <ws\\-root\\-directory> get registered under this workspace with the name <ws\\-name>\\. <ws\\-root\\-directory> must be absolute path\\.\n.P\nWith option '\\-\\-from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace\\. Suitable for the initial setup of a multi\\-repo project\\.\n.P\n\\-\\-removeworkspace <ws\\-name>\n.P\nRemove the workspace with the logical name <ws\\-name>\\.\n.P\n\\-\\-addcurrent <ws\\-name>\n.P\nAdds the current directory as workspace to git bulk operations\\. The workspace is referenced with its logical name <ws\\-name>\\.\n.P\ngit bulk \\-\\-purge\n.P\nRemoves all defined repository locations\\.\n.P\ngit bulk \\-\\-listall\n.P\nList all registered repositories\\.\n.SH \"EXAMPLES\"\n.nf\nRegister a workspace so that git bulk knows about it using an absolute path:\n\n$ git bulk \\-\\-addworkspace personal ~/workspaces/personal\n\nOr register a workspace using an environment variable pointing to an absolute path:\n\n$ git bulk \\-\\-addworkspace personal '$PERSONAL_WORKSPACE'\n\nUse option \\-\\-from in order to directly clone a repository or multiple repositories\n\n$ git bulk \\-\\-addworkspace personal ~/workspaces/personal \\-\\-from https://github\\.com/tj/git\\-extras\\.git\n$ git bulk \\-\\-addworkspace personal ~/workspaces/personal \\-\\-from ~/repositories\\.txt\n\nrepositories\\.txt\n\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\nhttps://host\\-of\\-git/repo\\-1\\.git\nhttps://host\\-of\\-git/repo\\-2\\.git\nhttps://host\\-of\\-git/repo\\-3\\.git\n\n\nRegister the current directory as a workspace to git bulk:\n\n$ git bulk \\-\\-addcurrent personal\n\nList all registered workspaces:\n\n$ git bulk \\-\\-listall\n\nRun a git command on the repositories of the current workspace:\n\n$ git bulk fetch\n\nRun a git command on the specified workspace and its repositories:\n\n$ git bulk \\-w personal fetch\n\nRun a git command but ask the user for confirmation on every execution (guarded mode):\n\n$ git bulk \\-g fetch\n\nRemove a registered workspace:\n\n$ git bulk \\-\\-removeworkspace personal\n\nRemove all registered workspaces:\n\n$ git bulk \\-\\-purge\n.fi\n.SH \"FILES\"\n.IP \"\\[ci]\" 4\n\\fB\\.gitconfig\\fR: Store the \\fBgit\\-bulk\\fR registered workspaces under the \\fBbulkworkspaces\\fR key\\.\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Niklas Schlimm <\\fIns103@hotmail\\.de\\fR>\n.SH \"REPORTING BUGS\"\n<https://github\\.com/nschlimm/git\\-bulk>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-bulk.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-bulk(1) - Run git commands on multiple repositories</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#FILES\">FILES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-bulk(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-bulk(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-bulk</code> - <span class=\"man-whatis\">Run git commands on multiple repositories</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-bulk</code> [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w <ws-name>]) <git command> </git></ws-name><br>\n<code>git-bulk</code> --addworkspace <ws-name> <ws-root-directory> (--from <url or file>) </url></ws-root-directory></ws-name><br>\n<code>git-bulk</code> --removeworkspace &lt;ws-name&gt; <br>\n<code>git-bulk</code> --addcurrent &lt;ws-name&gt; <br>\n<code>git-bulk</code> --purge <br>\n<code>git-bulk</code> --listall</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>git bulk adds convenient support for operations that you want to execute on multiple git repositories.</p>\n\n<ul>\n  <li>simply register workspaces that contain multiple git repos in their directory structure</li>\n  <li>run any git command on the repositories of the registered workspaces in one command to <code>git bulk</code>\n</li>\n  <li>use the \"guarded mode\" to check on each execution</li>\n</ul>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-a</p>\n\n<p>Run a git command on all workspaces and their repositories.</p>\n\n<p>-g</p>\n\n<p>Ask the user for confirmation on every execution.</p>\n\n<p>--no-follow-symlinks</p>\n\n<p>Do not traverse symbolic links under the workspace when searching for git repositories.</p>\n\n<p>--no-follow-hidden</p>\n\n<p>Do not traverse hidden (dotted) directories under the workspace when searching for git repositories.</p>\n\n<p>-w &lt;ws-name&gt;</p>\n\n<p>Run the git command on the specified workspace. The workspace must be registered.</p>\n\n<p>&lt;git command&gt;</p>\n\n<p>Any git Command you wish to execute on the repositories.</p>\n\n<p>--addworkspace <ws-name> <ws-root-directory> (--from <url or file></url></ws-root-directory></ws-name></p>\n\n<p>Register a workspace for bulk operations. All repositories in the directories below &lt;ws-root-directory&gt; get registered under this workspace with the name &lt;ws-name&gt;. &lt;ws-root-directory&gt; must be absolute path.</p>\n\n<p>With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.</p>\n\n<p>--removeworkspace &lt;ws-name&gt;</p>\n\n<p>Remove the workspace with the logical name &lt;ws-name&gt;.</p>\n\n<p>--addcurrent &lt;ws-name&gt;</p>\n\n<p>Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name &lt;ws-name&gt;.</p>\n\n<p>git bulk --purge</p>\n\n<p>Removes all defined repository locations.</p>\n\n<p>git bulk --listall</p>\n\n<p>List all registered repositories.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>Register a workspace so that git bulk knows about it using an absolute path:\n\n$ git bulk --addworkspace personal ~/workspaces/personal\n\nOr register a workspace using an environment variable pointing to an absolute path:\n\n$ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'\n\nUse option --from in order to directly clone a repository or multiple repositories \n\n$ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git\n$ git bulk --addworkspace personal ~/workspaces/personal --from ~/repositories.txt\n\nrepositories.txt\n----------------------------------\nhttps://host-of-git/repo-1.git\nhttps://host-of-git/repo-2.git\nhttps://host-of-git/repo-3.git\n\n\nRegister the current directory as a workspace to git bulk:\n\n$ git bulk --addcurrent personal\n\nList all registered workspaces:\n\n$ git bulk --listall\n\nRun a git command on the repositories of the current workspace:\n\n$ git bulk fetch\n\nRun a git command on the specified workspace and its repositories:\n\n$ git bulk -w personal fetch\n\nRun a git command but ask the user for confirmation on every execution (guarded mode):\n\n$ git bulk -g fetch\n\nRemove a registered workspace:\n\n$ git bulk --removeworkspace personal\n\nRemove all registered workspaces:\n\n$ git bulk --purge\n</code></pre>\n\n<h2 id=\"FILES\">FILES</h2>\n\n<ul>\n  <li>\n<code>.gitconfig</code>: Store the <code>git-bulk</code> registered workspaces under the <code>bulkworkspaces</code> key.</li>\n</ul>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Niklas Schlimm &lt;<a href=\"mailto:ns103@hotmail.de\" data-bare-link=\"true\">ns103@hotmail.de</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;https://github.com/nschlimm/git-bulk&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>February 2025</li>\n    <li class='tr'>git-bulk(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-bulk.md",
    "content": "git-bulk(1) -- Run git commands on multiple repositories\n========================================================\n\n## SYNOPSIS\n\n`git-bulk` [-g] [--no-follow-symlinks] [--no-follow-hidden] ([-a]|[-w &lt;ws-name&gt;]) &lt;git command&gt; <br/>\n`git-bulk` --addworkspace &lt;ws-name&gt; &lt;ws-root-directory&gt; (--from &lt;URL or file&gt;) <br/>\n`git-bulk` --removeworkspace &lt;ws-name&gt; <br/>\n`git-bulk` --addcurrent &lt;ws-name&gt; <br/>\n`git-bulk` --purge <br/>\n`git-bulk` --listall\n\n## DESCRIPTION\n\ngit bulk adds convenient support for operations that you want to execute on multiple git repositories.\n\n- simply register workspaces that contain multiple git repos in their directory structure\n- run any git command on the repositories of the registered workspaces in one command to `git bulk`\n- use the \"guarded mode\" to check on each execution\n\n## OPTIONS\n\n  -a\n\n  Run a git command on all workspaces and their repositories.\n\n  -g\n\n  Ask the user for confirmation on every execution.\n\n  --no-follow-symlinks\n\n  Do not traverse symbolic links under the workspace when searching for git repositories.\n\n  --no-follow-hidden\n\n  Do not traverse hidden (dotted) directories under the workspace when searching for git repositories.\n\n  -w &lt;ws-name&gt;\n\n  Run the git command on the specified workspace. The workspace must be registered.\n\n  &lt;git command&gt;\n\n  Any git Command you wish to execute on the repositories.\n\n  --addworkspace &lt;ws-name&gt; &lt;ws-root-directory&gt; (--from &lt;URL or file&rt;gt;)\n\n  Register a workspace for bulk operations. All repositories in the directories below &lt;ws-root-directory&gt; get registered under this workspace with the name &lt;ws-name&gt;. &lt;ws-root-directory&gt; must be absolute path.\n\n  With option '--from' the URL to a single repository or a file containing multiple URLs can be added and they will be cloned directly into the workspace. Suitable for the initial setup of a multi-repo project.\n\n  --removeworkspace &lt;ws-name&gt;\n\n  Remove the workspace with the logical name &lt;ws-name&gt;.\n\n  --addcurrent &lt;ws-name&gt;\n\n  Adds the current directory as workspace to git bulk operations. The workspace is referenced with its logical name &lt;ws-name&gt;.\n\n  git bulk --purge\n\n  Removes all defined repository locations.\n\n  git bulk --listall\n\n  List all registered repositories.\n\n## EXAMPLES\n\n    Register a workspace so that git bulk knows about it using an absolute path:\n\n    $ git bulk --addworkspace personal ~/workspaces/personal\n\n    Or register a workspace using an environment variable pointing to an absolute path:\n\n    $ git bulk --addworkspace personal '$PERSONAL_WORKSPACE'\n\n    Use option --from in order to directly clone a repository or multiple repositories \n\n    $ git bulk --addworkspace personal ~/workspaces/personal --from https://github.com/tj/git-extras.git\n    $ git bulk --addworkspace personal ~/workspaces/personal --from ~/repositories.txt\n\n    repositories.txt\n    ----------------------------------\n    https://host-of-git/repo-1.git\n    https://host-of-git/repo-2.git\n    https://host-of-git/repo-3.git\n\n\n    Register the current directory as a workspace to git bulk:\n\n    $ git bulk --addcurrent personal\n\n    List all registered workspaces:\n\n    $ git bulk --listall\n\n    Run a git command on the repositories of the current workspace:\n\n    $ git bulk fetch\n\n    Run a git command on the specified workspace and its repositories:\n\n    $ git bulk -w personal fetch\n\n    Run a git command but ask the user for confirmation on every execution (guarded mode):\n\n    $ git bulk -g fetch\n\n    Remove a registered workspace:\n\n    $ git bulk --removeworkspace personal\n\n    Remove all registered workspaces:\n\n    $ git bulk --purge\n\n## FILES\n\n- `.gitconfig`: Store the `git-bulk` registered workspaces under the `bulkworkspaces` key.\n\n## AUTHOR\n\nWritten by Niklas Schlimm &lt;<ns103@hotmail.de>&gt;\n\n## REPORTING BUGS\n\n&lt;https://github.com/nschlimm/git-bulk&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-changelog.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-CHANGELOG\" \"1\" \"June 2018\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-changelog\\fR \\- Generate a changelog report\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-changelog\\fR [options] [<file>]\n.\n.br\n\\fBgit\\-changelog\\fR {\\-h | \\-\\-help | ?}\n.\n.SH \"DESCRIPTION\"\nGenerates a changelog from git(1) tags (annotated or lightweight) and commit messages\\. Existing changelog files with filenames that begin with \\fIChange\\fR or \\fIHistory\\fR will be identified automatically with a case insensitive match pattern and existing content will be appended to the new output generated\\-\\-this behavior can be disabled by specifying the prune option (\\-p|\\-\\-prune\\-old)\\. The generated file will be opened in \\fB$EDITOR\\fR when set\\.\n.\n.P\nIf no tags exist, then all commits are output; if tags exist, then only the most\\-recent commits are output up to the last identified tag\\. This behavior can be changed by specifying one or both of the range options (\\-f|\\-\\-final\\-tag and \\-s|\\-\\-start\\-tag)\\.\n.\n.P\nYou could customize the changelog format via some git config options\\.\n.\n.IP \"\\(bu\" 4\n\\fBgit config changelog\\.format $format\\fR controls the format of each commit\\. It will be passed as \\fBgit log \\-\\-pretty=format:$format\\fR\\. The default value is \\fB* %s\\fR\\.\n.\n.IP \"\\(bu\" 4\n\\fBgit config changelog\\.mergeformat $format\\fR is like changelog\\.format but only used when \\fB\\-\\-merges\\-only\\fR is specified\\. The default value is \\fB* %s%n%w(64,4,4)%b\\fR\\.\n.\n.IP \"\" 0\n.\n.SH \"OPTIONS\"\n<file>\n.\n.P\nThe name of the output file\\. By default the new file will be \\fIHistory\\.md\\fR unless an existing changelog is detected in which case the existing file will be updated\\.\n.\n.P\n\\-a, \\-\\-all\n.\n.P\nRetrieve all commits\\. Ignores \\-s|\\-\\-start\\-tag/commit and \\-f|\\-\\-final\\-tag options (if set)\\.\n.\n.P\n\\-l, \\-\\-list\n.\n.P\nShow commits in list format (without titles, dates)\\.\n.\n.P\n\\-t, \\-\\-tag\n.\n.P\nSpecify a tag label to use for most\\-recent (untagged) commits\\.\n.\n.P\n\\-f, \\-\\-final\\-tag\n.\n.P\nWhen specifying a range, the newest tag at which point commit retrieval will end\\. Commits will be returned from the very first commit until the final tag unless a start tag is also specified\\.\n.\n.P\n\\-s, \\-\\-start\\-tag\n.\n.P\nWhen specifying a range, the oldest tag to retrieve commits from\\. Commits will be returned from the start tag to now unless a final tag is also specified\\.\n.\n.P\n\\-\\-start\\-commit\n.\n.P\nLike the \\-\\-start\\-tag but specify the oldest commit instead of tag\\. Note that the specified commit will be contained in the changelog\\.\n.\n.P\n\\-n, \\-\\-no\\-merges\n.\n.P\nFilters out merge commits (commits with more than 1 parent) from generated changelog\\.\n.\n.P\n\\-m, \\-\\-merges\\-only\n.\n.P\nUses only merge commits (commits with more than 1 parent) for generated changelog\\. It also changes the default format to include the merge commit messages body, as on github the commits subject line only contains the branch name but no information about the content of the merge\\.\n.\n.P\n\\-p, \\-\\-prune\\-old\n.\n.P\nReplace existing changelog entirely with newly generated content, thereby disabling the default behavior of appending the content of any detected changelog to the end of newly generated content\\.\n.\n.P\n\\-x, \\-\\-stdout\n.\n.P\nWrite output to stdout instead of to a new changelog file\\.\n.\n.P\n\\-h, \\-\\-help, ?\n.\n.P\nShow a help message with basic usage information\\.\n.\n.SH \"EXAMPLES\"\n.\n.TP\nUpdating existing file or creating a new \\fIHistory\\.md\\fR file with pretty formatted output:\n.\n.IP\n$ git changelog\n.\n.TP\nListing commits from the current version:\n.\n.IP\n$ git changelog \\-\\-list\n.\n.TP\nListing a range of commits from 2\\.1\\.0 to now:\n.\n.IP\n$ git changelog \\-\\-list \\-\\-start\\-tag 2\\.1\\.0\n.\n.TP\nListing a pretty formatted version of the same:\n.\n.IP\n$ git changelog \\-\\-start\\-tag 2\\.1\\.0\n.\n.TP\nListing a range of commits from initial commit to 2\\.1\\.0:\n.\n.IP\n$ git changelog \\-\\-list \\-\\-final\\-tag 2\\.1\\.0\n.\n.TP\nListing a pretty formatted range of commits between 0\\.5\\.0 and 1\\.0\\.0:\n.\n.IP\n$ git changelog \\-\\-start\\-tag 0\\.5\\.0 \\-\\-final\\-tag 1\\.0\\.0\n.\n.TP\nListing a pretty formatted range of commits between 0b97430 and 1\\.0\\.0:\n.\n.IP\n$ git changelog \\-\\-start\\-commit 0b97430 \\-\\-final\\-tag 1\\.0\\.0\n.\n.TP\nSpecifying a file for output:\n.\n.IP\n$ git changelog ChangeLog\\.md\n.\n.TP\nAnd if an existing Changelog exists, replace its contents entirely:\n.\n.IP\n$ git changelog \\-\\-prune\\-old\n.\n.SH \"AUTHOR\"\nWritten by Mark Eissler <\\fImark@mixtur\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-changelog.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-changelog(1) - Generate a changelog report</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-changelog(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-changelog(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-changelog</code> - <span class=\"man-whatis\">Generate a changelog report</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-changelog</code> [options] [&lt;file&gt;]<br />\n<code>git-changelog</code> {-h | --help | ?}</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Generates a changelog from <span class=\"man-ref\">git<span class=\"s\">(1)</span></span> tags (annotated or lightweight) and commit messages. Existing changelog files with filenames that begin with <em>Change</em> or <em>History</em> will be identified automatically with a case insensitive match pattern and existing content will be appended to the new output generated--this behavior can be disabled by specifying the prune option (-p|--prune-old). The generated file will be opened in <strong>$EDITOR</strong> when set.</p>\n\n<p>  If no tags exist, then all commits are output; if tags exist, then only the most-recent commits are output up to the last identified tag. This behavior can be changed by specifying one or both of the range options (-f|--final-tag and -s|--start-tag).</p>\n\n<p>  You could customize the changelog format via some git config options.</p>\n\n<ul>\n<li><p><code>git config changelog.format $format</code> controls the format of each commit. It will be passed as <code>git log --pretty=format:$format</code>. The default value is <code> * %s</code>.</p></li>\n<li><p><code>git config changelog.mergeformat $format</code> is like changelog.format but only used when <code>--merges-only</code> is specified. The default value is  <code>* %s%n%w(64,4,4)%b</code>.</p></li>\n</ul>\n\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;file&gt;</p>\n\n<p>  The name of the output file. By default the new file will be <em>History.md</em> unless an existing changelog is detected in which case the existing file will be updated.</p>\n\n<p>  -a, --all</p>\n\n<p>  Retrieve all commits. Ignores -s|--start-tag/commit and -f|--final-tag options (if set).</p>\n\n<p>  -l, --list</p>\n\n<p>  Show commits in list format (without titles, dates).</p>\n\n<p>  -t, --tag</p>\n\n<p>  Specify a tag label to use for most-recent (untagged) commits.</p>\n\n<p>  -f, --final-tag</p>\n\n<p>  When specifying a range, the newest tag at which point commit retrieval will end. Commits will be returned from the very first commit until the final tag unless a start tag is also specified.</p>\n\n<p>  -s, --start-tag</p>\n\n<p>  When specifying a range, the oldest tag to retrieve commits from. Commits will be returned from the start tag to now unless a final tag is also specified.</p>\n\n<p>  --start-commit</p>\n\n<p>  Like the --start-tag but specify the oldest commit instead of tag. Note that the specified commit will be contained in the changelog.</p>\n\n<p>  -n, --no-merges</p>\n\n<p>  Filters out merge commits (commits with more than 1 parent) from generated changelog.</p>\n\n<p>  -m, --merges-only</p>\n\n<p>  Uses only merge commits (commits with more than 1 parent) for generated changelog. It also changes the default format to include the merge commit messages body, as on github the commits subject line only contains the branch name but no information about the content of the merge.</p>\n\n<p>  -p, --prune-old</p>\n\n<p>  Replace existing changelog entirely with newly generated content, thereby disabling the default behavior of appending the content of any detected changelog to the end of newly generated content.</p>\n\n<p>  -x, --stdout</p>\n\n<p>  Write output to stdout instead of to a new changelog file.</p>\n\n<p>  -h, --help, ?</p>\n\n<p>  Show a help message with basic usage information.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<dl>\n<dt>Updating existing file or creating a new <em>History.md</em> file with pretty formatted output:</dt><dd><p></p>\n\n<p>$ git changelog</p></dd>\n<dt>Listing commits from the current version:</dt><dd><p></p>\n\n<p>$ git changelog --list</p></dd>\n<dt>Listing a range of commits from 2.1.0 to now:</dt><dd><p></p>\n\n<p>$ git changelog --list --start-tag 2.1.0</p></dd>\n<dt>Listing a pretty formatted version of the same:</dt><dd><p></p>\n\n<p>$ git changelog --start-tag 2.1.0</p></dd>\n<dt>Listing a range of commits from initial commit to 2.1.0:</dt><dd><p></p>\n\n<p>$ git changelog --list --final-tag 2.1.0</p></dd>\n<dt>Listing a pretty formatted range of commits between 0.5.0 and 1.0.0:</dt><dd><p></p>\n\n<p>$ git changelog --start-tag 0.5.0 --final-tag 1.0.0</p></dd>\n<dt>Listing a pretty formatted range of commits between 0b97430 and 1.0.0:</dt><dd><p></p>\n\n<p>$ git changelog --start-commit 0b97430 --final-tag 1.0.0</p></dd>\n<dt>Specifying a file for output:</dt><dd><p></p>\n\n<p>$ git changelog ChangeLog.md</p></dd>\n<dt>And if an existing Changelog exists, replace its contents entirely:</dt><dd><p></p>\n\n<p>$ git changelog --prune-old</p></dd>\n</dl>\n\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Mark Eissler &lt;<a href=\"&#x6d;&#97;&#x69;&#x6c;&#x74;&#x6f;&#58;&#x6d;&#x61;&#x72;&#x6b;&#x40;&#x6d;&#105;&#120;&#116;&#117;&#x72;&#46;&#99;&#x6f;&#x6d;\" data-bare-link=\"true\">&#109;&#x61;&#114;&#107;&#x40;&#109;&#x69;&#x78;&#116;&#117;&#x72;&#46;&#x63;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>June 2018</li>\n    <li class='tr'>git-changelog(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-changelog.md",
    "content": "git-changelog(1) -- Generate a changelog report\n===============================================\n\n## SYNOPSIS\n\n`git-changelog` [options] [&lt;file&gt;]<br>\n`git-changelog` {-h | --help | ?}\n\n## DESCRIPTION\n\n  Generates a changelog from git(1) tags (annotated or lightweight) and commit messages. Existing changelog files with filenames that begin with _Change_ or _History_ will be identified automatically with a case insensitive match pattern and existing content will be appended to the new output generated--this behavior can be disabled by specifying the prune option (-p|--prune-old). The generated file will be opened in **$EDITOR** when set.\n\n  If no tags exist, then all commits are output; if tags exist, then only the most-recent commits are output up to the last identified tag. This behavior can be changed by specifying one or both of the range options (-f|--final-tag and -s|--start-tag).\n\n  You could customize the changelog format via some git config options.\n\n  * `git config changelog.format $format` controls the format of each commit. It will be passed as `git log --pretty=format:$format`. The default value is `  * %s`.\n\n  * `git config changelog.mergeformat $format` is like changelog.format but only used when `--merges-only` is specified. The default value is  `* %s%n%w(64,4,4)%b`.\n\n## OPTIONS\n\n  &lt;file&gt;\n\n  The name of the output file. By default the new file will be _History.md_ unless an existing changelog is detected in which case the existing file will be updated.\n\n  -a, --all\n\n  Retrieve all commits. Ignores -s|--start-tag/commit and -f|--final-tag options (if set).\n\n  -l, --list\n\n  Show commits in list format (without titles, dates).\n\n  -t, --tag\n\n  Specify a tag label to use for most-recent (untagged) commits.\n\n  -f, --final-tag\n\n  When specifying a range, the newest tag at which point commit retrieval will end. Commits will be returned from the very first commit until the final tag unless a start tag is also specified.\n\n  -s, --start-tag\n\n  When specifying a range, the oldest tag to retrieve commits from. Commits will be returned from the start tag to now unless a final tag is also specified.\n\n  --start-commit\n\n  Like the --start-tag but specify the oldest commit instead of tag. Note that the specified commit will be contained in the changelog.\n\n  -n, --no-merges\n\n  Filters out merge commits (commits with more than 1 parent) from generated changelog.\n\n  -m, --merges-only\n\n  Uses only merge commits (commits with more than 1 parent) for generated changelog. It also changes the default format to include the merge commit messages body, as on github the commits subject line only contains the branch name but no information about the content of the merge.\n\n  -p, --prune-old\n\n  Replace existing changelog entirely with newly generated content, thereby disabling the default behavior of appending the content of any detected changelog to the end of newly generated content.\n\n  -x, --stdout\n\n  Write output to stdout instead of to a new changelog file.\n\n  -h, --help, ?\n\n  Show a help message with basic usage information.\n\n## EXAMPLES\n\n  * Updating existing file or creating a new _History.md_ file with pretty formatted output:\n\n    $ git changelog\n\n  * Listing commits from the current version:\n\n    $ git changelog --list\n\n  * Listing a range of commits from 2.1.0 to now:\n\n    $ git changelog --list --start-tag 2.1.0\n\n  * Listing a pretty formatted version of the same:\n\n    $ git changelog --start-tag 2.1.0\n\n  * Listing a range of commits from initial commit to 2.1.0:\n\n    $ git changelog --list --final-tag 2.1.0\n\n  * Listing a pretty formatted range of commits between 0.5.0 and 1.0.0:\n\n    $ git changelog --start-tag 0.5.0 --final-tag 1.0.0\n\n  * Listing a pretty formatted range of commits between 0b97430 and 1.0.0:\n\n    $ git changelog --start-commit 0b97430 --final-tag 1.0.0\n\n  * Specifying a file for output:\n\n    $ git changelog ChangeLog.md\n\n  * And if an existing Changelog exists, replace its contents entirely:\n\n    $ git changelog --prune-old\n\n## AUTHOR\n\nWritten by Mark Eissler &lt;<mark@mixtur.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-clear-soft.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-CLEAR\\-SOFT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-clear\\-soft\\fR \\- Soft clean up a repository\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-clear\\-soft\\fR\n.\n.SH \"DESCRIPTION\"\nClears the repository to a state that it looks as if it was freshly cloned with the current HEAD, however, preserving all changes that are located in files and directories listed in \\.gitignore\\. It is a git\\-reset \\-\\-hard together with deletion of all untracked files that reside inside the working directory, excluding those in \\.gitignore\\.\n.\n.SH \"EXAMPLES\"\nClears the repo\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git clear\\-soft\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nModified version of script written by Daniel \\'grindhold\\' Brendle <\\fIgrindhold@gmx\\.net\\fR> by Matiss Treinis <\\fImrtreinis@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-clear-soft.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-clear-soft(1) - Soft clean up a repository</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-clear-soft(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-clear-soft(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-clear-soft</code> - <span class=\"man-whatis\">Soft clean up a repository</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-clear-soft</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Clears the repository to a state that it looks as if it was freshly cloned\n  with the current HEAD, however, preserving all changes that are located in files and directories listed in .gitignore. It is a git-reset --hard together with\n  deletion of all untracked files that reside inside the working directory, excluding those in .gitignore.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Clears the repo.</p>\n\n<pre><code>$ git clear-soft\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Modified version of script written by Daniel 'grindhold' Brendle &lt;<a href=\"&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#58;&#x67;&#x72;&#x69;&#x6e;&#100;&#x68;&#x6f;&#x6c;&#x64;&#x40;&#x67;&#x6d;&#x78;&#x2e;&#x6e;&#101;&#116;\" data-bare-link=\"true\">&#x67;&#x72;&#105;&#x6e;&#x64;&#104;&#x6f;&#108;&#x64;&#64;&#x67;&#109;&#120;&#x2e;&#x6e;&#x65;&#116;</a>&gt; by Matiss Treinis &lt;<a href=\"&#x6d;&#97;&#105;&#108;&#x74;&#x6f;&#x3a;&#x6d;&#x72;&#116;&#114;&#101;&#x69;&#x6e;&#x69;&#115;&#x40;&#103;&#x6d;&#x61;&#x69;&#108;&#x2e;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#109;&#x72;&#x74;&#x72;&#x65;&#105;&#x6e;&#x69;&#115;&#x40;&#x67;&#x6d;&#97;&#105;&#x6c;&#46;&#99;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-clear-soft(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-clear-soft.md",
    "content": "git-clear-soft(1) -- Soft clean up a repository\n================================================\n\n## SYNOPSIS\n\n`git-clear-soft`\n\n## DESCRIPTION\n\n  Clears the repository to a state that it looks as if it was freshly cloned\n  with the current HEAD, however, preserving all changes that are located in files and directories listed in .gitignore. It is a git-reset --hard together with\n  deletion of all untracked files that reside inside the working directory, excluding those in .gitignore.\n\n## EXAMPLES\n\n  Clears the repo.\n\n    $ git clear-soft\n\n## AUTHOR\n\nModified version of script written by Daniel 'grindhold' Brendle &lt;<grindhold@gmx.net>&gt; by Matiss Treinis &lt;<mrtreinis@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-clear.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-CLEAR\" \"1\" \"September 2021\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-clear\\fR \\- Rigorously clean up a repository\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-clear\\fR\n.\n.SH \"DESCRIPTION\"\nClears the repository to a state that it looks as if it was freshly cloned with the current HEAD\\. Basically it is a git\\-reset \\-\\-hard together with deletion of all untracked files that reside inside the working directory, including those in \\.gitignore\\.\n.\n.SH \"OPTIONS\"\n\\-f, \\-\\-force\n.\n.P\nForce the clean, with no warning to the user\n.\n.P\n\\-h, \\-\\-help, ?\n.\n.P\nDisplay usage\n.\n.SH \"EXAMPLES\"\n.\n.IP \"\\(bu\" 4\nClears the repo, with user confirmation required\\.\n.\n.IP\n$ git clear\n.\n.IP \"\\(bu\" 4\nClears the repo, without user confirmation\\.\n.\n.IP\n$ git clear \\-f\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Daniel \\'grindhold\\' Brendle <\\fIgrindhold@gmx\\.net\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-clear.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-clear(1) - Rigorously clean up a repository</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-clear(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-clear(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-clear</code> - <span class=\"man-whatis\">Rigorously clean up a repository</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-clear</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Clears the repository to a state that it looks as if it was freshly cloned\n  with the current HEAD. Basically it is a git-reset --hard together with\n  deletion of all untracked files that reside inside the working directory, including those in .gitignore.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -f, --force</p>\n\n<p>  Force the clean, with no warning to the user</p>\n\n<p>  -h, --help, ?</p>\n\n<p>  Display usage</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<ul>\n<li><p>Clears the repo, with user confirmation required.</p>\n\n<p>$ git clear</p></li>\n<li><p>Clears the repo, without user confirmation.</p>\n\n<p>$ git clear -f</p></li>\n</ul>\n\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Daniel 'grindhold' Brendle &lt;<a href=\"&#x6d;&#97;&#x69;&#108;&#x74;&#x6f;&#x3a;&#103;&#x72;&#x69;&#x6e;&#x64;&#104;&#x6f;&#x6c;&#x64;&#64;&#103;&#109;&#x78;&#46;&#x6e;&#101;&#116;\" data-bare-link=\"true\">&#x67;&#x72;&#105;&#x6e;&#100;&#104;&#111;&#x6c;&#100;&#64;&#103;&#109;&#x78;&#x2e;&#110;&#101;&#116;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2021</li>\n    <li class='tr'>git-clear(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-clear.md",
    "content": "git-clear(1) -- Rigorously clean up a repository\n================================================\n\n## SYNOPSIS\n\n`git-clear`\n\n## DESCRIPTION\n\n  Clears the repository to a state that it looks as if it was freshly cloned\n  with the current HEAD. Basically it is a git-reset --hard together with\n  deletion of all untracked files that reside inside the working directory, including those in .gitignore.\n\n## OPTIONS\n\n  -f, --force\n\n  Force the clean, with no warning to the user\n\n  -h, --help, ?\n\n  Display usage\n\n## EXAMPLES\n\n  * Clears the repo, with user confirmation required.\n\n    $ git clear\n\n  * Clears the repo, without user confirmation.\n\n    $ git clear -f\n\n## AUTHOR\n\nWritten by Daniel 'grindhold' Brendle &lt;<grindhold@gmx.net>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-coauthor.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-COAUTHOR\" \"1\" \"August 2019\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-coauthor\\fR \\- Add a co\\-author to the last commit\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-coauthor\\fR <co\\-author> <co\\-author\\-email>\n.\n.SH \"DESCRIPTION\"\nAdd a co\\-author to the last commit\n.\n.SH \"OPTIONS\"\n<co\\-author>\n.\n.P\nThe username of the co\\-author you want to add\\.\n.\n.P\n<co\\-author\\-email>\n.\n.P\nThe email address of the author you want to add\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git coauthor user user@email\\.com\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jacob Herrington \\fIjacobherringtondeveloper@gmail\\.com\\fR\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-coauthor.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-coauthor(1) - Add a co-author to the last commit</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-coauthor(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-coauthor(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-coauthor</code> - <span class=\"man-whatis\">Add a co-author to the last commit</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-coauthor</code> &lt;co-author&gt; &lt;co-author-email&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Add a co-author to the last commit</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;co-author&gt;</p>\n\n<p>  The username of the co-author you want to add.</p>\n\n<p>  &lt;co-author-email&gt;</p>\n\n<p>  The email address of the author you want to add.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git coauthor user user@email.com\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jacob Herrington <a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#97;&#99;&#x6f;&#98;&#104;&#x65;&#x72;&#114;&#105;&#110;&#x67;&#116;&#x6f;&#x6e;&#x64;&#x65;&#x76;&#x65;&#x6c;&#111;&#112;&#x65;&#x72;&#64;&#103;&#109;&#x61;&#105;&#108;&#x2e;&#99;&#111;&#109;\" data-bare-link=\"true\">&#x6a;&#97;&#99;&#111;&#98;&#104;&#101;&#114;&#114;&#105;&#x6e;&#x67;&#x74;&#111;&#110;&#100;&#x65;&#118;&#101;&#108;&#111;&#x70;&#101;&#114;&#64;&#103;&#109;&#x61;&#105;&#x6c;&#x2e;&#99;&#x6f;&#x6d;</a></p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2019</li>\n    <li class='tr'>git-coauthor(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-coauthor.md",
    "content": "git-coauthor(1) -- Add a co-author to the last commit\n================================\n\n## SYNOPSIS\n\n`git-coauthor` &lt;co-author&gt; &lt;co-author-email&gt;\n\n## DESCRIPTION\n\n  Add a co-author to the last commit\n\n## OPTIONS\n\n  &lt;co-author&gt;\n\n  The username of the co-author you want to add.\n\n  &lt;co-author-email&gt;\n  \n  The email address of the author you want to add.\n\n## EXAMPLES\n\n    $ git coauthor user user@email.com\n\n## AUTHOR\n\nWritten by Jacob Herrington <jacobherringtondeveloper@gmail.com>\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-commits-since.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-COMMITS\\-SINCE\" \"1\" \"January 2026\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-commits\\-since\\fR \\- Show commit logs since some date\n.SH \"SYNOPSIS\"\n.TS\nallbox;\n\\fBgit\\-commits\\-since\\fR [\\-r\t\\-\\-ref <ref>] [<date>]\n.TE\n.SH \"DESCRIPTION\"\nList of commits since the given \\fIdate\\fR or \\fIref\\fR\\.\n.SH \"OPTIONS\"\n<date>\n.P\nShow commits more recent than <date>\\. By default, the command shows the commit logs since \"last week\"\\.\n.P\n\\-r, \\-\\-ref <ref>\n.P\nShow commits since the given ref (tag, branch, or commit)\\. When specified, the command uses \\fBref\\.\\.HEAD\\fR instead of date\\-based filtering\\.\n.SH \"EXAMPLES\"\nIt is really flexible and these are only 3 of the options, go ahead give it a try:\n.IP \"\" 4\n.nf\n$ git commits\\-since yesterday\naa084d9 TweeKane \\- Add global gitignore to git\\-ignore output\n515e94a TJ Holowaychuk \\- Merge pull request #128 from nickl\\-/git\\-extras\\-html\\-hyperlinks\n5f86b54 TJ Holowaychuk \\- Merge pull request #129 from nickl\\-/develop\n7398d10 nickl\\- \\- Fix #127 git\\-ignore won\\'t add duplicates\\.\n\n$ git commits\\-since 3 o clock pm\naa084d9 TweeKane \\- Add global gitignore to git\\-ignore output\n\n$ git commits\\-since 2 hour ago\naa084d9 TweeKane \\- Add global gitignore to git\\-ignore output\n515e94a TJ Holowaychuk \\- Merge pull request #128 from nickl\\-/git\\-extras\\-html\\-hyperlinks\n5f86b54 TJ Holowaychuk \\- Merge pull request #129 from nickl\\-/develop\n\n$ git commits\\-since \\-\\-ref 7\\.4\\.0\n6ed2643 John Bachir \\- ability to specify command when hitting enter (#1223)\nb9bd309 John Bachir \\- Improve `git\\-repl` prompt (#1224)\n6f4cf0c johnpyp \\- feat: `delete\\-branch` multiple unique branch names completions (#1221)\n\\|\\.\\|\\.\\|\\.\n215382b 罗泽轩 \\- Bump version to 7\\.5\\.0\\-dev (#1207)\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-commits-since.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-commits-since(1) - Show commit logs since some date</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-commits-since(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-commits-since(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-commits-since</code> - <span class=\"man-whatis\">Show commit logs since some date</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<table>\n  <tbody>\n    <tr>\n      <td>\n<code>git-commits-since</code> [-r</td>\n      <td>--ref &lt;ref&gt;] [&lt;date&gt;]</td>\n    </tr>\n  </tbody>\n</table>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>List of commits since the given <em>date</em> or <em>ref</em>.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;date&gt;</p>\n\n<p>Show commits more recent than &lt;date&gt;. By default, the command shows the commit logs since \"last week\".</p>\n\n<p>-r, --ref &lt;ref&gt;</p>\n\n<p>Show commits since the given ref (tag, branch, or commit). When specified, the command uses <code>ref..HEAD</code> instead of date-based filtering.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>It is really flexible and these are only 3 of the options, go ahead give it a try:</p>\n\n<pre><code>$ git commits-since yesterday\naa084d9 TweeKane - Add global gitignore to git-ignore output\n515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop\n7398d10 nickl- - Fix #127 git-ignore won't add duplicates.\n\n$ git commits-since 3 o clock pm\naa084d9 TweeKane - Add global gitignore to git-ignore output\n\n$ git commits-since 2 hour ago\naa084d9 TweeKane - Add global gitignore to git-ignore output\n515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop\n\n$ git commits-since --ref 7.4.0\n6ed2643 John Bachir - ability to specify command when hitting enter (#1223)\nb9bd309 John Bachir - Improve `git-repl` prompt (#1224)\n6f4cf0c johnpyp - feat: `delete-branch` multiple unique branch names completions (#1221)\n...\n215382b 罗泽轩 - Bump version to 7.5.0-dev (#1207)\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"mailto:tj@vision-media.ca\" data-bare-link=\"true\">tj@vision-media.ca</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>January 2026</li>\n    <li class='tr'>git-commits-since(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-commits-since.md",
    "content": "git-commits-since(1) -- Show commit logs since some date\n========================================================\n\n## SYNOPSIS\n\n`git-commits-since` [-r|--ref &lt;ref&gt;] [&lt;date&gt;]\n\n## DESCRIPTION\n\n  List of commits since the given _date_ or _ref_.\n\n## OPTIONS\n\n  &lt;date&gt;\n\n  Show commits more recent than &lt;date&gt;. By default, the command shows the commit logs since \"last week\".\n\n  -r, --ref &lt;ref&gt;\n\n  Show commits since the given ref (tag, branch, or commit). When specified, the command uses `ref..HEAD` instead of date-based filtering.\n\n## EXAMPLES\n\n  It is really flexible and these are only 3 of the options, go ahead give it a try:\n\n    $ git commits-since yesterday\n    aa084d9 TweeKane - Add global gitignore to git-ignore output\n    515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n    5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop\n    7398d10 nickl- - Fix #127 git-ignore won't add duplicates.\n\n    $ git commits-since 3 o clock pm\n    aa084d9 TweeKane - Add global gitignore to git-ignore output\n\n    $ git commits-since 2 hour ago\n    aa084d9 TweeKane - Add global gitignore to git-ignore output\n    515e94a TJ Holowaychuk - Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n    5f86b54 TJ Holowaychuk - Merge pull request #129 from nickl-/develop\n\n    $ git commits-since --ref 7.4.0\n    6ed2643 John Bachir - ability to specify command when hitting enter (#1223)\n    b9bd309 John Bachir - Improve `git-repl` prompt (#1224)\n    6f4cf0c johnpyp - feat: `delete-branch` multiple unique branch names completions (#1221)\n    ...\n    215382b 罗泽轩 - Bump version to 7.5.0-dev (#1207)\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-continue.1",
    "content": ".\\\" generated with Ronn-NG/v0.8.0\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.8.0\n.TH \"GIT\\-CONTINUE\" \"1\" \"November 2024\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-continue\\fR \\- Continue current git operation\n.SH \"SYNOPSIS\"\n\\fBgit\\-continue\\fR\n.SH \"DESCRIPTION\"\nContinue current git revert, rebase, merge or cherry\\-pick process\\.\n.SH \"OPTIONS\"\nThere are no options, it just continues current operation\\.\n.SH \"EXAMPLES\"\n\\fBgit\\-continue\\fR\n.SH \"AUTHOR\"\nWritten by oikarinen\n.SH \"REPORTING BUGS\"\n<\\fI\\%https://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fI\\%https://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-continue.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.8.0 (http://github.com/apjanke/ronn-ng/tree/0.8.0)'>\n  <title>git-continue(1) - Continue current git operation</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-continue(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-continue(1)</li>\n  </ol>\n\n\n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-continue</code> - <span class=\"man-whatis\">Continue current git operation</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-continue</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Continue current git revert, rebase, merge or cherry-pick process.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  There are no options, it just continues current operation.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  <code>git-continue</code></p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by oikarinen</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>November 2024</li>\n    <li class='tr'>git-continue(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-continue.md",
    "content": "git-continue(1) -- Continue current git operation\n================================\n\n## SYNOPSIS\n\n`git-continue`\n\n## DESCRIPTION\n\n  Continue current git revert, rebase, merge or cherry-pick process.\n\n## OPTIONS\n\n  There are no options, it just continues current operation.\n\n## EXAMPLES\n\n  `git-continue`\n\n## AUTHOR\n\nWritten by oikarinen\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-contrib.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-CONTRIB\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-contrib\\fR \\- Show user\\'s contributions\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-contrib\\fR [<username>|<email>]\n.\n.SH \"DESCRIPTION\"\nOutput a user\\'s contributions to a project, based on the author name or email\\. Returns multiple entries if there are more than one match\\.\n.\n.SH \"OPTIONS\"\n<username>\n.\n.P\nThe name or email of the user who owns the contributions\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\nSearching with a username\n\n$ git contrib visionmedia\nvisionmedia (18):\n  Export STATUS_CODES\n  Moved help msg to node\\-repl\n  Added multiple arg support for sys\\.puts(), print(), etc\\.\n  Fix stack output on socket error\n  \\.\\.\\.\n\nSearching with a partial email\n\n$ git contrib tj@\nvisionmedia (18):\n  Export STATUS_CODES\n  Moved help msg to node\\-repl\n  Added multiple arg support for sys\\.puts(), print(), etc\\.\n  Fix stack output on socket error\n  \\.\\.\\.\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-contrib.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-contrib(1) - Show user&#39;s contributions</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-contrib(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-contrib(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-contrib</code> - <span class=\"man-whatis\">Show user's contributions</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-contrib</code> [&lt;username&gt;|&lt;email&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Output a user's contributions to a project, based on the author name or email.\n  Returns multiple entries if there are more than one match.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;username&gt;</p>\n\n<p>  The name or email of the user who owns the contributions.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>Searching with a username\n\n$ git contrib visionmedia\nvisionmedia (18):\n  Export STATUS_CODES\n  Moved help msg to node-repl\n  Added multiple arg support for sys.puts(), print(), etc.\n  Fix stack output on socket error\n  ...\n\nSearching with a partial email\n\n$ git contrib tj@\nvisionmedia (18):\n  Export STATUS_CODES\n  Moved help msg to node-repl\n  Added multiple arg support for sys.puts(), print(), etc.\n  Fix stack output on socket error\n  ...\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#111;&#x3a;&#x74;&#106;&#64;&#x76;&#x69;&#x73;&#x69;&#111;&#x6e;&#45;&#x6d;&#x65;&#x64;&#105;&#x61;&#46;&#x63;&#x61;\" data-bare-link=\"true\">&#x74;&#106;&#x40;&#118;&#x69;&#x73;&#x69;&#x6f;&#110;&#45;&#x6d;&#101;&#100;&#x69;&#97;&#46;&#99;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-contrib(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-contrib.md",
    "content": "git-contrib(1) -- Show user's contributions\n===========================================\n\n## SYNOPSIS\n\n`git-contrib` [&lt;username&gt;|&lt;email&gt;]\n\n## DESCRIPTION\n\n  Output a user's contributions to a project, based on the author name or email.\n  Returns multiple entries if there are more than one match.\n\n## OPTIONS\n\n  &lt;username&gt;\n\n  The name or email of the user who owns the contributions.\n\n## EXAMPLES\n\n    Searching with a username\n\n    $ git contrib visionmedia\n    visionmedia (18):\n      Export STATUS_CODES\n      Moved help msg to node-repl\n      Added multiple arg support for sys.puts(), print(), etc.\n      Fix stack output on socket error\n      ...\n\n    Searching with a partial email\n\n    $ git contrib tj@\n    visionmedia (18):\n      Export STATUS_CODES\n      Moved help msg to node-repl\n      Added multiple arg support for sys.puts(), print(), etc.\n      Fix stack output on socket error\n      ...\n\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-count.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-COUNT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-count\\fR \\- Show commit count\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-count\\fR [\\-\\-all]\n.\n.SH \"DESCRIPTION\"\nShow commit count\\.\n.\n.SH \"OPTIONS\"\n\\-\\-all\n.\n.P\nShow commit count details\\.\n.\n.SH \"EXAMPLES\"\nOutput commit total:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git count\n\ntotal 1844\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nOutput verbose commit count details:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git count \\-\\-all\n\n  visionmedia (1285)\n  Tj Holowaychuk (430)\n  Aaron Heckmann (48)\n  csausdev (34)\n  ciaranj (26)\n  Guillermo Rauch (6)\n  Brian McKinney (2)\n  Nick Poulden (2)\n  Benny Wong (2)\n  Justin Lilly (1)\n  isaacs (1)\n  Adam Sanderson (1)\n  Viktor Kelemen (1)\n  Gregory Ritter (1)\n  Greg Ritter (1)\n  ewoudj (1)\n  James Herdman (1)\n  Matt Colyer (1)\n\n  total 1844\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-count.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-count(1) - Show commit count</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-count(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-count(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-count</code> - <span class=\"man-whatis\">Show commit count</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-count</code> [--all]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Show commit count.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --all</p>\n\n<p>  Show commit count details.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p> Output commit total:</p>\n\n<pre><code>$ git count\n\ntotal 1844\n</code></pre>\n\n<p> Output verbose commit count details:</p>\n\n<pre><code>$ git count --all\n\n  visionmedia (1285)\n  Tj Holowaychuk (430)\n  Aaron Heckmann (48)\n  csausdev (34)\n  ciaranj (26)\n  Guillermo Rauch (6)\n  Brian McKinney (2)\n  Nick Poulden (2)\n  Benny Wong (2)\n  Justin Lilly (1)\n  isaacs (1)\n  Adam Sanderson (1)\n  Viktor Kelemen (1)\n  Gregory Ritter (1)\n  Greg Ritter (1)\n  ewoudj (1)\n  James Herdman (1)\n  Matt Colyer (1)\n\n  total 1844\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#111;&#x3a;&#x74;&#106;&#64;&#x76;&#x69;&#x73;&#x69;&#111;&#x6e;&#45;&#x6d;&#x65;&#x64;&#105;&#x61;&#46;&#x63;&#x61;\" data-bare-link=\"true\">&#x74;&#106;&#x40;&#118;&#x69;&#x73;&#x69;&#x6f;&#110;&#45;&#x6d;&#101;&#100;&#x69;&#97;&#46;&#99;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-count(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-count.md",
    "content": "git-count(1) -- Show commit count\n=================================\n\n## SYNOPSIS\n\n`git-count` [--all]\n\n## DESCRIPTION\n\n  Show commit count.\n\n## OPTIONS\n\n  --all\n\n  Show commit count details.\n\n## EXAMPLES\n\n\n Output commit total:\n\n    $ git count\n\n    total 1844\n\n Output verbose commit count details:\n\n    $ git count --all\n\n\t  visionmedia (1285)\n\t  Tj Holowaychuk (430)\n\t  Aaron Heckmann (48)\n\t  csausdev (34)\n\t  ciaranj (26)\n\t  Guillermo Rauch (6)\n\t  Brian McKinney (2)\n\t  Nick Poulden (2)\n\t  Benny Wong (2)\n\t  Justin Lilly (1)\n\t  isaacs (1)\n\t  Adam Sanderson (1)\n\t  Viktor Kelemen (1)\n\t  Gregory Ritter (1)\n\t  Greg Ritter (1)\n\t  ewoudj (1)\n\t  James Herdman (1)\n\t  Matt Colyer (1)\n\n\t  total 1844\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-cp.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.0\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.0\n.TH \"GIT\\-CP\" \"1\" \"March 2020\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-cp\\fR \\- Copy a file keeping its history\n.SH \"SYNOPSIS\"\n\\fBgit\\-cp\\fR <current_filename> <destination_filename>\n.SH \"DESCRIPTION\"\nCopy a file keeping its git history\\. This allows merge conflict handling\\.\n.SH \"EXAMPLES\"\nCopy README into README\\.txt\n.IP \"\" 4\n.nf\n$ git cp README README\\.txt\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Rémy Hubscher <\\fI\\%mailto:hubscher\\.remy@gmail\\.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fI\\%https://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fI\\%https://github\\.com/tj/git\\-extras\\fR>\n.P\n<\\fI\\%https://stackoverflow\\.com/questions/16937359/git\\-copy\\-file\\-preserving\\-history/44036771#44036771\\fR>\n"
  },
  {
    "path": "man/git-cp.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.0 (http://github.com/apjanke/ronn-ng/tree/0.9.0)'>\n  <title>git-cp(1) - Copy a file keeping its history</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-cp(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-cp(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-cp</code> - <span class=\"man-whatis\">Copy a file keeping its history</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-cp</code> &lt;current_filename&gt; &lt;destination_filename&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Copy a file keeping its git history. This allows merge conflict handling.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Copy README into README.txt</p>\n\n<pre><code>$ git cp README README.txt\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Rémy Hubscher &lt;<a href=\"mailto:hubscher.remy@gmail.com\" data-bare-link=\"true\">hubscher.remy@gmail.com</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n<p>&lt;<a href=\"https://stackoverflow.com/questions/16937359/git-copy-file-preserving-history/44036771#44036771\" data-bare-link=\"true\">https://stackoverflow.com/questions/16937359/git-copy-file-preserving-history/44036771#44036771</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>March 2020</li>\n    <li class='tr'>git-cp(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-cp.md",
    "content": "git-cp(1) -- Copy a file keeping its history\n============================================\n\n## SYNOPSIS\n\n`git-cp` &lt;current_filename&gt; &lt;destination_filename&gt;\n\n## DESCRIPTION\n\nCopy a file keeping its git history. This allows merge conflict handling.\n\n## EXAMPLES\n\n  Copy README into README.txt\n\n    $ git cp README README.txt\n\n## AUTHOR\n\nWritten by Rémy Hubscher &lt;<hubscher.remy@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n\n&lt;<https://stackoverflow.com/questions/16937359/git-copy-file-preserving-history/44036771#44036771>&gt;\n"
  },
  {
    "path": "man/git-create-branch.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-CREATE\\-BRANCH\" \"1\" \"November 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-create\\-branch\\fR \\- Create branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-create\\-branch\\fR [\\-r|\\-\\-remote [remote_name]] <branchname>\n.\n.SH \"DESCRIPTION\"\nCreates local branch named <branchname> and optionally sets up a remote tracking branch\\.\n.\n.SH \"OPTIONS\"\n<\\-r|\\-\\-remote [remote_name]>\n.\n.P\nSetup a remote tracking branch using \\fBremote_name\\fR\\. If \\fBremote_name\\fR is not supplied, use \\fBorigin\\fR by default\\.\n.\n.P\n<\\-\\-from [start_point]>\n.\n.P\nSetup a start point when the branch created\\. If \\fB\\-\\-from\\fR is not supplied, use the current branch by default\\.\n.\n.P\n<branchname>\n.\n.P\nThe name of the branch to create\\.\n.\n.SH \"PREFERENCES\"\nYou may save your default preference for the \\fBremote\\fR option above by using \\fBgit config\\fR with the key \\fBgit\\-extras\\.create\\-branch\\.remote\\fR whose value will be the default remote when \\fB[\\-r|\\-\\-remote]\\fR is not specified\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git config git\\-extras\\.create\\-branch\\.remote lucinda\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nThe command line option \\fB\\-r|\\-\\-remote\\fR will override this preference\\.\n.\n.SH \"EXAMPLES\"\nWith no remote preference set:\n.\n.IP \"\" 4\n.\n.nf\n\n# creates local branch \\'integration\\'\n$ git create\\-branch integration\n\n# creates local & remote branch \\'integration\\' (on default \\'origin\\')\n$ git create\\-branch \\-r integration\n\n# creates local & remote branch \\'integration\\' on \\'upstream\\'\n$ git create\\-branch \\-r upstream integration\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nWith \\fBgit\\-extras\\.create\\-branch\\.remote\\fR preference set to \\'lucinda\\':\n.\n.IP \"\" 4\n.\n.nf\n\n# creates local & remote branch \\'integration\\' (on preference \\'lucinda\\')\n$ git create\\-branch integration\n\n# overriding preference, using default `\\-r` of \\'origin\\'\n# creates local & remote branch \\'integration\\' on default \\'origin\\'\n$ git create\\-branch \\-r integration\n\n# overriding preference, using specified `\\-r` of \\'upstream\\'\n# creates local & remote branch \\'integration\\' on \\'upstream\\'\n$ git create\\-branch \\-r upstream integration\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"NOTES\"\n.\n.IP \"\\(bu\" 4\nAs of 4\\.4\\.0, the default behavior has changed\\. \\fBgit\\-create\\-branch\\fR will no longer automatically setup a remote tracking branch unless the \\fB\\-r|\\-remote\\fR option is specified\\. See additional note on preference feature in 4\\.8\\.0\\-dev below\\.\n.\n.IP \"\\(bu\" 4\nAs of 4\\.8\\.0\\-dev, the \\fBremote\\fR option can be set via \\fBgit config\\fR preference as described in \\fIPreferences\\fR section\\.\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Jonhnny Weslley <\\fIjw@jonhnnyweslley\\.net\\fR> Modified by Mark Pitman <\\fImark\\.pitman@gmail\\.com\\fR>, Brian Murrell <\\fIbtmurrell@gmail\\.com\\fR>\\.\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-create-branch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-create-branch(1) - Create branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#PREFERENCES\">PREFERENCES</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#NOTES\">NOTES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-create-branch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-create-branch(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-create-branch</code> - <span class=\"man-whatis\">Create branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-create-branch</code> [-r|--remote [remote_name]] &lt;branchname&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Creates local branch named &lt;branchname&gt; and optionally sets up a remote tracking branch.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;-r|--remote [remote_name]&gt;</p>\n\n<p>Setup a remote tracking branch using <code>remote_name</code>. If <code>remote_name</code> is not supplied, use <code>origin</code> by default.</p>\n\n<p>&lt;--from [start_point]&gt;</p>\n\n<p>Setup a start point when the branch created. If <code>--from</code> is not supplied, use the current branch by default.</p>\n\n<p>&lt;branchname&gt;</p>\n\n<p>The name of the branch to create.</p>\n\n<h2 id=\"PREFERENCES\">PREFERENCES</h2>\n\n<p>You may save your default preference for the <code>remote</code> option above by using <code>git config</code> with the key <code>git-extras.create-branch.remote</code> whose value will be the default remote when <code>[-r|--remote]</code> is not specified.</p>\n\n<pre><code>$ git config git-extras.create-branch.remote lucinda\n</code></pre>\n\n<p>The command line option <code>-r|--remote</code> will override this preference.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>With no remote preference set:</p>\n\n<pre><code># creates local branch 'integration'\n$ git create-branch integration\n\n# creates local &amp; remote branch 'integration' (on default 'origin')\n$ git create-branch -r integration\n\n# creates local &amp; remote branch 'integration' on 'upstream'\n$ git create-branch -r upstream integration\n</code></pre>\n\n<p>With <code>git-extras.create-branch.remote</code> preference set to 'lucinda':</p>\n\n<pre><code># creates local &amp; remote branch 'integration' (on preference 'lucinda')\n$ git create-branch integration\n\n# overriding preference, using default `-r` of 'origin'\n# creates local &amp; remote branch 'integration' on default 'origin'\n$ git create-branch -r integration\n\n# overriding preference, using specified `-r` of 'upstream'\n# creates local &amp; remote branch 'integration' on 'upstream'\n$ git create-branch -r upstream integration\n</code></pre>\n\n<h2 id=\"NOTES\">NOTES</h2>\n\n<ul>\n<li><p>As of 4.4.0, the default behavior has changed. <code>git-create-branch</code> will no longer automatically setup a remote tracking branch unless the <code>-r|-remote</code> option is specified.  See additional note on preference feature in 4.8.0-dev below.</p></li>\n<li><p>As of 4.8.0-dev, the <code>remote</code> option can be set via <code>git config</code> preference as described in <a href=\"#PREFERENCES\" data-bare-link=\"true\">Preferences</a> section.</p></li>\n</ul>\n\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jonhnny Weslley &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#116;&#x6f;&#x3a;&#x6a;&#x77;&#64;&#106;&#x6f;&#x6e;&#x68;&#x6e;&#110;&#121;&#x77;&#101;&#115;&#108;&#x6c;&#x65;&#121;&#x2e;&#110;&#x65;&#x74;\" data-bare-link=\"true\">&#106;&#x77;&#x40;&#106;&#111;&#x6e;&#x68;&#110;&#110;&#x79;&#x77;&#101;&#x73;&#x6c;&#x6c;&#101;&#x79;&#x2e;&#110;&#x65;&#116;</a>&gt;\nModified by Mark Pitman &lt;<a href=\"&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#109;&#x61;&#x72;&#x6b;&#46;&#112;&#x69;&#116;&#x6d;&#97;&#110;&#x40;&#x67;&#109;&#x61;&#105;&#x6c;&#x2e;&#99;&#111;&#109;\" data-bare-link=\"true\">&#109;&#x61;&#114;&#x6b;&#46;&#x70;&#x69;&#116;&#x6d;&#97;&#x6e;&#64;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#99;&#x6f;&#109;</a>&gt;, Brian Murrell &lt;<a href=\"&#109;&#x61;&#105;&#x6c;&#x74;&#111;&#58;&#98;&#116;&#109;&#117;&#114;&#x72;&#x65;&#108;&#108;&#64;&#x67;&#x6d;&#x61;&#105;&#x6c;&#46;&#99;&#x6f;&#109;\" data-bare-link=\"true\">&#x62;&#x74;&#109;&#117;&#114;&#114;&#x65;&#108;&#108;&#x40;&#103;&#109;&#x61;&#x69;&#x6c;&#x2e;&#x63;&#111;&#x6d;</a>&gt;.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>November 2020</li>\n    <li class='tr'>git-create-branch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-create-branch.md",
    "content": "git-create-branch(1) -- Create branches\n=======================================\n\n## SYNOPSIS\n\n`git-create-branch` [-r|--remote [remote_name]] &lt;branchname&gt;\n\n## DESCRIPTION\n\nCreates local branch named &lt;branchname&gt; and optionally sets up a remote tracking branch.\n\n## OPTIONS\n\n&lt;-r|--remote [remote_name]&gt;\n\nSetup a remote tracking branch using `remote_name`. If `remote_name` is not supplied, use `origin` by default.\n\n&lt;--from [start_point]&gt;\n\nSetup a start point when the branch created. If `--from` is not supplied, use the current branch by default.\n\n&lt;branchname&gt;\n\nThe name of the branch to create.\n\n## PREFERENCES\n\nYou may save your default preference for the `remote` option above by using `git config` with the key `git-extras.create-branch.remote` whose value will be the default remote when `[-r|--remote]` is not specified.\n\n    $ git config git-extras.create-branch.remote lucinda\n\nThe command line option `-r|--remote` will override this preference.\n\n## EXAMPLES\n\nWith no remote preference set:\n\n    # creates local branch 'integration'\n    $ git create-branch integration\n\n    # creates local & remote branch 'integration' (on default 'origin')\n    $ git create-branch -r integration\n\n    # creates local & remote branch 'integration' on 'upstream'\n    $ git create-branch -r upstream integration\n\nWith `git-extras.create-branch.remote` preference set to 'lucinda':\n\n    # creates local & remote branch 'integration' (on preference 'lucinda')\n    $ git create-branch integration\n\n    # overriding preference, using default `-r` of 'origin'\n    # creates local & remote branch 'integration' on default 'origin'\n    $ git create-branch -r integration\n\n    # overriding preference, using specified `-r` of 'upstream'\n    # creates local & remote branch 'integration' on 'upstream'\n    $ git create-branch -r upstream integration\n\n## NOTES\n\n* As of 4.4.0, the default behavior has changed. `git-create-branch` will no longer automatically setup a remote tracking branch unless the `-r|-remote` option is specified.  See additional note on preference feature in 4.8.0-dev below.\n\n* As of 4.8.0-dev, the `remote` option can be set via `git config` preference as described in [Preferences](#PREFERENCES) section.\n\n## AUTHOR\n\nWritten by Jonhnny Weslley &lt;<jw@jonhnnyweslley.net>&gt;\nModified by Mark Pitman &lt;<mark.pitman@gmail.com>&gt;, Brian Murrell &lt;<btmurrell@gmail.com>&gt;.\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delete-branch.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELETE\\-BRANCH\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delete\\-branch\\fR \\- Delete branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delete\\-branch\\fR <branchname>\n.\n.SH \"DESCRIPTION\"\nDeletes local and remote branch named <branchname>\\. Note that local deletion fails if the branch is checked out\\.\n.\n.SH \"OPTIONS\"\n<branchname>\n.\n.P\nThe name of the branch to delete\\. If multiple branches are provided, then they will all be deleted\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git delete\\-branch integration\n$ git delete\\-branch integration bug/1234\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delete-branch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delete-branch(1) - Delete branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delete-branch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delete-branch(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delete-branch</code> - <span class=\"man-whatis\">Delete branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delete-branch</code> &lt;branchname&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Deletes local and remote branch named &lt;branchname&gt;.\n  Note that local deletion fails if the branch is checked out.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;branchname&gt;</p>\n\n<p>  The name of the branch to delete.\n  If multiple branches are provided, then they will all be deleted.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git delete-branch integration\n$ git delete-branch integration bug/1234\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#111;&#x3a;&#x74;&#106;&#64;&#x76;&#x69;&#x73;&#x69;&#111;&#x6e;&#45;&#x6d;&#x65;&#x64;&#105;&#x61;&#46;&#x63;&#x61;\" data-bare-link=\"true\">&#x74;&#106;&#x40;&#118;&#x69;&#x73;&#x69;&#x6f;&#110;&#45;&#x6d;&#101;&#100;&#x69;&#97;&#46;&#99;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-delete-branch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delete-branch.md",
    "content": "git-delete-branch(1) -- Delete branches\n=======================================\n\n## SYNOPSIS\n\n`git-delete-branch` &lt;branchname&gt;\n\n## DESCRIPTION\n\n  Deletes local and remote branch named &lt;branchname&gt;.\n  Note that local deletion fails if the branch is checked out.\n\n## OPTIONS\n\n  &lt;branchname&gt;\n\n  The name of the branch to delete.\n  If multiple branches are provided, then they will all be deleted.\n\n## EXAMPLES\n\n    $ git delete-branch integration\n    $ git delete-branch integration bug/1234\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delete-merged-branches.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELETE\\-MERGED\\-BRANCHES\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delete\\-merged\\-branches\\fR \\- Delete merged branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delete\\-merged\\-branches\\fR\n.\n.SH \"DESCRIPTION\"\nDeletes all branches merged in to current HEAD\\. Does not delete \\fImaster\\fR, even if run from a branch that is a descendant of \\fImaster\\fR\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git delete\\-merged\\-branches\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jesús Espino <\\fIjespinog@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delete-merged-branches.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delete-merged-branches(1) - Delete merged branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delete-merged-branches(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delete-merged-branches(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delete-merged-branches</code> - <span class=\"man-whatis\">Delete merged branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delete-merged-branches</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Deletes all branches merged in to current HEAD. Does not delete <em>master</em>, even if run from a branch that is\n  a descendant of <em>master</em>.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git delete-merged-branches\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jesús Espino &lt;<a href=\"&#x6d;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#x65;&#x73;&#x70;&#105;&#110;&#111;&#x67;&#64;&#x67;&#x6d;&#x61;&#x69;&#108;&#x2e;&#x63;&#111;&#109;\" data-bare-link=\"true\">&#x6a;&#x65;&#115;&#112;&#105;&#110;&#x6f;&#x67;&#64;&#x67;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#x63;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-delete-merged-branches(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delete-merged-branches.md",
    "content": "git-delete-merged-branches(1) -- Delete merged branches\n=====================================================\n\n## SYNOPSIS\n\n`git-delete-merged-branches`\n\n## DESCRIPTION\n\n  Deletes all branches merged in to current HEAD. Does not delete *master*, even if run from a branch that is\n  a descendant of *master*.\n\n## EXAMPLES\n\n    $ git delete-merged-branches\n\n## AUTHOR\n\nWritten by Jesús Espino &lt;<jespinog@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delete-squashed-branches.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELETE\\-SQUASHED\\-BRANCHES\" \"1\" \"February 2024\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delete\\-squashed\\-branches\\fR \\- Delete branches that were squashed\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delete\\-squashed\\-branches\\fR [\\-\\-proceed, \\-p] [<branch\\-name>]\n.\n.SH \"DESCRIPTION\"\nDeletes all git branches that have been \"squash\\-merged\" into \\fBbranch\\-name\\fR\\.\n.\n.SH \"OPTIONS\"\n\\-\\-proceed, \\-p\n.\n.P\nProceed with the next branch even if the current branch cannot be deleted (e\\.g\\. because it is checked out in a worktree)\n.\n.P\n<branch\\-name>\n.\n.P\nThe target branch were the \"squashed\\-merged\" branches were committed to\\. If no value is given, then the current checked out branch will be used\\.\n.\n.SH \"EXAMPLES\"\nDelete all branches that were \"squash\\-merged\" into the current checked out branch\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git delete\\-squashed\\-branches\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nDelete all branches that were \"squash\\-merged\" into the \\fBmain\\fR branch\\. This will checkout the target branch and leave you on said branch after the command has completed\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git delete\\-squashed\\-branches main\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Teddy Katz <\\fIteddy\\.katz@gmail\\.com\\fR> and Vladimir Jimenez <\\fIme@allejo\\.io\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delete-squashed-branches.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delete-squashed-branches(1) - Delete branches that were squashed</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delete-squashed-branches(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delete-squashed-branches(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delete-squashed-branches</code> - <span class=\"man-whatis\">Delete branches that were squashed</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delete-squashed-branches</code> [--proceed, -p] [&lt;branch-name&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Deletes all git branches that have been \"squash-merged\" into <code>branch-name</code>.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --proceed, -p</p>\n\n<p>  Proceed with the next branch even if the current branch cannot be deleted (e.g. because it is checked out in a worktree)</p>\n\n<p>  &lt;branch-name&gt;</p>\n\n<p>  The target branch were the \"squashed-merged\" branches were committed to. If no value is given, then the current checked out branch will be used.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Delete all branches that were \"squash-merged\" into the current checked out branch.</p>\n\n<pre><code>$ git delete-squashed-branches\n</code></pre>\n\n<p>  Delete all branches that were \"squash-merged\" into the <code>main</code> branch. This will checkout the target branch and leave you on said branch after the command has completed.</p>\n\n<pre><code>$ git delete-squashed-branches main\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Teddy Katz &lt;<a href=\"&#109;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#101;&#100;&#x64;&#x79;&#46;&#x6b;&#97;&#x74;&#122;&#64;&#103;&#109;&#97;&#x69;&#108;&#46;&#99;&#x6f;&#x6d;\" data-bare-link=\"true\">&#116;&#x65;&#x64;&#x64;&#x79;&#x2e;&#x6b;&#97;&#116;&#122;&#64;&#103;&#109;&#x61;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#109;</a>&gt; and Vladimir Jimenez &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#x74;&#x6f;&#58;&#x6d;&#x65;&#x40;&#x61;&#x6c;&#108;&#101;&#106;&#111;&#46;&#105;&#111;\" data-bare-link=\"true\">&#109;&#101;&#64;&#x61;&#108;&#x6c;&#x65;&#106;&#111;&#46;&#x69;&#111;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>February 2024</li>\n    <li class='tr'>git-delete-squashed-branches(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delete-squashed-branches.md",
    "content": "git-delete-squashed-branches(1) -- Delete branches that were squashed\n=====================================================================\n\n## SYNOPSIS\n\n`git-delete-squashed-branches` [--proceed, -p] [&lt;branch-name&gt;]\n\n## DESCRIPTION\n\nDeletes all git branches that have been \"squash-merged\" into `branch-name`.\n\n## OPTIONS\n\n  --proceed, -p\n\n  Proceed with the next branch even if the current branch cannot be deleted (e.g. because it is checked out in a worktree)\n\n  &lt;branch-name&gt;\n\n  The target branch were the \"squashed-merged\" branches were committed to. If no value is given, then the current checked out branch will be used.\n\n## EXAMPLES\n\n  Delete all branches that were \"squash-merged\" into the current checked out branch.\n\n    $ git delete-squashed-branches\n\n  Delete all branches that were \"squash-merged\" into the `main` branch. This will checkout the target branch and leave you on said branch after the command has completed.\n\n    $ git delete-squashed-branches main\n\n## AUTHOR\n\nWritten by Teddy Katz &lt;<teddy.katz@gmail.com>&gt; and Vladimir Jimenez &lt;<me@allejo.io>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delete-submodule.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELETE\\-SUBMODULE\" \"1\" \"April 2018\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delete\\-submodule\\fR \\- Delete submodules\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delete\\-submodule\\fR <path>\n.\n.SH \"DESCRIPTION\"\n.\n.SH \"OPTIONS\"\n<path>\n.\n.P\nThe path of the submodule to delete\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git delete\\-submodule lib/foo\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jonhnny Weslley <\\fIjw@jonhnnyweslley\\.net\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delete-submodule.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delete-submodule(1) - Delete submodules</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delete-submodule(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delete-submodule(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delete-submodule</code> - <span class=\"man-whatis\">Delete submodules</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delete-submodule</code> &lt;path&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;path&gt;</p>\n\n<p>  The path of the submodule to delete.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git delete-submodule lib/foo\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jonhnny Weslley &lt;<a href=\"&#109;&#97;&#x69;&#x6c;&#x74;&#111;&#58;&#106;&#x77;&#64;&#x6a;&#x6f;&#x6e;&#x68;&#110;&#x6e;&#x79;&#119;&#101;&#x73;&#x6c;&#108;&#101;&#121;&#46;&#x6e;&#x65;&#116;\" data-bare-link=\"true\">&#x6a;&#x77;&#64;&#x6a;&#x6f;&#x6e;&#x68;&#110;&#110;&#x79;&#119;&#x65;&#x73;&#108;&#108;&#101;&#x79;&#x2e;&#x6e;&#101;&#x74;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>April 2018</li>\n    <li class='tr'>git-delete-submodule(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delete-submodule.md",
    "content": "git-delete-submodule(1) -- Delete submodules\n============================================\n\n## SYNOPSIS\n\n`git-delete-submodule` &lt;path&gt;\n\n## DESCRIPTION\n\n## OPTIONS\n\n  &lt;path&gt;\n\n  The path of the submodule to delete.\n\n## EXAMPLES\n\n    $ git delete-submodule lib/foo\n\n## AUTHOR\n\nWritten by Jonhnny Weslley &lt;<jw@jonhnnyweslley.net>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delete-tag.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELETE\\-TAG\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delete\\-tag\\fR \\- Delete tags\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delete\\-tag\\fR <tagname>\n.\n.SH \"DESCRIPTION\"\nDeletes local and remote tag named <tagname>\\.\n.\n.SH \"OPTIONS\"\n<tagname>\n.\n.P\nThe name of the tag to delete\\. If multiple tags are provided, then they will all be deleted\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git delete\\-tag 0\\.0\\.1\n$ git delete\\-tag 0\\.0\\.1 0\\.0\\.2\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delete-tag.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delete-tag(1) - Delete tags</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delete-tag(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delete-tag(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delete-tag</code> - <span class=\"man-whatis\">Delete tags</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delete-tag</code> &lt;tagname&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Deletes local and remote tag named &lt;tagname&gt;.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;tagname&gt;</p>\n\n<p>  The name of the tag to delete.\n  If multiple tags are provided, then they will all be deleted.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git delete-tag 0.0.1\n$ git delete-tag 0.0.1 0.0.2\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#x6d;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#x6a;&#x40;&#x76;&#105;&#115;&#105;&#x6f;&#110;&#x2d;&#x6d;&#x65;&#x64;&#105;&#x61;&#x2e;&#99;&#97;\" data-bare-link=\"true\">&#x74;&#x6a;&#64;&#118;&#105;&#115;&#x69;&#x6f;&#110;&#x2d;&#x6d;&#101;&#x64;&#x69;&#x61;&#x2e;&#99;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-delete-tag(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delete-tag.md",
    "content": "git-delete-tag(1) -- Delete tags\n================================\n\n## SYNOPSIS\n\n`git-delete-tag` &lt;tagname&gt;\n\n## DESCRIPTION\n\n  Deletes local and remote tag named &lt;tagname&gt;.\n\n## OPTIONS\n\n  &lt;tagname&gt;\n\n  The name of the tag to delete.\n  If multiple tags are provided, then they will all be deleted.\n\n## EXAMPLES\n\n    $ git delete-tag 0.0.1\n    $ git delete-tag 0.0.1 0.0.2\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-delta.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-DELTA\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-delta\\fR \\- Lists changed files\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-delta\\fR [<branch>] [<filter>]\n.\n.SH \"DESCRIPTION\"\nLists all files that differ from a branch\\. By default, lists files that have been added, copied, or modified as compared to the \\fBmaster\\fR branch\\.\n.\n.SH \"EXAMPLES\"\nLists all modified and renamed files vs\\. \\fBmaster\\fR:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git delta master MR\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nLists all deleted files vs\\. \\fBexample\\fR:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git delta example D\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Ivan Malopinsky <\\fIhello@imsky\\.co\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-delta.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-delta(1) - Lists changed files</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-delta(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-delta(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-delta</code> - <span class=\"man-whatis\">Lists changed files</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-delta</code> [&lt;branch&gt;] [&lt;filter&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Lists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the <code>master</code> branch.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Lists all modified and renamed files vs. <code>master</code>:</p>\n\n<pre><code>$ git delta master MR\n</code></pre>\n\n<p>  Lists all deleted files vs. <code>example</code>:</p>\n\n<pre><code>$ git delta example D\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Ivan Malopinsky &lt;<a href=\"&#109;&#97;&#x69;&#108;&#x74;&#x6f;&#58;&#104;&#x65;&#x6c;&#x6c;&#x6f;&#64;&#x69;&#x6d;&#x73;&#x6b;&#x79;&#46;&#99;&#x6f;\" data-bare-link=\"true\">&#x68;&#x65;&#x6c;&#x6c;&#x6f;&#64;&#x69;&#x6d;&#115;&#x6b;&#x79;&#x2e;&#99;&#111;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-delta(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-delta.md",
    "content": "git-delta(1) -- Lists changed files\n===================================\n\n## SYNOPSIS\n\n`git-delta` [&lt;branch&gt;] [&lt;filter&gt;]\n\n## DESCRIPTION\n\nLists all files that differ from a branch. By default, lists files that have been added, copied, or modified as compared to the `master` branch.\n\n## EXAMPLES\n\n  Lists all modified and renamed files vs. `master`:\n\n    $ git delta master MR\n\n  Lists all deleted files vs. `example`:\n\n    $ git delta example D\n\n## AUTHOR\n\nWritten by Ivan Malopinsky &lt;<hello@imsky.co>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-effort.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-EFFORT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-effort\\fR \\- Show effort statistics on file(s)\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-effort\\fR [\\-\\-above <value>] [<path>\\.\\.\\.] [\\-\\- [<log options>\\.\\.\\.]]\n.\n.SH \"DESCRIPTION\"\nShows effort statistics about files in the repository\\.\n.\n.P\nDisplay includes:\n.\n.br\n\\- Commits: number of commits per file \\- highlighting files with most activity\\.\n.\n.br\n\\- Active days: total number of days which contributed modifications to this file\\.\n.\n.SH \"OPTIONS\"\n\\-\\-above <value>\n.\n.P\nIgnore files with commits <= a value\\.\n.\n.P\n<path>\\.\\.\\.\n.\n.P\nOnly count commits that touches the given paths\\.\n.\n.P\nNote: \\fBgit\\-effort\\fR does not accept revision ranges, but the underlying \\fBgit log\\fR does (See the examples)\\.\n.\n.P\n<log options>\\.\\.\\.\n.\n.P\nOptions for \\fBgit log\\fR\\. Note that you must use \\fB\\-\\-\\fR to separate options to \\fBgit log\\fR from options to \\fBgit effort\\fR\\. This makes it possible to only count commits you are interested in\\. Not all options are relevant in the context of \\fBgit\\-effort\\fR, but those that are is listed under the \"Commit Limiting\" section on the \\fBgit\\-log\\fR manpages\\.\n.\n.SH \"EXAMPLES\"\nNote: Output will first appear unsorted, then the screen is cleared and the sorted list is output\\. The initial unsorted list is not shown in the examples for brevity\\.\n.\n.P\nDisplays \"effort\" statistics:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git effort \\-\\-above 5\n\n  file                                          commits    active days\n\n  git\\-extras                                    26         18\n  git\\-release                                   13         13\n  git\\-effort                                    13         2\n  git\\-ignore                                    11         7\n  git\\-changelog                                 11         8\n  git\\-graft                                     9          6\n  git\\-summary                                   8          6\n  git\\-delete\\-branch                             8          6\n  git\\-repl                                      7          5\n\n\n$ git effort \\-\\-above 5 bin/* \\-\\- \\-\\-after=\"one year ago\" \\-\\-author=\"Leila Muhtasib\"\n\n  file                                          commits    active days\n\n  git\\-extras                                    15         12\n  git\\-release                                   6          4\n  git\\-effort                                    6          2\n  git\\-ignore                                    4          4\n  git\\-changelog                                 3          2\n  git\\-graft                                     2          2\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nShowing statistics on directories is also possible:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git effort bin man \\-\\- \\-\\-after=\"one year ago\"\n\n  file                                          commits    active days\n\n  bin\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\. 406        232\n  man\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\. 118        80\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nOnly count commits in the specified revision range:\n.\n.P\n$ git effort \\-\\- master\\.\\.feature\n.\n.IP \"\" 4\n.\n.nf\n\n  file                                          commits    active days\n\n  bin/git\\-effort\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\. 3          2\n  man/git\\-effort\\.md\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\. 1          1\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Leila Muhtasib <\\fImuhtasib@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-effort.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-effort(1) - Show effort statistics on file(s)</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-effort(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-effort(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-effort</code> - <span class=\"man-whatis\">Show effort statistics on file(s)</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-effort</code> [--above &lt;value&gt;]  [&lt;path&gt;...] [-- [&lt;log options&gt;...]]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Shows effort statistics about files in the repository.</p>\n\n<p>  Display includes:<br />\n  - Commits: number of commits per file - highlighting files with most activity.<br />\n  - Active days: total number of days which contributed modifications to this file.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --above &lt;value&gt;</p>\n\n<p>  Ignore files with commits &lt;= a value.</p>\n\n<p>  &lt;path&gt;...</p>\n\n<p>  Only count commits that touches the given paths.</p>\n\n<p>  Note: <code>git-effort</code> does not accept revision ranges, but the underlying <code>git log</code> does (See the examples).</p>\n\n<p>  &lt;log options&gt;...</p>\n\n<p>  Options for <code>git log</code>. Note that you must use <code>--</code> to separate options to <code>git log</code>\n  from options to <code>git effort</code>.\n  This makes it possible to only count commits you are interested in.\n  Not all options are relevant in the context of <code>git-effort</code>, but those that are is listed under the \"Commit Limiting\" section on the <code>git-log</code> manpages.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p> Note: Output will first appear unsorted, then the screen is cleared and the sorted\n list is output. The initial unsorted list is not shown in the examples for brevity.</p>\n\n<p> Displays \"effort\" statistics:</p>\n\n<pre><code>$ git effort --above 5\n\n  file                                          commits    active days\n\n  git-extras                                    26         18\n  git-release                                   13         13\n  git-effort                                    13         2\n  git-ignore                                    11         7\n  git-changelog                                 11         8\n  git-graft                                     9          6\n  git-summary                                   8          6\n  git-delete-branch                             8          6\n  git-repl                                      7          5\n\n\n$ git effort --above 5 bin/* -- --after=\"one year ago\" --author=\"Leila Muhtasib\"\n\n  file                                          commits    active days\n\n  git-extras                                    15         12\n  git-release                                   6          4\n  git-effort                                    6          2\n  git-ignore                                    4          4\n  git-changelog                                 3          2\n  git-graft                                     2          2\n</code></pre>\n\n<p> Showing statistics on directories is also possible:</p>\n\n<pre><code>$ git effort bin man -- --after=\"one year ago\"\n\n  file                                          commits    active days\n\n  bin.......................................... 406        232\n  man.......................................... 118        80\n</code></pre>\n\n<p> Only count commits in the specified revision range:</p>\n\n<p>   $ git effort -- master..feature</p>\n\n<pre><code>  file                                          commits    active days\n\n  bin/git-effort............................... 3          2\n  man/git-effort.md............................ 1          1\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Leila Muhtasib &lt;<a href=\"&#109;&#97;&#x69;&#108;&#x74;&#x6f;&#58;&#109;&#x75;&#x68;&#x74;&#x61;&#115;&#x69;&#x62;&#x40;&#x67;&#x6d;&#97;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#x6d;&#117;&#x68;&#x74;&#97;&#x73;&#x69;&#x62;&#64;&#103;&#109;&#x61;&#105;&#108;&#46;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-effort(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-effort.md",
    "content": "git-effort(1) -- Show effort statistics on file(s)\n=================================\n\n## SYNOPSIS\n\n`git-effort` [--above &lt;value&gt;]  [&lt;path&gt;...] [-- [&lt;log options&gt;...]]\n\n## DESCRIPTION\n\n  Shows effort statistics about files in the repository.  \n\n  Display includes:  \n  - Commits: number of commits per file - highlighting files with most activity.  \n  - Active days: total number of days which contributed modifications to this file.  \n\n## OPTIONS\n\n  --above &lt;value&gt;\n\n  Ignore files with commits &lt;= a value.\n\n  &lt;path&gt;...\n\n  Only count commits that touches the given paths.\n\n  Note: `git-effort` does not accept revision ranges, but the underlying `git log` does (See the examples).  \n\n  &lt;log options&gt;...\n\n  Options for `git log`. Note that you must use `--` to separate options to `git log`\n  from options to `git effort`.\n  This makes it possible to only count commits you are interested in.\n  Not all options are relevant in the context of `git-effort`, but those that are is listed under the \"Commit Limiting\" section on the `git-log` manpages.\n\n## EXAMPLES\n\n Note: Output will first appear unsorted, then the screen is cleared and the sorted\n list is output. The initial unsorted list is not shown in the examples for brevity.\n\n Displays \"effort\" statistics:\n\n    $ git effort --above 5\n\n      file                                          commits    active days\n\n      git-extras                                    26         18\n      git-release                                   13         13\n      git-effort                                    13         2\n      git-ignore                                    11         7\n      git-changelog                                 11         8\n      git-graft                                     9          6\n      git-summary                                   8          6\n      git-delete-branch                             8          6\n      git-repl                                      7          5\n\n\n    $ git effort --above 5 bin/* -- --after=\"one year ago\" --author=\"Leila Muhtasib\"\n\n      file                                          commits    active days\n\n      git-extras                                    15         12\n      git-release                                   6          4\n      git-effort                                    6          2\n      git-ignore                                    4          4\n      git-changelog                                 3          2\n      git-graft                                     2          2\n\n Showing statistics on directories is also possible:\n\n    $ git effort bin man -- --after=\"one year ago\"\n\n      file                                          commits    active days\n\n      bin.......................................... 406        232\n      man.......................................... 118        80\n\n Only count commits in the specified revision range:\n\n   $ git effort -- master..feature\n\n      file                                          commits    active days\n\n      bin/git-effort............................... 3          2\n      man/git-effort.md............................ 1          1\n\n\n## AUTHOR\n\nWritten by Leila Muhtasib &lt;<muhtasib@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-extras.1",
    "content": ""
  },
  {
    "path": "man/git-extras.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\n  <title>git-extras(1) - Awesome GIT utilities</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#ENVIRONMENT-AND-CONFIGURATION-VARIABLES\">ENVIRONMENT AND CONFIGURATION VARIABLES</a>\n    <a href=\"#COMMANDS\">COMMANDS</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-extras(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-extras(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-extras</code> - <span class=\"man-whatis\">Awesome GIT utilities</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-extras</code> [-v,--version] [-h,--help] [update]</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-v, --version</p>\n\n<p>Show git-extras version number.</p>\n\n<p>-h, --help</p>\n\n<p>Show this help. This option can also be used for any of the extras commands.</p>\n\n<p>update</p>\n\n<p>Self update.</p>\n\n<h2 id=\"ENVIRONMENT-AND-CONFIGURATION-VARIABLES\">ENVIRONMENT AND CONFIGURATION VARIABLES</h2>\n\n<p><code>git config --add git-extras.default-branch $BRANCH</code></p>\n\n<p>Change the default branch to <code>$BRANCH</code>. If <code>git-extras.default-branch</code> isn't set, <code>init.defaultBranch</code> is used instead. If none of them are set it defaults to <code>main</code>.</p>\n\n<h2 id=\"COMMANDS\">COMMANDS</h2>\n\n<ul>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-abort.html\">git-abort<span class=\"s\">(1)</span></a></strong> Abort current git operation</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-alias.html\">git-alias<span class=\"s\">(1)</span></a></strong> Define, search and show aliases</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-archive-file.html\">git-archive-file<span class=\"s\">(1)</span></a></strong> Export the current HEAD of the git repository to an archive</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-authors.html\">git-authors<span class=\"s\">(1)</span></a></strong> Generate authors report</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-browse-ci.html\">git-browse-ci<span class=\"s\">(1)</span></a></strong> <var>View the web page for the current repository</var>\n</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-browse.html\">git-browse<span class=\"s\">(1)</span></a></strong> <var>View the web page for the current repository</var>\n</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-brv.html\">git-brv<span class=\"s\">(1)</span></a></strong> List branches sorted by their last commit date</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-bulk.html\">git-bulk<span class=\"s\">(1)</span></a></strong> Run git commands on multiple repositories</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-changelog.html\">git-changelog<span class=\"s\">(1)</span></a></strong> Generate a changelog report</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-clear-soft.html\">git-clear-soft<span class=\"s\">(1)</span></a></strong> Soft clean up a repository</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-clear.html\">git-clear<span class=\"s\">(1)</span></a></strong> Rigorously clean up a repository</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-coauthor.html\">git-coauthor<span class=\"s\">(1)</span></a></strong> Add a co-author to the last commit</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-commits-since.html\">git-commits-since<span class=\"s\">(1)</span></a></strong> Show commit logs since some date</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-continue.html\">git-continue<span class=\"s\">(1)</span></a></strong> Continue current git operation</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-contrib.html\">git-contrib<span class=\"s\">(1)</span></a></strong> Show user's contributions</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-count.html\">git-count<span class=\"s\">(1)</span></a></strong> Show commit count</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-cp.html\">git-cp<span class=\"s\">(1)</span></a></strong> Copy a file keeping its history</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-create-branch.html\">git-create-branch<span class=\"s\">(1)</span></a></strong> Create branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delete-branch.html\">git-delete-branch<span class=\"s\">(1)</span></a></strong> Delete branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delete-merged-branches.html\">git-delete-merged-branches<span class=\"s\">(1)</span></a></strong> Delete merged branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delete-squashed-branches.html\">git-delete-squashed-branches<span class=\"s\">(1)</span></a></strong> Delete branches that were squashed</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delete-submodule.html\">git-delete-submodule<span class=\"s\">(1)</span></a></strong> Delete submodules</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delete-tag.html\">git-delete-tag<span class=\"s\">(1)</span></a></strong> Delete tags</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-delta.html\">git-delta<span class=\"s\">(1)</span></a></strong> Lists changed files</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-effort.html\">git-effort<span class=\"s\">(1)</span></a></strong> Show effort statistics on file(s)</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-feature.html\">git-feature<span class=\"s\">(1)</span></a></strong> Create/Merge feature branch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-force-clone.html\">git-force-clone<span class=\"s\">(1)</span></a></strong> overwrite local repositories with clone</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-fork.html\">git-fork<span class=\"s\">(1)</span></a></strong> Fork a repo on github</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-fresh-branch.html\">git-fresh-branch<span class=\"s\">(1)</span></a></strong> Create fresh branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-get.html\">git-get<span class=\"s\">(1)</span></a></strong> Clone a Git repository under a configured directory</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-gh-pages.html\">git-gh-pages<span class=\"s\">(1)</span></a></strong> Create the GitHub Pages branch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-graft.html\">git-graft<span class=\"s\">(1)</span></a></strong> Merge and destroy a given branch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-guilt.html\">git-guilt<span class=\"s\">(1)</span></a></strong> calculate change between two revisions</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-ignore-io.html\">git-ignore-io<span class=\"s\">(1)</span></a></strong> Get sample gitignore file</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-ignore.html\">git-ignore<span class=\"s\">(1)</span></a></strong> Add .gitignore patterns</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-info.html\">git-info<span class=\"s\">(1)</span></a></strong> Returns information on current repository</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-local-commits.html\">git-local-commits<span class=\"s\">(1)</span></a></strong> List local commits</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-lock.html\">git-lock<span class=\"s\">(1)</span></a></strong> Lock a file excluded from version control</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-locked.html\">git-locked<span class=\"s\">(1)</span></a></strong> ls files that have been locked</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-magic.html\">git-magic<span class=\"s\">(1)</span></a></strong> Automate add/commit/push routines</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-merge-into.html\">git-merge-into<span class=\"s\">(1)</span></a></strong> Merge one branch into another</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-merge-repo.html\">git-merge-repo<span class=\"s\">(1)</span></a></strong> Merge two repo histories</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-missing.html\">git-missing<span class=\"s\">(1)</span></a></strong> Show commits missing from another branch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-mr.html\">git-mr<span class=\"s\">(1)</span></a></strong> Checks out a merge request locally</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-obliterate.html\">git-obliterate<span class=\"s\">(1)</span></a></strong> rewrite past commits to remove some files</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-paste.html\">git-paste<span class=\"s\">(1)</span></a></strong> Send patches to pastebin for chat conversations</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-pr.html\">git-pr<span class=\"s\">(1)</span></a></strong> Checks out a pull request locally</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-psykorebase.html\">git-psykorebase<span class=\"s\">(1)</span></a></strong> Rebase a branch with a merge commit</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-pull-request.html\">git-pull-request<span class=\"s\">(1)</span></a></strong> Create pull request for GitHub project</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-reauthor.html\">git-reauthor<span class=\"s\">(1)</span></a></strong> Rewrite history to change author's identity</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-rebase-patch.html\">git-rebase-patch<span class=\"s\">(1)</span></a></strong> Rebases a patch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-release.html\">git-release<span class=\"s\">(1)</span></a></strong> Commit, tag and push changes to the repository</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-rename-branch.html\">git-rename-branch<span class=\"s\">(1)</span></a></strong> rename local branch and push to remote</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-rename-file.html\">git-rename-file<span class=\"s\">(1)</span></a></strong> Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-rename-remote.html\">git-rename-remote<span class=\"s\">(1)</span></a></strong> Rename a remote</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-rename-tag.html\">git-rename-tag<span class=\"s\">(1)</span></a></strong> Rename a tag</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-repl.html\">git-repl<span class=\"s\">(1)</span></a></strong> git read-eval-print-loop</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-reset-file.html\">git-reset-file<span class=\"s\">(1)</span></a></strong> Reset one file</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-root.html\">git-root<span class=\"s\">(1)</span></a></strong> show path of root</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-scp.html\">git-scp<span class=\"s\">(1)</span></a></strong> Copy files to SSH compatible <code>git-remote</code>\n</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-sed.html\">git-sed<span class=\"s\">(1)</span></a></strong> replace patterns in git-controlled files</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-setup.html\">git-setup<span class=\"s\">(1)</span></a></strong> Set up a git repository</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-show-merged-branches.html\">git-show-merged-branches<span class=\"s\">(1)</span></a></strong> Show merged branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-show-tree.html\">git-show-tree<span class=\"s\">(1)</span></a></strong> show branch tree of commit history</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-show-unmerged-branches.html\">git-show-unmerged-branches<span class=\"s\">(1)</span></a></strong> Show unmerged branches</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-squash.html\">git-squash<span class=\"s\">(1)</span></a></strong> squash N last changes up to a ref'ed commit</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-stamp.html\">git-stamp<span class=\"s\">(1)</span></a></strong> Stamp the last commit message</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-standup.html\">git-standup<span class=\"s\">(1)</span></a></strong> Recall the commit history</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-summary.html\">git-summary<span class=\"s\">(1)</span></a></strong> Show repository summary</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-sync.html\">git-sync<span class=\"s\">(1)</span></a></strong> Sync local branch with remote branch</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-touch.html\">git-touch<span class=\"s\">(1)</span></a></strong> Touch and add file to the index</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-undo.html\">git-undo<span class=\"s\">(1)</span></a></strong> Remove latest commits</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-unlock.html\">git-unlock<span class=\"s\">(1)</span></a></strong> Unlock a file excluded from version control</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-unwip.html\">git-unwip<span class=\"s\">(1)</span></a></strong> Undo a Work In Progress commit</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-utimes.html\">git-utimes<span class=\"s\">(1)</span></a></strong> Change files modification time to their last commit date</li>\n  <li>\n<strong><a class=\"man-ref\" href=\"git-wip.html\">git-wip<span class=\"s\">(1)</span></a></strong> Create a Work In Progress commit</li>\n</ul>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"mailto:tj@vision-media.ca\" data-bare-link=\"true\">tj@vision-media.ca</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>February 2026</li>\n    <li class='tr'>git-extras(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-extras.md",
    "content": "git-extras(1) -- Awesome GIT utilities\n=================================\n\n## SYNOPSIS\n\n`git-extras` [-v,--version] [-h,--help] [update]\n\n## OPTIONS\n\n  -v, --version\n\n  Show git-extras version number.\n\n  -h, --help\n\n  Show this help. This option can also be used for any of the extras commands.\n\n  update\n\n  Self update.\n\n## ENVIRONMENT AND CONFIGURATION VARIABLES\n\n  `git config --add git-extras.default-branch $BRANCH`\n\n  Change the default branch to `$BRANCH`. If `git-extras.default-branch` isn't set, `init.defaultBranch` is used instead. If none of them are set it defaults to `main`.\n\n## COMMANDS\n\n   - **git-abort(1)** Abort current git operation\n   - **git-alias(1)** Define, search and show aliases\n   - **git-archive-file(1)** Export the current HEAD of the git repository to an archive\n   - **git-authors(1)** Generate authors report\n   - **git-browse-ci(1)** <View the web page for the current repository>\n   - **git-browse(1)** <View the web page for the current repository>\n   - **git-brv(1)** List branches sorted by their last commit date\n   - **git-bulk(1)** Run git commands on multiple repositories\n   - **git-changelog(1)** Generate a changelog report\n   - **git-clear-soft(1)** Soft clean up a repository\n   - **git-clear(1)** Rigorously clean up a repository\n   - **git-coauthor(1)** Add a co-author to the last commit\n   - **git-commits-since(1)** Show commit logs since some date\n   - **git-continue(1)** Continue current git operation\n   - **git-contrib(1)** Show user's contributions\n   - **git-count(1)** Show commit count\n   - **git-cp(1)** Copy a file keeping its history\n   - **git-create-branch(1)** Create branches\n   - **git-delete-branch(1)** Delete branches\n   - **git-delete-merged-branches(1)** Delete merged branches\n   - **git-delete-squashed-branches(1)** Delete branches that were squashed\n   - **git-delete-submodule(1)** Delete submodules\n   - **git-delete-tag(1)** Delete tags\n   - **git-delta(1)** Lists changed files\n   - **git-effort(1)** Show effort statistics on file(s)\n   - **git-feature(1)** Create/Merge feature branch\n   - **git-force-clone(1)** overwrite local repositories with clone\n   - **git-fork(1)** Fork a repo on github\n   - **git-fresh-branch(1)** Create fresh branches\n   - **git-get(1)** Clone a Git repository under a configured directory\n   - **git-gh-pages(1)** Create the GitHub Pages branch\n   - **git-graft(1)** Merge and destroy a given branch\n   - **git-guilt(1)** calculate change between two revisions\n   - **git-ignore-io(1)** Get sample gitignore file\n   - **git-ignore(1)** Add .gitignore patterns\n   - **git-info(1)** Returns information on current repository\n   - **git-local-commits(1)** List local commits\n   - **git-lock(1)** Lock a file excluded from version control\n   - **git-locked(1)** ls files that have been locked\n   - **git-magic(1)** Automate add/commit/push routines\n   - **git-merge-into(1)** Merge one branch into another\n   - **git-merge-repo(1)** Merge two repo histories\n   - **git-missing(1)** Show commits missing from another branch\n   - **git-mr(1)** Checks out a merge request locally\n   - **git-obliterate(1)** rewrite past commits to remove some files\n   - **git-paste(1)** Send patches to pastebin for chat conversations\n   - **git-pr(1)** Checks out a pull request locally\n   - **git-psykorebase(1)** Rebase a branch with a merge commit\n   - **git-pull-request(1)** Create pull request for GitHub project\n   - **git-reauthor(1)** Rewrite history to change author's identity\n   - **git-rebase-patch(1)** Rebases a patch\n   - **git-release(1)** Commit, tag and push changes to the repository\n   - **git-rename-branch(1)** rename local branch and push to remote\n   - **git-rename-file(1)** Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.\n   - **git-rename-remote(1)** Rename a remote\n   - **git-rename-tag(1)** Rename a tag\n   - **git-repl(1)** git read-eval-print-loop\n   - **git-reset-file(1)** Reset one file\n   - **git-root(1)** show path of root\n   - **git-scp(1)** Copy files to SSH compatible `git-remote`\n   - **git-sed(1)** replace patterns in git-controlled files\n   - **git-setup(1)** Set up a git repository\n   - **git-show-merged-branches(1)** Show merged branches\n   - **git-show-tree(1)** show branch tree of commit history\n   - **git-show-unmerged-branches(1)** Show unmerged branches\n   - **git-squash(1)** squash N last changes up to a ref'ed commit\n   - **git-stamp(1)** Stamp the last commit message\n   - **git-standup(1)** Recall the commit history\n   - **git-summary(1)** Show repository summary\n   - **git-sync(1)** Sync local branch with remote branch\n   - **git-touch(1)** Touch and add file to the index\n   - **git-undo(1)** Remove latest commits\n   - **git-unlock(1)** Unlock a file excluded from version control\n   - **git-unwip(1)** Undo a Work In Progress commit\n   - **git-utimes(1)** Change files modification time to their last commit date\n   - **git-wip(1)** Create a Work In Progress commit\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-feature.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-FEATURE\" \"1\" \"December 2023\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-feature\\fR \\- Create/Merge feature branch\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-feature\\fR [\\-a|\\-\\-alias \\fIPREFIX\\fR] [\\-s|\\-\\-separator \\fISEPARATOR\\fR] [\\-r|\\-\\-remote [REMOTE_NAME]] [\\-\\-from START_POINT] \\fINAME\\fR\\.\\.\\.\n.\n.P\n\\fBgit\\-feature\\fR [\\-a|\\-\\-alias \\fIPREFIX\\fR] [\\-s|\\-\\-separator \\fISEPARATOR\\fR] finish [\\-\\-squash] \\fINAME\\fR\\.\\.\\.\n.\n.SH \"DESCRIPTION\"\nCreate or merge the given feature branch\\. The feature branch name is made from the \\fIPREFIX\\fR, the \\fISEPARATOR\\fR, and the \\fINAME\\fR joined together\\.\n.\n.P\nThe default \\fIPREFIX\\fR is \\fBfeature\\fR and \\fISEPARATOR\\fR is \\fB/\\fR, which can be changed (see OPTIONS and GIT CONFIG for details)\\.\n.\n.P\nThe branch \\fINAME\\fR may be specified as multiple words which will be joined with \\fB\\-\\fR\\. If the branch name contains the word \\fBfinish\\fR or is another OPTION, \\fB\\-\\-\\fR should be passed to stop OPTION parsing\\. See the EXAMPLES for details\\.\n.\n.SH \"OPTIONS\"\n.\n.TP\n\\fB\\-a\\fR \\fIPREFIX\\fR, \\fB\\-\\-alias\\fR \\fIPREFIX\\fR:\n.\n.IP\nThe branch prefix to use, or \\fBfeature\\fR if not supplied\\.\n.\n.TP\n\\fB\\-s\\fR \\fISEPARATOR\\fR, \\fB\\-\\-separator\\fR \\fISEPARATOR\\fR:\n.\n.IP\nThe separator to use for joining the branch prefix and the branch name, or \\fB/\\fR if not supplied\\.\n.\n.TP\n\\fB\\-r\\fR [REMOTE_NAME], \\fB\\-\\-remote\\fR [REMOTE_NAME]:\n.\n.IP\nSetup a remote tracking branch using \\fBremote_name\\fR\\. If \\fBremote_name\\fR is not supplied, use \\fBorigin\\fR by default\\.\n.\n.TP\n\\fB\\-\\-from\\fR START_POINT:\n.\n.IP\nSetup a start point when the branch created\\. If \\fB\\-\\-from\\fR is not supplied, use the current branch by default\\. This option will be ignored when \\fBfinish\\fRing a branch\\.\n.\n.TP\n\\fBfinish\\fR:\n.\n.IP\nMerge and delete the feature branch\\.\n.\n.TP\n\\fB\\-\\-squash\\fR:\n.\n.IP\nRun a squash merge when \\fBfinish\\fRing the feature branch\\.\n.\n.TP\n\\fINAME\\fR:\n.\n.IP\nThe name of the feature branch\\.\n.\n.SH \"GIT CONFIG\"\nYou can configure the default branch prefix and separator via git config options\\.\n.\n.TP\n\\fBgit\\-extras\\.feature\\.prefix\\fR:\n.\n.IP\n$ git config \\-\\-global add git\\-extras\\.feature\\.prefix \"prefix\"\n.\n.TP\n\\fBgit\\-extras\\.feature\\.separator\\fR:\n.\n.IP\n$ git config \\-\\-global add git\\-extras\\.feature\\.separator \"\\-\"\n.\n.SH \"EXAMPLES\"\n.\n.TP\nStart a new feature:\n.\n.IP\n$ git feature dependencies\n.\n.br\n\\&\\.\\.\\.\n.\n.br\n$ (feature/dependencies) git commit \\-m \"Some changes\"\n.\n.TP\nFinish a feature with \\-\\-no\\-ff merge:\n.\n.IP\n$ (feature/dependencies) git checkout master\n.\n.br\n$ git feature finish dependencies\n.\n.TP\nFinish a feature with \\-\\-squash merge:\n.\n.IP\n$ (feature/dependencies) git checkout master\n.\n.br\n$ git feature finish \\-\\-squash dependencies\n.\n.TP\nPublish a feature upstream:\n.\n.IP\n$ git feature dependencies \\-r upstream\n.\n.TP\nUse custom branch prefix:\n.\n.IP\n$ git alias features \"feature \\-a features\"\n.\n.br\n$ git features dependencies\n.\n.br\n$ (features/dependencies) \\.\\.\\.\n.\n.br\n$ (features/dependencies) git checkout master\n.\n.br\n$ git features finish dependencies\n.\n.TP\nUse custom branch separator:\n.\n.IP\n$ git feature \\-s \\- dependencies\n.\n.br\n$ (feature\\-dependencies) \\.\\.\\.\n.\n.br\n$ (feature\\-dependencies) git checkout master\n.\n.br\n$ git feature \\-s \\- finish dependencies\n.\n.TP\nUse custom branch prefix and separator from git config with multiple words:\n.\n.IP\n$ git config \\-\\-global \\-\\-add git\\-extras\\.feature\\.prefix \"features\"\n.\n.br\n$ git config \\-\\-global \\-\\-add git\\-extras\\.feature\\.separator \"\\.\"\n.\n.br\n$ git feature dependency tracking\n.\n.br\n$ (features\\.dependency\\-tracking) \\.\\.\\.\n.\n.br\n$ (features\\.dependency\\-tracking) git checkout master\n.\n.br\n$ git feature finish dependency tracking\n.\n.TP\nUse a \\fBgit\\-feature\\fR option or the \\fBfinish\\fR command as part of a branch name:\n.\n.IP\n$ git feature \\-\\- finish remote\n.\n.br\n\\&\\.\\.\\.\n.\n.br\n$ (feature/finish\\-remote) git commit \\-m \"Some changes\"\n.\n.br\n$ (feature/finish\\-remote) git checkout main\n.\n.br\n$ git feature finish \\-\\- finish remote\n.\n.SH \"AUTHOR\"\nWritten by Jesús Espino <\\fIjespinog@gmail\\.com\\fR>\n.\n.br\nModified by Mark Pitman <\\fImark\\.pitman@gmail\\.com\\fR>\n.\n.br\nModified by Carlos Prado <\\fIcarlos\\.prado@cpradog\\.com\\fR>\n.\n.br\nModified by Austin Ziegler <\\fIhalostatue@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>, git\\-create\\-branch(1), git\\-delete\\-branch(1)\n"
  },
  {
    "path": "man/git-feature.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-feature(1) - Create/Merge feature branch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#GIT-CONFIG\">GIT CONFIG</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-feature(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-feature(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-feature</code> - <span class=\"man-whatis\">Create/Merge feature branch</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-feature</code> [-a|--alias <var>PREFIX</var>] [-s|--separator <var>SEPARATOR</var>] [-r|--remote [REMOTE_NAME]] [--from START_POINT] <var>NAME</var>...</p>\n\n<p><code>git-feature</code> [-a|--alias <var>PREFIX</var>] [-s|--separator <var>SEPARATOR</var>] finish [--squash] <var>NAME</var>...</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Create or merge the given feature branch. The feature branch name is made from the <var>PREFIX</var>, the <var>SEPARATOR</var>, and the <var>NAME</var> joined together.</p>\n\n<p>The default <var>PREFIX</var> is <code>feature</code> and <var>SEPARATOR</var> is <code>/</code>, which can be changed (see OPTIONS and GIT CONFIG for details).</p>\n\n<p>The branch <var>NAME</var> may be specified as multiple words which will be joined with <code>-</code>. If the branch name contains the word <code>finish</code> or is another OPTION, <code>--</code> should be passed to stop OPTION parsing. See the EXAMPLES for details.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<dl>\n<dt><code>-a</code> <var>PREFIX</var>, <code>--alias</code> <var>PREFIX</var>:</dt><dd><p></p>\n\n<p>The branch prefix to use, or <code>feature</code> if not supplied.</p></dd>\n<dt><code>-s</code> <var>SEPARATOR</var>, <code>--separator</code> <var>SEPARATOR</var>:</dt><dd><p></p>\n\n<p>The separator to use for joining the branch prefix and the branch name, or <code>/</code> if not supplied.</p></dd>\n<dt><code>-r</code> [REMOTE_NAME], <code>--remote</code> [REMOTE_NAME]:</dt><dd><p></p>\n\n<p>Setup a remote tracking branch using <code>remote_name</code>. If <code>remote_name</code> is not supplied, use <code>origin</code> by default.</p></dd>\n<dt><code>--from</code> START_POINT:</dt><dd><p></p>\n\n<p>Setup a start point when the branch created. If <code>--from</code> is not supplied, use the current branch by default. This option will be ignored when <code>finish</code>ing a branch.</p></dd>\n<dt class=\"flush\"><code>finish</code>:</dt><dd><p></p>\n\n<p>Merge and delete the feature branch.</p></dd>\n<dt><code>--squash</code>:</dt><dd><p></p>\n\n<p>Run a squash merge when <code>finish</code>ing the feature branch.</p></dd>\n<dt class=\"flush\"><var>NAME</var>:</dt><dd><p></p>\n\n<p>The name of the feature branch.</p></dd>\n</dl>\n\n\n<h2 id=\"GIT-CONFIG\">GIT CONFIG</h2>\n\n<p>You can configure the default branch prefix and separator via git config options.</p>\n\n<dl>\n<dt><code>git-extras.feature.prefix</code>:</dt><dd><p></p>\n\n<p>  $ git config --global add git-extras.feature.prefix \"prefix\"</p></dd>\n<dt><code>git-extras.feature.separator</code>:</dt><dd><p></p>\n\n<p>  $ git config --global add git-extras.feature.separator \"-\"</p></dd>\n</dl>\n\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<dl>\n<dt>Start a new feature:</dt><dd><p></p>\n\n<p>$ git feature dependencies<br />\n...<br />\n$ (feature/dependencies) git commit -m \"Some changes\"</p></dd>\n<dt>Finish a feature with --no-ff merge:</dt><dd><p></p>\n\n<p>$ (feature/dependencies) git checkout master<br />\n$ git feature finish dependencies</p></dd>\n<dt>Finish a feature with --squash merge:</dt><dd><p></p>\n\n<p>$ (feature/dependencies) git checkout master<br />\n$ git feature finish --squash dependencies</p></dd>\n<dt>Publish a feature upstream:</dt><dd><p></p>\n\n<p>$ git feature dependencies -r upstream</p></dd>\n<dt>Use custom branch prefix:</dt><dd><p></p>\n\n<p>$ git alias features \"feature -a features\"<br />\n$ git features dependencies<br />\n$ (features/dependencies) ...<br />\n$ (features/dependencies) git checkout master<br />\n$ git features finish dependencies</p></dd>\n<dt>Use custom branch separator:</dt><dd><p></p>\n\n<p>$ git feature -s - dependencies<br />\n$ (feature-dependencies) ...<br />\n$ (feature-dependencies) git checkout master<br />\n$ git feature -s - finish dependencies</p></dd>\n<dt>Use custom branch prefix and separator from git config with multiple words:</dt><dd><p></p>\n\n<p>$ git config --global --add git-extras.feature.prefix \"features\"<br />\n$ git config --global --add git-extras.feature.separator \".\"<br />\n$ git feature dependency tracking<br />\n$ (features.dependency-tracking) ...<br />\n$ (features.dependency-tracking) git checkout master<br />\n$ git feature finish dependency tracking</p></dd>\n<dt>Use a <code>git-feature</code> option or the <code>finish</code> command as part of a branch name:</dt><dd><p></p>\n\n<p>$ git feature -- finish remote<br />\n...<br />\n$ (feature/finish-remote) git commit -m \"Some changes\"<br />\n$ (feature/finish-remote) git checkout main<br />\n$ git feature finish -- finish remote</p></dd>\n</dl>\n\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jesús Espino &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#58;&#106;&#x65;&#x73;&#112;&#x69;&#x6e;&#111;&#x67;&#64;&#103;&#109;&#97;&#105;&#x6c;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x6a;&#101;&#x73;&#x70;&#105;&#110;&#x6f;&#x67;&#64;&#103;&#109;&#x61;&#x69;&#108;&#46;&#99;&#111;&#x6d;</a>&gt;<br />\nModified by Mark Pitman &lt;<a href=\"&#x6d;&#x61;&#x69;&#108;&#x74;&#x6f;&#58;&#x6d;&#97;&#x72;&#107;&#46;&#112;&#x69;&#116;&#x6d;&#97;&#x6e;&#64;&#x67;&#109;&#97;&#105;&#108;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x6d;&#x61;&#114;&#107;&#46;&#x70;&#105;&#x74;&#109;&#x61;&#x6e;&#64;&#103;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#99;&#x6f;&#109;</a>&gt;<br />\nModified by Carlos Prado &lt;<a href=\"&#109;&#x61;&#x69;&#108;&#x74;&#x6f;&#x3a;&#99;&#97;&#114;&#x6c;&#x6f;&#x73;&#x2e;&#x70;&#114;&#97;&#100;&#x6f;&#x40;&#x63;&#x70;&#x72;&#x61;&#100;&#111;&#103;&#46;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#x63;&#97;&#x72;&#108;&#x6f;&#x73;&#x2e;&#x70;&#x72;&#97;&#100;&#111;&#x40;&#99;&#x70;&#x72;&#97;&#x64;&#111;&#x67;&#x2e;&#99;&#111;&#109;</a>&gt;<br />\nModified by Austin Ziegler &lt;<a href=\"&#109;&#x61;&#105;&#108;&#116;&#x6f;&#x3a;&#x68;&#97;&#108;&#x6f;&#x73;&#x74;&#x61;&#x74;&#117;&#x65;&#x40;&#103;&#109;&#x61;&#x69;&#x6c;&#x2e;&#x63;&#111;&#109;\" data-bare-link=\"true\">&#104;&#97;&#x6c;&#111;&#115;&#116;&#97;&#x74;&#117;&#x65;&#64;&#x67;&#x6d;&#97;&#x69;&#x6c;&#46;&#99;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;, <a class=\"man-ref\" href=\"git-create-branch.html\">git-create-branch<span class=\"s\">(1)</span></a>, <a class=\"man-ref\" href=\"git-delete-branch.html\">git-delete-branch<span class=\"s\">(1)</span></a></p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>December 2023</li>\n    <li class='tr'>git-feature(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-feature.md",
    "content": "git-feature(1) -- Create/Merge feature branch\n========================================================\n\n## SYNOPSIS\n\n`git-feature` [-a|--alias <PREFIX>] [-s|--separator <SEPARATOR>] [-r|--remote [REMOTE_NAME]] [--from START_POINT] <NAME>...\n\n`git-feature` [-a|--alias <PREFIX>] [-s|--separator <SEPARATOR>] finish [--squash] <NAME>...\n\n## DESCRIPTION\n\nCreate or merge the given feature branch. The feature branch name is made from the <PREFIX>, the <SEPARATOR>, and the <NAME> joined together.\n\nThe default <PREFIX> is `feature` and <SEPARATOR> is `/`, which can be changed (see OPTIONS and GIT CONFIG for details).\n\nThe branch <NAME> may be specified as multiple words which will be joined with `-`. If the branch name contains the word `finish` or is another OPTION, `--` should be passed to stop OPTION parsing. See the EXAMPLES for details.\n\n## OPTIONS\n\n- `-a` <PREFIX>, `--alias` <PREFIX>:\n\n  The branch prefix to use, or `feature` if not supplied.\n\n- `-s` <SEPARATOR>, `--separator` <SEPARATOR>:\n\n  The separator to use for joining the branch prefix and the branch name, or `/` if not supplied.\n\n- `-r` [REMOTE_NAME], `--remote` [REMOTE_NAME]:\n\n  Setup a remote tracking branch using `remote_name`. If `remote_name` is not supplied, use `origin` by default.\n\n- `--from` START_POINT:\n\n  Setup a start point when the branch created. If `--from` is not supplied, use the current branch by default. This option will be ignored when `finish`ing a branch.\n\n- `finish`:\n\n  Merge and delete the feature branch.\n\n- `--squash`:\n\n  Run a squash merge when `finish`ing the feature branch.\n\n- <NAME>:\n\n  The name of the feature branch.\n\n## GIT CONFIG\n\nYou can configure the default branch prefix and separator via git config options.\n\n- `git-extras.feature.prefix`:\n\n    $ git config --global add git-extras.feature.prefix \"prefix\"\n\n- `git-extras.feature.separator`:\n\n    $ git config --global add git-extras.feature.separator \"-\"\n\n## EXAMPLES\n\n- Start a new feature:\n\n  $ git feature dependencies  \n  ...  \n  $ (feature/dependencies) git commit -m \"Some changes\"\n\n- Finish a feature with --no-ff merge:\n\n  $ (feature/dependencies) git checkout master  \n  $ git feature finish dependencies\n\n- Finish a feature with --squash merge:\n\n  $ (feature/dependencies) git checkout master  \n  $ git feature finish --squash dependencies\n\n- Publish a feature upstream:\n\n  $ git feature dependencies -r upstream\n\n- Use custom branch prefix:\n\n  $ git alias features \"feature -a features\"  \n  $ git features dependencies  \n  $ (features/dependencies) ...  \n  $ (features/dependencies) git checkout master  \n  $ git features finish dependencies\n\n- Use custom branch separator:\n\n  $ git feature -s - dependencies  \n  $ (feature-dependencies) ...  \n  $ (feature-dependencies) git checkout master  \n  $ git feature -s - finish dependencies\n\n- Use custom branch prefix and separator from git config with multiple words:\n\n  $ git config --global --add git-extras.feature.prefix \"features\"  \n  $ git config --global --add git-extras.feature.separator \".\"  \n  $ git feature dependency tracking  \n  $ (features.dependency-tracking) ...  \n  $ (features.dependency-tracking) git checkout master  \n  $ git feature finish dependency tracking\n\n- Use a `git-feature` option or the `finish` command as part of a branch name:\n\n  $ git feature -- finish remote  \n  ...  \n  $ (feature/finish-remote) git commit -m \"Some changes\"  \n  $ (feature/finish-remote) git checkout main  \n  $ git feature finish -- finish remote\n\n## AUTHOR\n\nWritten by Jesús Espino &lt;<jespinog@gmail.com>&gt;  \nModified by Mark Pitman &lt;<mark.pitman@gmail.com>&gt;  \nModified by Carlos Prado &lt;<carlos.prado@cpradog.com>&gt;  \nModified by Austin Ziegler &lt;<halostatue@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;, git-create-branch(1), git-delete-branch(1)\n"
  },
  {
    "path": "man/git-force-clone.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-FORCE\\-CLONE\" \"1\" \"August 2021\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-force\\-clone\\fR \\- overwrite local repositories with clone\n.SH \"SYNOPSIS\"\n\\fBforce\\-clone \\-\\-help\\fR\n.br\n\\fBforce\\-clone {remote_url} {destination_path}\\fR\n.br\n\\fBforce\\-clone \\-\\-branch {branch_name} {remote_url} {destination_path}\\fR\n.SH \"DESCRIPTION\"\nProvides the basic functionality of \\fBgit clone\\fR, but if the destination git repository already exists it will force\\-reset it to resemble a clone of the remote\\.\n.P\nBecause it doesn\\'t actually delete the directory, it is usually significantly faster than the alternative of deleting the directory and cloning the repository from scratch\\.\n.P\n\\fBCAUTION\\fR: If the repository exists, this will destroy \\fIall\\fR local work: changed files will be reset, local branches and other remotes will be removed\\.\n.SH \"PROCESS\"\nIf \\fBtarget\\-directory\\fR doesn\\'t exist or isn\\'t a git repository then the arguments will simply be passed through to \\fBgit clone\\fR\\.\n.P\nIf \\fBtarget\\-directory\\fR exists and is a git repository then this will:\n.IP \"\\[ci]\" 4\nRemove all remotes\n.IP \"\\[ci]\" 4\nSet the origin remote to \\fB{remote_url}\\fR and fetch the remote\n.IP \"\\[ci]\" 4\nDiscover the default branch, if no branch was specified\n.IP \"\\[ci]\" 4\nCheck out the selected branch\n.IP \"\\[ci]\" 4\nDelete all other local branches\n.IP \"\" 0\n.SH \"OPTIONS\"\n\\fB{remote_url}\\fR \\- The URL for a git remote repository of which to make a clone\\. \\fB{destination_path}\\fR \\- A path to the local git repository location to clone into\\. \\fB\\-\\-branch {branch_name}\\fR \\- After cloning, checkout this branch\\.\n.SH \"EXAMPLES\"\n\\fBgit\\-force\\-clone \\-b master git@github\\.com:me/repo\\.git \\./repo_dir\\fR\n.SH \"AUTHOR\"\nWritten by Robin Winslow \\fIrobin@robinwinslow\\.co\\.uk\\fR\\.\n.SH \"REPORTING BUGS\"\n\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR\n.SH \"SEE ALSO\"\n\\fIhttps://github\\.com/tj/git\\-extras\\fR\n"
  },
  {
    "path": "man/git-force-clone.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-force-clone(1) - overwrite local repositories with clone</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#PROCESS\">PROCESS</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-force-clone(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-force-clone(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-force-clone</code> - <span class=\"man-whatis\">overwrite local repositories with clone</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>force-clone --help</code><br>\n<code>force-clone {remote_url} {destination_path}</code><br>\n<code>force-clone --branch {branch_name} {remote_url} {destination_path}</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Provides the basic functionality of <code>git clone</code>, but if the destination git\nrepository already exists it will force-reset it to resemble a clone of the\nremote.</p>\n\n<p>Because it doesn't actually delete the directory, it is usually significantly\nfaster than the alternative of deleting the directory and cloning the\nrepository from scratch.</p>\n\n<p><strong>CAUTION</strong>: If the repository exists, this will destroy <em>all</em> local work:\nchanged files will be reset, local branches and other remotes will be removed.</p>\n\n<h2 id=\"PROCESS\">PROCESS</h2>\n\n<p>If <code>target-directory</code> doesn't exist or isn't a git repository then the\narguments will simply be passed through to <code>git clone</code>.</p>\n\n<p>If <code>target-directory</code> exists and is a git repository then this will:</p>\n\n<ul>\n  <li>Remove all remotes</li>\n  <li>Set the origin remote to <code>{remote_url}</code> and fetch the remote</li>\n  <li>Discover the default branch, if no branch was specified</li>\n  <li>Check out the selected branch</li>\n  <li>Delete all other local branches</li>\n</ul>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p><code>{remote_url}</code> - The URL for a git remote repository of which to make a clone.\n<code>{destination_path}</code> - A path to the local git repository location to clone into.\n<code>--branch {branch_name}</code> - After cloning, checkout this branch.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p><code>git-force-clone -b master git@github.com:me/repo.git ./repo_dir</code></p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Robin Winslow <a href=\"mailto:robin@robinwinslow.co.uk\" data-bare-link=\"true\">robin@robinwinslow.co.uk</a>.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p><a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a></p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p><a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a></p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2021</li>\n    <li class='tr'>git-force-clone(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-force-clone.md",
    "content": "git-force-clone(1) -- overwrite local repositories with clone\n===\n\n## SYNOPSIS\n\n`force-clone --help`  \n`force-clone {remote_url} {destination_path}`  \n`force-clone --branch {branch_name} {remote_url} {destination_path}`  \n\n## DESCRIPTION\n\nProvides the basic functionality of `git clone`, but if the destination git\nrepository already exists it will force-reset it to resemble a clone of the\nremote.\n\nBecause it doesn't actually delete the directory, it is usually significantly\nfaster than the alternative of deleting the directory and cloning the\nrepository from scratch.\n\n**CAUTION**: If the repository exists, this will destroy *all* local work:\nchanged files will be reset, local branches and other remotes will be removed.\n\n## PROCESS\n\nIf `target-directory` doesn't exist or isn't a git repository then the\narguments will simply be passed through to `git clone`.\n\nIf `target-directory` exists and is a git repository then this will:\n\n- Remove all remotes\n- Set the origin remote to `{remote_url}` and fetch the remote\n- Discover the default branch, if no branch was specified\n- Check out the selected branch\n- Delete all other local branches\n\n## OPTIONS\n\n`{remote_url}` - The URL for a git remote repository of which to make a clone.\n`{destination_path}` - A path to the local git repository location to clone into.\n`--branch {branch_name}` - After cloning, checkout this branch.\n\n## EXAMPLES\n\n`git-force-clone -b master git@github.com:me/repo.git ./repo_dir`\n\n## AUTHOR\n\nWritten by Robin Winslow <robin@robinwinslow.co.uk>.\n\n## REPORTING BUGS\n\n<https://github.com/tj/git-extras/issues>\n\n## SEE ALSO\n\n<https://github.com/tj/git-extras>\n"
  },
  {
    "path": "man/git-fork.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-FORK\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-fork\\fR \\- Fork a repo on github\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-fork\\fR [<github\\-repo\\-url>]\n.\n.SH \"DESCRIPTION\"\nIf a github repo url is given, fork the repo\\. Like clone but forks first\\.\n.\n.IP \"1.\" 4\nforks the repo on github\n.\n.IP \"2.\" 4\nclones the repo into the current dir\n.\n.IP \"3.\" 4\nadds the original repo as a remote called \\fBupstream\\fR\n.\n.IP \"\" 0\n.\n.P\nIf a url is not given and the current dir is a github repo, fork the repo\\.\n.\n.IP \"1.\" 4\nforks the current repo\n.\n.IP \"2.\" 4\nrename the \\fBorigin\\fR remote repo to \\fBupstream\\fR\n.\n.IP \"3.\" 4\nadds the forked repo as a remote called \\fBorigin\\fR\n.\n.IP \"\" 0\n.\n.P\nRemotes will use ssh if you have it configured with GitHub, if not, https will be used\\.\n.\nCreate a fork a project on GitHub via command line\\.\n.\n.P\nA personal access token is required for making the API call to create a new fork in GitHub\\. API Documentation here \\fIhttps://docs\\.github\\.com/en/rest/reference/repos#forks\\fR\n.\n.P\nMake sure the personal access token has the right \\fBOAuth\\fR scopes for the repo(s)\n.\n.P\nUse \\fBGITHUB_TOKEN\\fR environment variable, or \\fBgit config \\-\\-global \\-\\-add git\\-extras\\.github\\-personal\\-access\\-token <your\\-personal\\-access\\-token>\\fR\n.\n.P\nIf using multiple accounts, override the global value in the specific repo using \\fBgit config git\\-extras\\.github\\-personal\\-access\\-token <other\\-acc\\-personal\\-access\\-token>\\fR\n.\n.SH \"EXAMPLE\"\nFork expect\\.js:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git fork https://github\\.com/LearnBoost/expect\\.js\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nor just:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git fork LearnBoost/expect\\.js\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nThen:\n.\n.IP \"\" 4\n.\n.nf\n\n$ \\.\\.<forks into your github profile and clones repo locally to expect\\.js dir>\\.\\.\\.\n\n$ cd expect\\.js && git remote \\-v\n\n  origin          git@github\\.com:<user>/expect\\.js (fetch)\n  origin          git@github\\.com:<user>/expect\\.js (push)\n  upstream        git@github\\.com:LearnBoost/expect\\.js (fetch)\n  upstream        git@github\\.com:LearnBoost/expect\\.js (push)\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nIf the current dir is a clone of expect\\.js, this has the same effect:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git fork\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Andrew Griffiths <\\fImail@andrewgriffithsonline\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-fork.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-fork(1) - Fork a repo on github</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLE\">EXAMPLE</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-fork(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-fork(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-fork</code> - <span class=\"man-whatis\">Fork a repo on github</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-fork</code> [&lt;github-repo-url&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  If a github repo url is given, fork the repo. Like clone but forks first.</p>\n\n<ol>\n<li>forks the repo on github</li>\n<li>clones the repo into the current dir</li>\n<li>adds the original repo as a remote called <code>upstream</code></li>\n</ol>\n\n\n<p>  If a url is not given and the current dir is a github repo, fork the repo.</p>\n\n<ol>\n<li>forks the current repo</li>\n<li>rename the <code>origin</code> remote repo to <code>upstream</code></li>\n<li>adds the forked repo as a remote called <code>origin</code></li>\n</ol>\n\n\n<p>  Remotes will use ssh if you have it configured with GitHub, if not, https will be used.</p>\n\n<p>Create a fork of a project on GitHub via command line.</p>\n\n<p>A personal access token is required for making the API call to create a new fork in GitHub. <a href=\"https://docs.github.com/en/rest/reference/repos#forks\">API Documentation here</a></p>\n\n<p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p>\n\n<p>Use <code>GITHUB_TOKEN</code> environment variable, or <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token></code></p>\n\n<p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token></code></p>\n\n<h2 id=\"EXAMPLE\">EXAMPLE</h2>\n\n<p>  Fork expect.js:</p>\n\n<pre><code>$ git fork https://github.com/LearnBoost/expect.js\n</code></pre>\n\n<p>  or just:</p>\n\n<pre><code>$ git fork LearnBoost/expect.js\n</code></pre>\n\n<p>  Then:</p>\n\n<pre><code>$ ..&lt;forks into your github profile and clones repo locally to expect.js dir&gt;...\n\n$ cd expect.js &amp;&amp; git remote -v\n\n  origin          git@github.com:&lt;user>/expect.js (fetch)\n  origin          git@github.com:&lt;user>/expect.js (push)\n  upstream        git@github.com:LearnBoost/expect.js (fetch)\n  upstream        git@github.com:LearnBoost/expect.js (push)\n</code></pre>\n\n<p>  If the current dir is a clone of expect.js, this has the same effect:</p>\n\n<pre><code>$ git fork\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Andrew Griffiths &lt;<a href=\"&#109;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#109;&#97;&#x69;&#x6c;&#64;&#x61;&#x6e;&#x64;&#x72;&#101;&#x77;&#103;&#114;&#x69;&#x66;&#102;&#105;&#116;&#x68;&#115;&#111;&#110;&#108;&#105;&#110;&#101;&#46;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#109;&#97;&#105;&#x6c;&#x40;&#97;&#110;&#x64;&#114;&#101;&#x77;&#x67;&#114;&#x69;&#102;&#102;&#x69;&#x74;&#104;&#115;&#x6f;&#110;&#x6c;&#x69;&#110;&#x65;&#46;&#99;&#x6f;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-fork(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-fork.md",
    "content": "git-fork(1) -- Fork a repo on github\n====================================\n\n## SYNOPSIS\n\n`git-fork` [&lt;github-repo-url&gt;]\n\n## DESCRIPTION\n\n  If a github repo url is given, fork the repo. Like clone but forks first.\n\n  1. forks the repo on github\n  2. clones the repo into the current dir\n  3. adds the original repo as a remote called `upstream`\n\n  If a url is not given and the current dir is a github repo, fork the repo.\n\n  1. forks the current repo\n  2. rename the `origin` remote repo to `upstream`\n  3. adds the forked repo as a remote called `origin`\n\n  Remotes will use ssh if you have it configured with GitHub, if not, https will be used.\n\n  Create a fork of a project on GitHub via command line.\n  \n  A personal access token is required for making the API call to create a fork in GitHub. [API Documentation here](https://docs.github.com/en/rest/reference/repos#forks)\n  \n  Make sure the personal access token has the right `OAuth` scopes for the repo(s)\n  \n  Use `GITHUB_TOKEN` environment variable, or `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>`\n  \n  If using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>`\n\n## EXAMPLE\n\n  Fork expect.js:\n\n    $ git fork https://github.com/LearnBoost/expect.js\n\n  or just:\n\n    $ git fork LearnBoost/expect.js\n\n  Then:\n\n    $ ..<forks into your github profile and clones repo locally to expect.js dir>...\n\n    $ cd expect.js && git remote -v\n\n      origin          git@github.com:<user>/expect.js (fetch)\n      origin          git@github.com:<user>/expect.js (push)\n      upstream        git@github.com:LearnBoost/expect.js (fetch)\n      upstream        git@github.com:LearnBoost/expect.js (push)\n\n  If the current dir is a clone of expect.js, this has the same effect:\n\n    $ git fork\n\n\n## AUTHOR\n\nWritten by Andrew Griffiths &lt;<mail@andrewgriffithsonline.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-fresh-branch.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-FRESH\\-BRANCH\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-fresh\\-branch\\fR \\- Create fresh branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-fresh\\-branch\\fR <branchname>\n.\n.SH \"DESCRIPTION\"\nCreates empty local branch named <branchname>\\.\n.\n.SH \"OPTIONS\"\n<branchname>\n.\n.P\nThe name of the branch to create\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git fresh\\-branch docs\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Kenneth Reitz <\\fIme@kennethreitz\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-fresh-branch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-fresh-branch(1) - Create fresh branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-fresh-branch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-fresh-branch(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-fresh-branch</code> - <span class=\"man-whatis\">Create fresh branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-fresh-branch</code> &lt;branchname&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Creates empty local branch named &lt;branchname&gt;.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;branchname&gt;</p>\n\n<p>  The name of the branch to create.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git fresh-branch docs\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Kenneth Reitz &lt;<a href=\"&#109;&#97;&#105;&#x6c;&#x74;&#x6f;&#58;&#109;&#x65;&#64;&#107;&#101;&#x6e;&#x6e;&#101;&#x74;&#x68;&#x72;&#x65;&#x69;&#x74;&#x7a;&#46;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#109;&#x65;&#64;&#x6b;&#x65;&#110;&#x6e;&#x65;&#x74;&#104;&#114;&#x65;&#x69;&#116;&#122;&#x2e;&#99;&#x6f;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-fresh-branch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-fresh-branch.md",
    "content": "git-fresh-branch(1) -- Create fresh branches\n============================================\n\n## SYNOPSIS\n\n`git-fresh-branch` &lt;branchname&gt;\n\n## DESCRIPTION\n\n  Creates empty local branch named &lt;branchname&gt;.\n\n## OPTIONS\n\n  &lt;branchname&gt;\n\n  The name of the branch to create.\n\n## EXAMPLES\n\n    $ git fresh-branch docs\n\n## AUTHOR\n\nWritten by Kenneth Reitz &lt;<me@kennethreitz.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-get.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-GET\" \"1\" \"May 2023\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-get\\fR \\- Clone a Git repository under a directory\n.SH \"SYNOPSIS\"\n\\fBgit\\-get\\fR\n.SH \"DESCRIPTION\"\nClones a Git repository under the directory specified by the Git configuration \\fBgit\\-extras\\.get\\.clone\\-path\\fR\n.SH \"EXAMPLES\"\n.nf\n$ git config \\-\\-add git\\-extras\\.get\\.clone\\-path \"$HOME/some\\-dir\"\n$ git get 'https://github\\.com/hyperupcall/bake'\nCloning into '/home/<user>/some\\-dir/bake'\\|\\.\\|\\.\\|\\.\nremote: Enumerating objects: 1199, done\\.\nremote: Counting objects: 100% (378/378), done\\.\nremote: Compressing objects: 100% (174/174), done\\.\nremote: Total 1199 (delta 163), reused 357 (delta 146), pack\\-reused 821\nReceiving objects: 100% (1199/1199), 3\\.05 MiB | 9\\.85 MiB/s, done\\.\nResolving deltas: 100% (515/515), done\\.\n$\n.fi\n.SH \"AUTHOR\"\nWritten by Edwin Kofler <\\fIedwin@kofler\\.dev\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-get.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-get(1) - Clone a Git repository under a directory</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-get(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-get(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-get</code> - <span class=\"man-whatis\">Clone a Git repository under a directory</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-get</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Clones a Git repository under the directory specified by the Git configuration <code>git-extras.get.clone-path</code></p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git config --add git-extras.get.clone-path \"$HOME/some-dir\"\n$ git get 'https://github.com/hyperupcall/bake'\nCloning into '/home/&lt;user&gt;/some-dir/bake'...\nremote: Enumerating objects: 1199, done.\nremote: Counting objects: 100% (378/378), done.\nremote: Compressing objects: 100% (174/174), done.\nremote: Total 1199 (delta 163), reused 357 (delta 146), pack-reused 821\nReceiving objects: 100% (1199/1199), 3.05 MiB | 9.85 MiB/s, done.\nResolving deltas: 100% (515/515), done.\n$\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Edwin Kofler &lt;<a href=\"mailto:edwin@kofler.dev\" data-bare-link=\"true\">edwin@kofler.dev</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2023</li>\n    <li class='tr'>git-get(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-get.md",
    "content": "git-get(1) -- Clone a Git repository under a configured directory\n=================================================\n\n## SYNOPSIS\n\n`git-get`\n\n## DESCRIPTION\n\n  Clones a Git repository under the directory specified by the Git configuration `git-extras.get.clone-path`\n\n## EXAMPLES\n\n    $ git config --add git-extras.get.clone-path \"$HOME/some-dir\"\n    $ git get 'https://github.com/hyperupcall/bake'\n    Cloning into '/home/<user>/some-dir/bake'...\n    remote: Enumerating objects: 1199, done.\n    remote: Counting objects: 100% (378/378), done.\n    remote: Compressing objects: 100% (174/174), done.\n    remote: Total 1199 (delta 163), reused 357 (delta 146), pack-reused 821\n    Receiving objects: 100% (1199/1199), 3.05 MiB | 9.85 MiB/s, done.\n    Resolving deltas: 100% (515/515), done.\n    $\n\n## AUTHOR\n\nWritten by Edwin Kofler &lt;<edwin@kofler.dev>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-gh-pages.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-GH\\-PAGES\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-gh\\-pages\\fR \\- Create the GitHub Pages branch\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-gh\\-pages\\fR\n.\n.SH \"DESCRIPTION\"\nCreate the GitHub Pages branch (gh\\-pages) with an initial dummy index\\.html file\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git gh\\-pages\nsetting up gh\\-pages\nRemoving \\.\\.\\.\n[gh\\-pages (root\\-commit) 94f4b26] Initial commit\n 1 file changed, 1 insertion(+)\n create mode 100644 index\\.html\nCounting objects: 3, done\\.\nWriting objects: 100% (3/3), 232 bytes, done\\.\nTotal 3 (delta 0), reused 0 (delta 0)\nTo git@github\\.com:myuser/myrepository\\.git\n * [new branch]      gh\\-pages \\-> gh\\-pages\nBranch gh\\-pages set up to track remote branch gh\\-pages from origin\\.\ncomplete\n$\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jesús Espino <\\fIjespinog@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-gh-pages.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-gh-pages(1) - Create the GitHub Pages branch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-gh-pages(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-gh-pages(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-gh-pages</code> - <span class=\"man-whatis\">Create the GitHub Pages branch</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-gh-pages</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Create the GitHub Pages branch (gh-pages) with an initial dummy index.html file.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git gh-pages\nsetting up gh-pages\nRemoving ...\n[gh-pages (root-commit) 94f4b26] Initial commit\n 1 file changed, 1 insertion(+)\n create mode 100644 index.html\nCounting objects: 3, done.\nWriting objects: 100% (3/3), 232 bytes, done.\nTotal 3 (delta 0), reused 0 (delta 0)\nTo git@github.com:myuser/myrepository.git\n * [new branch]      gh-pages -&gt; gh-pages\nBranch gh-pages set up to track remote branch gh-pages from origin.\ncomplete\n$\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jesús Espino &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#x74;&#x6f;&#x3a;&#x6a;&#x65;&#115;&#x70;&#105;&#x6e;&#111;&#x67;&#x40;&#103;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#99;&#111;&#x6d;\" data-bare-link=\"true\">&#x6a;&#101;&#x73;&#112;&#105;&#110;&#x6f;&#103;&#64;&#103;&#x6d;&#x61;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-gh-pages(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-gh-pages.md",
    "content": "git-gh-pages(1) -- Create the GitHub Pages branch\n=================================================\n\n## SYNOPSIS\n\n`git-gh-pages`\n\n## DESCRIPTION\n\n  Create the GitHub Pages branch (gh-pages) with an initial dummy index.html file.\n\n## EXAMPLES\n\n    $ git gh-pages\n    setting up gh-pages\n    Removing ...\n    [gh-pages (root-commit) 94f4b26] Initial commit\n     1 file changed, 1 insertion(+)\n     create mode 100644 index.html\n    Counting objects: 3, done.\n    Writing objects: 100% (3/3), 232 bytes, done.\n    Total 3 (delta 0), reused 0 (delta 0)\n    To git@github.com:myuser/myrepository.git\n     * [new branch]      gh-pages -> gh-pages\n    Branch gh-pages set up to track remote branch gh-pages from origin.\n    complete\n    $\n\n\n## AUTHOR\n\nWritten by Jesús Espino &lt;<jespinog@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-graft.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-GRAFT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-graft\\fR \\- Merge and destroy a given branch\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-graft\\fR <src\\-branch> <dest\\-branch>\n.\n.SH \"DESCRIPTION\"\nMerge commits from <src\\-branch> into <dest\\-branch>\n.\n.SH \"OPTIONS\"\n<src\\-branch>\n.\n.P\n<dest\\-branch>\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git graft new_feature dev\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Kenneth Reitz <\\fIme@kennethreitz\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-graft.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-graft(1) - Merge and destroy a given branch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-graft(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-graft(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-graft</code> - <span class=\"man-whatis\">Merge and destroy a given branch</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-graft</code> &lt;src-branch&gt; &lt;dest-branch&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Merge commits from &lt;src-branch&gt; into &lt;dest-branch&gt;</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;src-branch&gt;</p>\n\n<p>  &lt;dest-branch&gt;</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git graft new_feature dev\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Kenneth Reitz &lt;<a href=\"&#109;&#97;&#105;&#x6c;&#x74;&#x6f;&#58;&#109;&#x65;&#64;&#107;&#101;&#x6e;&#x6e;&#101;&#x74;&#x68;&#x72;&#x65;&#x69;&#x74;&#x7a;&#46;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#109;&#x65;&#64;&#x6b;&#x65;&#110;&#x6e;&#x65;&#x74;&#104;&#114;&#x65;&#x69;&#116;&#122;&#x2e;&#99;&#x6f;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-graft(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-graft.md",
    "content": "git-graft(1) -- Merge and destroy a given branch\n======================================\n\n## SYNOPSIS\n\n`git-graft` &lt;src-branch&gt; &lt;dest-branch&gt;\n\n## DESCRIPTION\n\n  Merge commits from &lt;src-branch&gt; into &lt;dest-branch&gt;\n\n## OPTIONS\n\n  &lt;src-branch&gt;\n\n  &lt;dest-branch&gt;\n\n## EXAMPLES\n\n    $ git graft new_feature dev\n\n## AUTHOR\n\nWritten by Kenneth Reitz &lt;<me@kennethreitz.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-guilt.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-GUILT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-guilt\\fR \\- calculate change between two revisions\n.\n.SH \"SYNOPSIS\"\n\\fBgit guilt\\fR [<option>]\n.\n.br\n\\fBgit guilt\\fR [<option>] <since> [<until>]\n.\n.SH \"DESCRIPTION\"\nIn the first form, shows total blame count for files with unstaged changes\\.\n.\n.P\nIn the second form, calculates the change in blame between two revisions\\. If not specified, <until> will default to HEAD\\.\n.\n.SH \"OPTIONS\"\n\\-h\n.\n.P\nOutput usage information\n.\n.P\n\\-e, \\-\\-email\n.\n.P\nDisplay author emails instead of names\n.\n.P\n\\-w, \\-\\-ignore\\-whitespace\n.\n.P\nIgnore whitespace only changes when attributing blame\n.\n.P\n\\-d, \\-\\-debug\n.\n.P\nOutput debug information\n.\n.SH \"Examples\"\nFind blame on unstaged modified files:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git guilt      (1)\nspacewander                   ++++\n\n(1) There is only one modified file and it is not staged\\. The four\npluses means that the file has four lines, all contributed by spacewander\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nFind blame delta between two commits:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git guilt HEAD~3 HEAD^\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(115)\nJesse Sipprell                \\-\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nFind blame delta over the last three weeks:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git guilt `git log \\-\\-until=\"3 weeks ago\" \\-\\-format=\"%H\" \\-n 1`\nPaul Schreiber                +++++++++++++++++++++++++++++++++++++++++++++(349)\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(113)\nMark Eissler                  ++++++++++++++++++++++++++\nCJ                            +++++\nnickl\\-                        \\-\nJesse Sipprell                \\-\nEvan Grim                     \\-\nBen Parnell                   \\-\nhemanth\\.hm                    \\-\\-\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nSince git 1\\.8\\.5, the above can also be written as:\n.\n.P\n$ git guilt @{3\\.weeks\\.ago}\n.\n.P\nFind blame delta for a topic branch:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git guilt `git merge\\-base master git\\-guilt` git\\-guilt\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(112)\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by spacewander <\\fIspacewanderlzx@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-guilt.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-guilt(1) - calculate change between two revisions</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#Examples\">Examples</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-guilt(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-guilt(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-guilt</code> - <span class=\"man-whatis\">calculate change between two revisions</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git guilt</code> [&lt;option&gt;]<br />\n<code>git guilt</code> [&lt;option&gt;] &lt;since&gt; [&lt;until&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>In the first form, shows total blame count for files with unstaged changes.</p>\n\n<p>In the second form, calculates the change in blame between two revisions.\nIf not specified, &lt;until&gt; will default to HEAD.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -h</p>\n\n<p>  Output usage information</p>\n\n<p>  -e, --email</p>\n\n<p>  Display author emails instead of names</p>\n\n<p>  -w, --ignore-whitespace</p>\n\n<p>  Ignore whitespace only changes when attributing blame</p>\n\n<p>  -d, --debug</p>\n\n<p>  Output debug information</p>\n\n<h2 id=\"Examples\">Examples</h2>\n\n<p>Find blame on unstaged modified files:</p>\n\n<pre><code>$ git guilt      (1)\nspacewander                   ++++\n\n(1) There is only one modified file and it is not staged. The four\npluses means that the file has four lines, all contributed by spacewander.\n</code></pre>\n\n<p>Find blame delta between two commits:</p>\n\n<pre><code>$ git guilt HEAD~3 HEAD^\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(115)\nJesse Sipprell                -\n</code></pre>\n\n<p>Find blame delta over the last three weeks:</p>\n\n<pre><code>$ git guilt `git log --until=\"3 weeks ago\" --format=\"%H\" -n 1`\nPaul Schreiber                +++++++++++++++++++++++++++++++++++++++++++++(349)\nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(113)\nMark Eissler                  ++++++++++++++++++++++++++\nCJ                            +++++\nnickl-                        -\nJesse Sipprell                -\nEvan Grim                     -\nBen Parnell                   -\nhemanth.hm                    --\n</code></pre>\n\n<p>Since git 1.8.5, the above can also be written as:</p>\n\n<p>  $ git guilt @{3.weeks.ago}</p>\n\n<p>Find blame delta for a topic branch:</p>\n\n<pre><code>$ git guilt `git merge-base master git-guilt` git-guilt \nspacewander                   +++++++++++++++++++++++++++++++++++++++++++++(112)\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by spacewander &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#x74;&#x6f;&#x3a;&#x73;&#x70;&#97;&#x63;&#101;&#x77;&#97;&#x6e;&#x64;&#101;&#x72;&#x6c;&#x7a;&#x78;&#x40;&#103;&#109;&#x61;&#x69;&#108;&#x2e;&#99;&#111;&#109;\" data-bare-link=\"true\">&#x73;&#112;&#97;&#99;&#x65;&#x77;&#x61;&#110;&#100;&#x65;&#x72;&#x6c;&#122;&#120;&#64;&#103;&#109;&#x61;&#x69;&#x6c;&#46;&#99;&#x6f;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-guilt(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-guilt.md",
    "content": "git-guilt(1) -- calculate change between two revisions\n========================================\n\n## SYNOPSIS\n\n`git guilt` [&lt;option&gt;]<br>\n`git guilt` [&lt;option&gt;] &lt;since&gt; [&lt;until&gt;]\n\n## DESCRIPTION\n\nIn the first form, shows total blame count for files with unstaged changes.\n\nIn the second form, calculates the change in blame between two revisions.\nIf not specified, &lt;until&gt; will default to HEAD.\n\n## OPTIONS\n\n  -h\n\n  Output usage information\n\n  -e, --email\n\n  Display author emails instead of names\n\n  -w, --ignore-whitespace\n\n  Ignore whitespace only changes when attributing blame\n\n  -d, --debug\n\n  Output debug information\n\n## Examples\n\nFind blame on unstaged modified files:\n\n    $ git guilt      (1)\n    spacewander                   ++++\n\n    (1) There is only one modified file and it is not staged. The four\n    pluses means that the file has four lines, all contributed by spacewander.\n\nFind blame delta between two commits:\n\n    $ git guilt HEAD~3 HEAD^\n    spacewander                   +++++++++++++++++++++++++++++++++++++++++++++(115)\n    Jesse Sipprell                -\n\nFind blame delta over the last three weeks:\n\n    $ git guilt `git log --until=\"3 weeks ago\" --format=\"%H\" -n 1`\n    Paul Schreiber                +++++++++++++++++++++++++++++++++++++++++++++(349)\n    spacewander                   +++++++++++++++++++++++++++++++++++++++++++++(113)\n    Mark Eissler                  ++++++++++++++++++++++++++\n    CJ                            +++++\n    nickl-                        -\n    Jesse Sipprell                -\n    Evan Grim                     -\n    Ben Parnell                   -\n    hemanth.hm                    --\n\nSince git 1.8.5, the above can also be written as:\n\n  $ git guilt @{3.weeks.ago}\n\nFind blame delta for a topic branch:\n\n    $ git guilt `git merge-base master git-guilt` git-guilt \n    spacewander                   +++++++++++++++++++++++++++++++++++++++++++++(112)\n\n## AUTHOR\n\nWritten by spacewander &lt;<spacewanderlzx@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-ignore-io.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-IGNORE\\-IO\" \"1\" \"January 2023\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-ignore\\-io\\fR \\- Get sample gitignore file\n.\n.SH \"SYNOPSIS\"\n\\fBgit ignore\\-io\\fR [<OPTIONS>]\n.\n.SH \"DESCRIPTION\"\nGet sample gitignore file from gitignore\\.io \\fIhttps://www\\.toptal\\.com/developers/gitignore/\\fR\n.\n.SH \"OPTIONS\"\n<OPTIONS>\n.\n.P\n\\-a, \\-\\-append <types>\\.\\.\\.\n.\n.br\nAppend new \\.gitignore content to \\.gitignore under the current directory\n.\n.P\n\\-r, \\-\\-replace <types>\\.\\.\\.\n.\n.br\nExport new \\.gitignore to the current directory (The old one will be replaced)\n.\n.P\n\\-l, \\-\\-list\\-in\\-table\n.\n.br\nPrint available types in table format\n.\n.P\n\\-L, \\-\\-list\\-alphabetically\n.\n.br\nPrint available types in alphabetical order\n.\n.P\n\\-s, \\-\\-search <word>\n.\n.br\nSearch word in available types\n.\n.P\n\\-t, \\-\\-show\\-update\\-time\n.\n.br\nShow the last modified time of ~/\\.gi_list (where the list of available types is stored)\n.\n.P\n\\-u, \\-\\-update\\-list\n.\n.br\nUpdate ~/\\.gi_list\n.\n.SH \"EXAMPLES\"\nShow sample gitignore file for vim\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\\-io vim\n\n    # Created by https://www\\.toptal\\.com/developers/gitignore/api/vim\n\n    ### Vim ###\n    [\\._]*\\.s[a\\-w][a\\-z]\n    [\\._]s[a\\-w][a\\-z]\n    *\\.un~\n    Session\\.vim\n    \\.netrwhist\n    *~\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nAppend sample gitignore for Vim and Python to \\.gitignore in current directory\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\\-io \\-a vim python\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nShow all available types\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\\-io \\-l\n\n    actionscript             ada                      agda                     android                  anjuta\n    appceleratortitanium     appcode                  appengine                archives                 archlinuxpackages\n    autotools                basercms                 bazel                    bluej                    bower\n    bricxcc                  c                        c++                      cakephp                  carthage\n    \\.\\.\\.\\.\\.\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nSearch ja in all available types\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\\-io \\-s ja\n\n    django\n    jabref\n    java\n    ninja\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Lee\\-W \\fIweilee\\.rx@gmail\\.com\\fR\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-ignore-io.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-ignore-io(1) - Get sample gitignore file</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-ignore-io(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-ignore-io(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-ignore-io</code> - <span class=\"man-whatis\">Get sample gitignore file</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git ignore-io</code> [&lt;OPTIONS&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Get sample gitignore file from <a href=\"https://www.toptal.com/developers/gitignore/\">gitignore.io</a></p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;OPTIONS&gt;</p>\n\n<p>  -a, --append &lt;types&gt;...<br />\n  Append new .gitignore content to .gitignore under the current directory</p>\n\n<p>  -r, --replace &lt;types&gt;...<br />\n  Export new .gitignore to the current directory (The old one will be replaced)</p>\n\n<p>  -l, --list-in-table<br />\n  Print available types in table format</p>\n\n<p>  -L, --list-alphabetically<br />\n  Print available types in alphabetical order</p>\n\n<p>  -s, --search &lt;word&gt;<br />\n  Search word in available types</p>\n\n<p>  -t, --show-update-time<br />\n  Show the last modified time of ~/.gi_list (where the list of available types is stored)</p>\n\n<p>  -u, --update-list<br />\n  Update ~/.gi_list</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Show sample gitignore file for vim</p>\n\n<pre><code class=\"bash\">$ git ignore-io vim\n\n    # Created by https://www.toptal.com/developers/gitignore/api/vim\n\n    ### Vim ###\n    [._]*.s[a-w][a-z]\n    [._]s[a-w][a-z]\n    *.un~\n    Session.vim\n    .netrwhist\n    *~\n</code></pre>\n\n<p>Append sample gitignore for Vim and Python to .gitignore in current directory.</p>\n\n<pre><code class=\"bash\">$ git ignore-io -a vim python\n</code></pre>\n\n<p>Show all available types</p>\n\n<pre><code class=\"bash\">$ git ignore-io -l\n\n    actionscript             ada                      agda                     android                  anjuta\n    appceleratortitanium     appcode                  appengine                archives                 archlinuxpackages\n    autotools                basercms                 bazel                    bluej                    bower\n    bricxcc                  c                        c++                      cakephp                  carthage\n    ......\n</code></pre>\n\n<p>Search ja in all available types</p>\n\n<pre><code class=\"bash\">$ git ignore-io -s ja\n\n    django\n    jabref\n    java\n    ninja\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Lee-W <a href=\"&#x6d;&#x61;&#105;&#108;&#116;&#111;&#58;&#119;&#101;&#105;&#108;&#101;&#101;&#x2e;&#114;&#x78;&#64;&#103;&#109;&#x61;&#x69;&#x6c;&#46;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x77;&#x65;&#105;&#108;&#x65;&#x65;&#x2e;&#x72;&#x78;&#x40;&#103;&#109;&#x61;&#105;&#108;&#x2e;&#99;&#111;&#x6d;</a></p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>January 2023</li>\n    <li class='tr'>git-ignore-io(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-ignore-io.md",
    "content": "git-ignore-io(1) -- Get sample gitignore file\n================================\n\n## SYNOPSIS\n\n`git ignore-io` [&lt;OPTIONS&gt;]\n\n## DESCRIPTION\n\nGet sample gitignore file from [gitignore.io](https://www.toptal.com/developers/gitignore/)\n\n## OPTIONS\n\n  &lt;OPTIONS&gt;\n\n  -a, --append &lt;types&gt;...  \n  Append new .gitignore content to .gitignore under the current directory  \n\n  -r, --replace &lt;types&gt;...  \n  Export new .gitignore to the current directory (The old one will be replaced)  \n\n  -l, --list-in-table  \n  Print available types in table format  \n\n  -L, --list-alphabetically  \n  Print available types in alphabetical order  \n\n  -s, --search &lt;word&gt;  \n  Search word in available types  \n\n  -t, --show-update-time  \n  Show the last modified time of ~/.gi\\_list (where the list of available types is stored)  \n\n  -u, --update-list  \n  Update ~/.gi\\_list  \n\n\n## EXAMPLES\nShow sample gitignore file for vim  \n\n```bash\n$ git ignore-io vim\n\n    # Created by https://www.toptal.com/developers/gitignore/api/vim\n\n    ### Vim ###\n    [._]*.s[a-w][a-z]\n    [._]s[a-w][a-z]\n    *.un~\n    Session.vim\n    .netrwhist\n    *~\n```\n\nAppend sample gitignore for Vim and Python to .gitignore in current directory.\n\n```bash\n$ git ignore-io -a vim python\n```\n\nShow all available types\n\n```bash\n$ git ignore-io -l\n\n    actionscript             ada                      agda                     android                  anjuta\n    appceleratortitanium     appcode                  appengine                archives                 archlinuxpackages\n    autotools                basercms                 bazel                    bluej                    bower\n    bricxcc                  c                        c++                      cakephp                  carthage\n    ......\n```\n\nSearch ja in all available types\n\n```bash\n$ git ignore-io -s ja\n\n    django\n    jabref\n    java\n    ninja\n```\n\n\n## AUTHOR\n\nWritten by Lee-W <weilee.rx@gmail.com> \n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-ignore.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-IGNORE\" \"1\" \"April 2018\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-ignore\\fR \\- Add \\.gitignore patterns\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-ignore\\fR [<context>] [<pattern> [<pattern>]\\.\\.\\.]\n.\n.SH \"DESCRIPTION\"\nAdds the given _pattern_s to a \\.gitignore file if it doesn\\'t already exist\\.\n.\n.SH \"OPTIONS\"\n<context>\n.\n.P\n\\-l, \\-\\-local\n.\n.P\nSets the context to the \\.gitignore file in the current working directory\\. (default)\n.\n.P\n\\-g, \\-\\-global\n.\n.P\nSets the context to the global gitignore file for the current user\\.\n.\n.P\n\\-p, \\-\\-private\n.\n.P\nSets the context to the private exclude file for the repository (\\fB\\.git/info/exclude\\fR)\\.\n.\n.P\n<pattern>\n.\n.P\nA space delimited list of patterns to append to the file in context\\.\n.\n.SS \"PATTERN FORMAT\"\nPattern format as described in the git manual\n.\n.IP \"\\(bu\" 4\nA blank line matches no files, so it can serve as a separator for readability\\. To append a blank line use empty quotes \"\"\\.\n.\n.IP \"\\(bu\" 4\nA line starting with # serves as a comment\\. For example, \"# This is a comment\"\n.\n.IP \"\\(bu\" 4\nAn optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again\\. If a negated pattern matches, this will override lower precedence patterns sources\\. To use an exclamation ! as command line argument it is best placed between single quotes \\'\\'\\. For example, \\'!src\\'\n.\n.IP \"\\(bu\" 4\nIf the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory\\. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git)\\.\n.\n.IP \"\\(bu\" 4\nIf the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the \\.gitignore file (relative to the top level of the work tree if not from a \\.gitignore file)\\.\n.\n.IP \"\\(bu\" 4\nOtherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname\\. For example, \"Documentation/*\\.html\" matches \"Documentation/git\\.html\" but not \"Documentation/ppc/ppc\\.html\" or \"tools/perf/Documentation/perf\\.html\"\\.\n.\n.IP \"\\(bu\" 4\nA leading slash matches the beginning of the pathname\\. For example, \"/*\\.c\" matches \"cat\\-file\\.c\" but not \"mozilla\\-sha1/sha1\\.c\"\\.\n.\n.IP \"\" 0\n.\n.SH \"EXAMPLES\"\nAll arguments are optional so calling git\\-ignore alone will display first the global then the local gitignore files:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\nGlobal gitignore: /home/alice/\\.gitignore\n# Numerous always\\-ignore extensions\n*\\.diff\n*\\.err\n*\\.orig\n*\\.rej\n*\\.swo\n*\\.swp\n*\\.vi\n*~\n*\\.sass\\-cache\n\n# OS or Editor folders\n\\.DS_Store\n\\.Trashes\n\\._*\nThumbs\\.db\n\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\\-\nLocal gitignore: \\.gitignore\n\\.cache\n\\.project\n\\.settings\n\\.tmproj\nnbproject\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nIf you only want to see the global context use the \\-\\-global argument (for local use \\-\\-local):\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore\nGlobal gitignore: /home/alice/\\.gitignore\n\\.DS_Store\n\\.Trashes\n\\._*\nThumbs\\.db\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nTo quickly append a new pattern to the default/local context simply:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore *\\.log\nAdding pattern(s) to: \\.gitignore\n\\.\\.\\. adding \\'*\\.log\\'\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nYou can now configure any patterns without ever using an editor, with a context and pattern arguments: The resulting configuration is also returned for your convenience\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git ignore \\-\\-local \"\" \"# Temporary files\" *\\.tmp \"*\\.log\" tmp/*  \"\" \"# Files I\\'d like to keep\" \\'!work\\'  \"\"\nAdding pattern(s) to: \\.gitignore\n\\.\\.\\. adding \\'\\'\n\\.\\.\\. adding \\'# Temporary files\\'\n\\.\\.\\. adding \\'index\\.tmp\\'\n\\.\\.\\. adding \\'*\\.log\\'\n\\.\\.\\. adding \\'tmp/*\\'\n\\.\\.\\. adding \\'\\'\n\\.\\.\\. adding \\'# Files I\\'d like to keep\\'\n\\.\\.\\. adding \\'!work\\'\n\\.\\.\\. adding \\'\\'\n\nLocal gitignore: \\.gitignore\n\n# Temporary files\nindex\\.tmp\n*\\.log\n\n# Files I\\'d like to keep\n!work\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR> and Tema Bolshakov <\\fItweekane@gmail\\.com\\fR> and Nick Lombard <\\fIgithub@jigsoft\\.co\\.za\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-ignore.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-ignore(1) - Add .gitignore patterns</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-ignore(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-ignore(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-ignore</code> - <span class=\"man-whatis\">Add .gitignore patterns</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-ignore</code> [&lt;context&gt;] [&lt;pattern&gt; [&lt;pattern&gt;]...]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Adds the given _pattern_s to a .gitignore file if it doesn't already exist.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;context&gt;</p>\n\n<p>  -l, --local</p>\n\n<p>  Sets the context to the .gitignore file in the current working directory. (default)</p>\n\n<p>  -g, --global</p>\n\n<p>  Sets the context to the global gitignore file for the current user.</p>\n\n<p>  -p, --private</p>\n\n<p>  Sets the context to the private exclude file for the repository (<code>.git/info/exclude</code>).</p>\n\n<p>  &lt;pattern&gt;</p>\n\n<p>  A space delimited list of patterns to append to the file in context.</p>\n\n<h3 id=\"PATTERN-FORMAT\">PATTERN FORMAT</h3>\n\n<p>Pattern format as described in the git manual</p>\n\n<ul>\n<li><p>A blank line matches no files, so it can serve as a separator for readability. To append a blank line use empty quotes \"\".</p></li>\n<li><p>A line starting with # serves as a comment. For example, \"# This is a comment\"</p></li>\n<li><p>An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources. To use an exclamation ! as command line argument it is best placed between single quotes ''. For example, '!src'</p></li>\n<li><p>If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).</p></li>\n<li><p>If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file).</p></li>\n<li><p>Otherwise, git treats the pattern as a shell glob suitable for consumption by <span class=\"man-ref\">fnmatch<span class=\"s\">(3)</span></span> with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, \"Documentation/*.html\" matches \"Documentation/git.html\" but not \"Documentation/ppc/ppc.html\" or \"tools/perf/Documentation/perf.html\".</p></li>\n<li><p>A leading slash matches the beginning of the pathname. For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".</p></li>\n</ul>\n\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  All arguments are optional so calling git-ignore alone will display first the global then the local gitignore files:</p>\n\n<pre><code>$ git ignore\nGlobal gitignore: /home/alice/.gitignore\n# Numerous always-ignore extensions\n*.diff\n*.err\n*.orig\n*.rej\n*.swo\n*.swp\n*.vi\n*~\n*.sass-cache\n\n# OS or Editor folders\n.DS_Store\n.Trashes\n._*\nThumbs.db\n---------------------------------\nLocal gitignore: .gitignore\n.cache\n.project\n.settings\n.tmproj\nnbproject\n</code></pre>\n\n<p>If you only want to see the global context use the --global argument (for local use --local):</p>\n\n<pre><code>$ git ignore\nGlobal gitignore: /home/alice/.gitignore\n.DS_Store\n.Trashes\n._*\nThumbs.db\n</code></pre>\n\n<p>To quickly append a new pattern to the default/local context simply:</p>\n\n<pre><code>$ git ignore *.log\nAdding pattern(s) to: .gitignore\n... adding '*.log'\n</code></pre>\n\n<p>You can now configure any patterns without ever using an editor, with a context and pattern arguments:\nThe resulting configuration is also returned for your convenience.</p>\n\n<pre><code>$ git ignore --local \"\" \"# Temporary files\" *.tmp \"*.log\" tmp/*  \"\" \"# Files I'd like to keep\" '!work'  \"\"\nAdding pattern(s) to: .gitignore\n... adding ''\n... adding '# Temporary files'\n... adding 'index.tmp'\n... adding '*.log'\n... adding 'tmp/*'\n... adding ''\n... adding '# Files I'd like to keep'\n... adding '!work'\n... adding ''\n\nLocal gitignore: .gitignore\n\n# Temporary files\nindex.tmp\n*.log\n\n# Files I'd like to keep\n!work\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#x6d;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#x6a;&#x40;&#x76;&#105;&#115;&#105;&#111;&#110;&#x2d;&#x6d;&#x65;&#100;&#x69;&#97;&#46;&#x63;&#x61;\" data-bare-link=\"true\">&#116;&#106;&#x40;&#118;&#x69;&#x73;&#x69;&#x6f;&#110;&#45;&#109;&#101;&#100;&#105;&#97;&#x2e;&#99;&#97;</a>&gt; and Tema Bolshakov &lt;<a href=\"&#x6d;&#97;&#105;&#x6c;&#116;&#x6f;&#58;&#116;&#x77;&#101;&#101;&#107;&#x61;&#x6e;&#101;&#x40;&#x67;&#x6d;&#97;&#x69;&#108;&#46;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x74;&#119;&#x65;&#x65;&#107;&#x61;&#110;&#x65;&#x40;&#103;&#x6d;&#97;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</a>&gt;\nand Nick Lombard &lt;<a href=\"&#109;&#97;&#x69;&#x6c;&#116;&#111;&#58;&#x67;&#105;&#116;&#104;&#117;&#x62;&#x40;&#x6a;&#105;&#103;&#x73;&#x6f;&#x66;&#116;&#46;&#x63;&#x6f;&#x2e;&#x7a;&#97;\" data-bare-link=\"true\">&#103;&#105;&#116;&#104;&#x75;&#98;&#x40;&#106;&#105;&#103;&#115;&#x6f;&#102;&#x74;&#x2e;&#x63;&#111;&#x2e;&#122;&#x61;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>April 2018</li>\n    <li class='tr'>git-ignore(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-ignore.md",
    "content": "git-ignore(1) -- Add .gitignore patterns\n========================================\n\n## SYNOPSIS\n\n`git-ignore` [&lt;context&gt;] [&lt;pattern&gt; [&lt;pattern&gt;]...]\n\n## DESCRIPTION\n\nAdds the given _pattern_s to a .gitignore file if it doesn't already exist.\n\n## OPTIONS\n\n  &lt;context&gt;\n\n  -l, --local\n\n  Sets the context to the .gitignore file in the current working directory. (default)\n\n  -g, --global\n\n  Sets the context to the global gitignore file for the current user.\n\n  -p, --private\n\n  Sets the context to the private exclude file for the repository (`.git/info/exclude`).\n\n  &lt;pattern&gt;\n\n  A space delimited list of patterns to append to the file in context.\n\n### PATTERN FORMAT\n\nPattern format as described in the git manual\n\n * A blank line matches no files, so it can serve as a separator for readability. To append a blank line use empty quotes \"\".\n\n * A line starting with # serves as a comment. For example, \"# This is a comment\"\n\n * An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources. To use an exclamation ! as command line argument it is best placed between single quotes ''. For example, '!src'\n\n * If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in git).\n\n * If the pattern does not contain a slash /, git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file (relative to the top level of the work tree if not from a .gitignore file).\n\n * Otherwise, git treats the pattern as a shell glob suitable for consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in the pattern will not match a / in the pathname. For example, \"Documentation/*.html\" matches \"Documentation/git.html\" but not \"Documentation/ppc/ppc.html\" or \"tools/perf/Documentation/perf.html\".\n\n * A leading slash matches the beginning of the pathname. For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n\n\n## EXAMPLES\n\n  All arguments are optional so calling git-ignore alone will display first the global then the local gitignore files:\n\n    $ git ignore\n    Global gitignore: /home/alice/.gitignore\n    # Numerous always-ignore extensions\n    *.diff\n    *.err\n    *.orig\n    *.rej\n    *.swo\n    *.swp\n    *.vi\n    *~\n    *.sass-cache\n\n    # OS or Editor folders\n    .DS_Store\n    .Trashes\n    ._*\n    Thumbs.db\n    ---------------------------------\n    Local gitignore: .gitignore\n    .cache\n    .project\n    .settings\n    .tmproj\n    nbproject\n\nIf you only want to see the global context use the --global argument (for local use --local):\n\n    $ git ignore\n    Global gitignore: /home/alice/.gitignore\n    .DS_Store\n    .Trashes\n    ._*\n    Thumbs.db\n\nTo quickly append a new pattern to the default/local context simply:\n\n    $ git ignore *.log\n    Adding pattern(s) to: .gitignore\n    ... adding '*.log'\n\nYou can now configure any patterns without ever using an editor, with a context and pattern arguments:\nThe resulting configuration is also returned for your convenience.\n\n    $ git ignore --local \"\" \"# Temporary files\" *.tmp \"*.log\" tmp/*  \"\" \"# Files I'd like to keep\" '!work'  \"\"\n    Adding pattern(s) to: .gitignore\n    ... adding ''\n    ... adding '# Temporary files'\n    ... adding 'index.tmp'\n    ... adding '*.log'\n    ... adding 'tmp/*'\n    ... adding ''\n    ... adding '# Files I'd like to keep'\n    ... adding '!work'\n    ... adding ''\n\n    Local gitignore: .gitignore\n\n    # Temporary files\n    index.tmp\n    *.log\n\n    # Files I'd like to keep\n    !work\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt; and Tema Bolshakov &lt;<tweekane@gmail.com>&gt;\nand Nick Lombard &lt;<github@jigsoft.co.za>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-info.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-INFO\" \"1\" \"August 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-info\\fR \\- Returns information on current repository\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-info\\fR [\\-c|\\-\\-color] [\\-\\-no\\-config]\n.\n.SH \"DESCRIPTION\"\nShows the following information about a repository:\n.\n.IP \"1.\" 4\nRemote Url(s)\n.\n.IP \"2.\" 4\nRemote Branches\n.\n.IP \"3.\" 4\nLocal Branches\n.\n.IP \"4.\" 4\nSubmodule(s) (if present)\n.\n.IP \"5.\" 4\nMost recent commit\n.\n.IP \"6.\" 4\nConfiguration Info\n.\n.IP \"\" 0\n.\n.SH \"OPTIONS\"\n\\-c, \\-\\-color\n.\n.P\nUse color for information titles\\.\n.\n.P\n\\-\\-no\\-config\n.\n.P\nDon\\'t show list all variables set in config file, along with their values\\.\n.\n.SH \"GIT CONFIGS\"\nYou could customize the Most recent commit and Configuration Info format via git config options\n.\n.IP \"\" 4\n.\n.nf\n\n$ git config \\-\\-global \\-\\-add git\\-extras\\.info\\.log \"<log\\-command>\"\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nthe default \\fIlog\\-command\\fR is \"git log \\-\\-max\\-count=1 \\-\\-pretty=short\"\n.\n.IP \"\" 4\n.\n.nf\n\n$ git config \\-\\-global \\-\\-add git\\-extras\\.info\\.config\\-grep \"<config\\-grep\\-command>\"\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nthe default \\fIconfig\\-grep\\-command\\fR is \"git config \\-\\-list\"\n.\n.P\nFor example,\n.\n.P\nto set global configuration to show last commit subject, without sha1\n.\n.IP \"\" 4\n.\n.nf\n\n $ git config \\-\\-global \\-\\-add git\\-extras\\.info\\.log \"git log \\-\\-max\\-count=1 \\-\\-format=\\e\"Author: %an%nDate:   %ad (%ar)%n%n    %s\\e\" \\-\\-date=format:\\e\"%Y\\-%m\\-%d %a %H:%M\\e\"\"\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nto set global configuration to show user\\'s name and email\n.\n.IP \"\" 4\n.\n.nf\n\n $ git config \\-\\-global \\-\\-add git\\-extras\\.info\\.config\\-grep \"git config \\-\\-list | grep \\-\\-color=never \\-E \\e\"^user\\.name|^user\\.email\\e\"\"\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"EXAMPLES\"\nOutputs info about a repo:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git info\n\n## Remote URLs:\n\norigin      git@github\\.com:sampleAuthor/git\\-extras\\.git (fetch)\norigin      git@github\\.com:sampleAuthor/git\\-extras\\.git (push)\n\n## Remote Branches:\n\norigin/HEAD \\-> origin/master\norigin/myBranch\n\n## Local Branches:\n\nmyBranch\n* master\n\n## Submodule(s):\n\n  a234567 path2submodule1/submodule1 (branch/tag)\n+ b234567 path2submodule2/submodule2 (branch/tag)\n\\- c234567 path2submodule3/submodule3 (branch/tag)\n  e234567 path2submodule4/submodule4 (branch/tag)\n\n## Most Recent Commit:\n\ncommit e3952df2c172c6f3eb533d8d0b1a6c77250769a7\nAuthor: Sample Author <sampleAuthor@gmail\\.com>\n\nAdded git\\-info command\\.\n\n## Configuration (\\.git/config):\n\ncolor\\.diff=auto\ncolor\\.status=auto\ncolor\\.branch=auto\nuser\\.name=Sample Author\nuser\\.email=sampleAuthor@gmail\\.com\ncore\\.repositoryformatversion=0\ncore\\.filemode=true\ncore\\.bare=false\ncore\\.logallrefupdates=true\ncore\\.ignorecase=true\nremote\\.origin\\.fetch=+refs/heads/*:refs/remotes/origin/*\nremote\\.origin\\.url=git@github\\.com:mub/git\\-extras\\.git\nbranch\\.master\\.remote=origin\nbranch\\.master\\.merge=refs/heads/master\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Leila Muhtasib <\\fImuhtasib@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-info.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-info(1) - Returns information on current repository</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#GIT-CONFIGS\">GIT CONFIGS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-info(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-info(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-info</code> - <span class=\"man-whatis\">Returns information on current repository</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-info</code> [-c|--color] [--no-config]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Shows the following information about a repository:</p>\n\n<ol>\n<li>Remote Url(s)</li>\n<li>Remote Branches</li>\n<li>Local Branches</li>\n<li>Submodule(s) (if present)</li>\n<li>Most recent commit</li>\n<li>Configuration Info</li>\n</ol>\n\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -c, --color</p>\n\n<p>  Use color for information titles.</p>\n\n<p>  --no-config</p>\n\n<p>  Don't show list all variables set in config file, along with their values.</p>\n\n<h2 id=\"GIT-CONFIGS\">GIT CONFIGS</h2>\n\n<p>  You could customize the Most recent commit and Configuration Info format via git config options</p>\n\n<pre><code>$ git config --global --add git-extras.info.log \"&lt;log-command>\"\n</code></pre>\n\n<p>  the default <var>log-command</var> is \"git log --max-count=1 --pretty=short\"</p>\n\n<pre><code>$ git config --global --add git-extras.info.config-grep \"&lt;config-grep-command>\"\n</code></pre>\n\n<p>  the default <var>config-grep-command</var> is \"git config --list\"</p>\n\n<p>  For example,</p>\n\n<p>   to set global configuration to show last commit subject, without sha1</p>\n\n<pre><code> $ git config --global --add git-extras.info.log \"git log --max-count=1 --format=\\\"Author: %an%nDate:   %ad (%ar)%n%n    %s\\\" --date=format:\\\"%Y-%m-%d %a %H:%M\\\"\"\n</code></pre>\n\n<p>   to set global configuration to show user's name and email</p>\n\n<pre><code> $ git config --global --add git-extras.info.config-grep \"git config --list | grep --color=never -E \\\"^user.name|^user.email\\\"\"\n</code></pre>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Outputs info about a repo:</p>\n\n<pre><code>$ git info\n\n## Remote URLs:\n\norigin      git@github.com:sampleAuthor/git-extras.git (fetch)\norigin      git@github.com:sampleAuthor/git-extras.git (push)\n\n## Remote Branches:\n\norigin/HEAD -&gt; origin/master\norigin/myBranch\n\n## Local Branches:\n\nmyBranch\n* master\n\n## Submodule(s):\n\n  a234567 path2submodule1/submodule1 (branch/tag)\n+ b234567 path2submodule2/submodule2 (branch/tag)\n- c234567 path2submodule3/submodule3 (branch/tag)\n  e234567 path2submodule4/submodule4 (branch/tag)\n\n## Most Recent Commit:\n\ncommit e3952df2c172c6f3eb533d8d0b1a6c77250769a7\nAuthor: Sample Author &lt;sampleAuthor@gmail.com&gt;\n\nAdded git-info command.\n\n## Configuration (.git/config):\n\ncolor.diff=auto\ncolor.status=auto\ncolor.branch=auto\nuser.name=Sample Author\nuser.email=sampleAuthor@gmail.com\ncore.repositoryformatversion=0\ncore.filemode=true\ncore.bare=false\ncore.logallrefupdates=true\ncore.ignorecase=true\nremote.origin.fetch=+refs/heads/*:refs/remotes/origin/*\nremote.origin.url=git@github.com:mub/git-extras.git\nbranch.master.remote=origin\nbranch.master.merge=refs/heads/master\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Leila Muhtasib &lt;<a href=\"&#x6d;&#97;&#x69;&#108;&#116;&#x6f;&#58;&#x6d;&#117;&#x68;&#116;&#97;&#115;&#x69;&#98;&#64;&#x67;&#109;&#x61;&#105;&#108;&#46;&#99;&#111;&#x6d;\" data-bare-link=\"true\">&#x6d;&#x75;&#x68;&#116;&#97;&#115;&#x69;&#x62;&#64;&#x67;&#x6d;&#x61;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2020</li>\n    <li class='tr'>git-info(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-info.md",
    "content": "git-info(1) -- Returns information on current repository\n================================\n\n## SYNOPSIS\n\n`git-info` [-c|--color] [--no-config]\n\n## DESCRIPTION\n\nShows the following information about a repository:\n\n 1. Remote Url(s)\n 2. Remote Branches\n 3. Local Branches\n 4. Submodule(s) (if present)\n 5. Most recent commit\n 6. Configuration Info\n\n## OPTIONS\n\n  -c, --color\n\n  Use color for information titles.\n\n  --no-config\n\n  Don't show list all variables set in config file, along with their values.\n\n## GIT CONFIGS\n\n  You could customize the Most recent commit and Configuration Info format via git config options\n\n    $ git config --global --add git-extras.info.log \"<log-command>\"\n\n  the default <log-command> is \"git log --max-count=1 --pretty=short\"\n\n    $ git config --global --add git-extras.info.config-grep \"<config-grep-command>\"\n\n  the default <config-grep-command> is \"git config --list\"\n\n  For example,\n\n   to set global configuration to show last commit subject, without sha1\n\n     $ git config --global --add git-extras.info.log \"git log --max-count=1 --format=\\\"Author: %an%nDate:   %ad (%ar)%n%n    %s\\\" --date=format:\\\"%Y-%m-%d %a %H:%M\\\"\"\n\n   to set global configuration to show user's name and email\n\n     $ git config --global --add git-extras.info.config-grep \"git config --list | grep --color=never -E \\\"^user.name|^user.email\\\"\"\n\n## EXAMPLES\n\nOutputs info about a repo:\n\n    $ git info\n\n    ## Remote URLs:\n\n    origin\t\tgit@github.com:sampleAuthor/git-extras.git (fetch)\n    origin\t\tgit@github.com:sampleAuthor/git-extras.git (push)\n\n    ## Remote Branches:\n\n    origin/HEAD -> origin/master\n    origin/myBranch\n\n    ## Local Branches:\n\n    myBranch\n    * master\n\n    ## Submodule(s):\n\n      a234567 path2submodule1/submodule1 (branch/tag)\n    + b234567 path2submodule2/submodule2 (branch/tag)\n    - c234567 path2submodule3/submodule3 (branch/tag)\n      e234567 path2submodule4/submodule4 (branch/tag)\n\n    ## Most Recent Commit:\n\n    commit e3952df2c172c6f3eb533d8d0b1a6c77250769a7\n    Author: Sample Author <sampleAuthor@gmail.com>\n\n    Added git-info command.\n\n    ## Configuration (.git/config):\n\n    color.diff=auto\n    color.status=auto\n    color.branch=auto\n    user.name=Sample Author\n    user.email=sampleAuthor@gmail.com\n    core.repositoryformatversion=0\n    core.filemode=true\n    core.bare=false\n    core.logallrefupdates=true\n    core.ignorecase=true\n    remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*\n    remote.origin.url=git@github.com:mub/git-extras.git\n    branch.master.remote=origin\n    branch.master.merge=refs/heads/master\n\n\n## AUTHOR\n\nWritten by Leila Muhtasib &lt;<muhtasib@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-local-commits.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-LOCAL\\-COMMITS\" \"1\" \"January 2022\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-local\\-commits\\fR \\- List local commits\n.SH \"SYNOPSIS\"\n\\fBgit\\-local\\-commits\\fR <args>\n.SH \"DESCRIPTION\"\nLists commits in the local branch that have not been pushed to the remote tracked branch\\. This requires that HEAD points to a branch which is tracking another branch\\.\n.SH \"OPTIONS\"\n<args>\n.P\nAll arguments passed to \\fBgit\\-local\\-commits\\fR will be passed directly to \\fBgit\\-log\\fR\\.\n.SH \"EXAMPLES\"\n.nf\n$ git local\\-commits \\-\\-graph\n.fi\n.SH \"AUTHOR\"\nWritten by Michael Komitee <\\fImkomitee@gmail\\.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-local-commits.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-local-commits(1) - List local commits</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-local-commits(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-local-commits(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-local-commits</code> - <span class=\"man-whatis\">List local commits</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-local-commits</code> &lt;args&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Lists commits in the local branch that have not been pushed to the remote tracked branch.\n  This requires that HEAD points to a branch which is tracking another branch.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;args&gt;</p>\n\n<p>All arguments passed to <code>git-local-commits</code> will be passed directly to <code>git-log</code>.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git local-commits --graph\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Michael Komitee &lt;<a href=\"mailto:mkomitee@gmail.com\" data-bare-link=\"true\">mkomitee@gmail.com</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>January 2022</li>\n    <li class='tr'>git-local-commits(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-local-commits.md",
    "content": "git-local-commits(1) -- List local commits\n=======================================\n\n## SYNOPSIS\n\n`git-local-commits` &lt;args&gt;\n\n## DESCRIPTION\n\n  Lists commits in the local branch that have not been pushed to the remote tracked branch.\n  This requires that HEAD points to a branch which is tracking another branch.\n\n## OPTIONS\n\n  &lt;args&gt;\n\n  All arguments passed to `git-local-commits` will be passed directly to `git-log`.\n\n## EXAMPLES\n\n    $ git local-commits --graph\n\n## AUTHOR\n\nWritten by Michael Komitee &lt;<mkomitee@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-lock.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-LOCK\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-lock\\fR \\- Lock a file excluded from version control\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-lock\\fR <filename>\n.\n.SH \"DESCRIPTION\"\nLock local files from version control\\.\n.\n.SH \"OPTIONS\"\n<filename>\n.\n.P\nThe name of the filename\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git lock config/database\\.yml\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Julio Napuri <\\fIjulionc@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-lock.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-lock(1) - Lock a file excluded from version control</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-lock(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-lock(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-lock</code> - <span class=\"man-whatis\">Lock a file excluded from version control</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-lock</code> &lt;filename&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Lock local files from version control.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;filename&gt;</p>\n\n<p>  The name of the filename.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git lock config/database.yml\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Julio Napuri &lt;<a href=\"&#109;&#97;&#x69;&#108;&#x74;&#x6f;&#58;&#106;&#x75;&#108;&#105;&#111;&#110;&#99;&#64;&#x67;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x6a;&#117;&#x6c;&#x69;&#x6f;&#110;&#x63;&#x40;&#x67;&#x6d;&#x61;&#105;&#108;&#46;&#99;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-lock(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-lock.md",
    "content": "git-lock(1) -- Lock a file excluded from version control\n========================================================\n\n## SYNOPSIS\n\n`git-lock` &lt;filename&gt;\n\n## DESCRIPTION\n\n  Lock local files from version control.\n\n## OPTIONS\n\n  &lt;filename&gt;\n\n  The name of the filename.\n\n## EXAMPLES\n\n    $ git lock config/database.yml\n\n## AUTHOR\n\nWritten by Julio Napuri &lt;<julionc@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-locked.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-LOCKED\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-locked\\fR \\- ls files that have been locked\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-locked\\fR\n.\n.SH \"DESCRIPTION\"\nList local files that have been locked\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git lock config/database\\.yml\n$ git locked\nconfig/database\\.yml\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Kevin Woo <\\fIkevinawoo@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-locked.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-locked(1) - ls files that have been locked</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-locked(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-locked(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-locked</code> - <span class=\"man-whatis\">ls files that have been locked</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-locked</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  List local files that have been locked</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git lock config/database.yml\n$ git locked\nconfig/database.yml\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Kevin Woo &lt;<a href=\"&#x6d;&#x61;&#105;&#108;&#x74;&#111;&#58;&#107;&#101;&#118;&#105;&#x6e;&#x61;&#x77;&#x6f;&#x6f;&#x40;&#x67;&#109;&#x61;&#x69;&#108;&#x2e;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#x6b;&#x65;&#x76;&#x69;&#x6e;&#97;&#119;&#111;&#111;&#64;&#103;&#x6d;&#97;&#x69;&#x6c;&#46;&#99;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-locked(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-locked.md",
    "content": "git-locked(1) -- ls files that have been locked\n========================================================\n\n## SYNOPSIS\n\n`git-locked`\n\n## DESCRIPTION\n\n  List local files that have been locked\n\n## EXAMPLES\n\n    $ git lock config/database.yml\n    $ git locked\n    config/database.yml\n\n## AUTHOR\n\nWritten by Kevin Woo &lt;<kevinawoo@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-magic.1",
    "content": ".\\\" generated with Ronn-NG/v0.10.1\r\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.10.1\r\n.TH \"GIT\\-MAGIC\" \"1\" \"September 2025\" \"\" \"Git Extras\"\r\n.SH \"NAME\"\r\n\\fBgit\\-magic\\fR \\- Automate add/commit/push routines\r\n.SH \"SYNOPSIS\"\r\n\\fBgit\\-magic\\fR [\\-a] [\\-m \\fImsg\\fR] [\\-e] [\\-p] [\\-f]\r\n.SH \"DESCRIPTION\"\r\nProduces summary of changes for commit message from \\fBgit status \\-\\-porcelain\\fR output\\. Commits staged changes with the generated commit message and opens editor to modify generated commit message optionally\\. Also staging and pushing can be automated optionally\\.\r\n.SH \"OPTIONS\"\r\n\\-a\r\n.P\r\nAdds everything including untracked files\\.\r\n.P\r\n\\-m \\fImsg\\fR\r\n.P\r\nUse the given \\fImsg\\fR as the commit message\\. If multiple \\-m options are given, their values are concatenated as separate paragraphs\\. Passed to git commit command\\. The generated is appended to user\\-given messages\\.\r\n.P\r\n\\-e\r\n.P\r\nThis option lets you further edit the generated message\\. Passed to git commit command\\.\r\n.P\r\n\\-p\r\n.P\r\nRuns \\fBgit push\\fR after commit\\.\r\n.P\r\n\\-f\r\n.P\r\nAdds \\fB\\-\\-force\\-with\\-lease\\fR option to \\fBgit push\\fR command for safer force pushing\\.\r\n.P\r\n\\-h\r\n.P\r\nPrints synopsis\\.\r\n.SH \"EXAMPLES\"\r\nThis example stages all changes then commits with automatic commit message\\.\r\n.IP \"\" 4\r\n.nf\r\n$ git magic \\-a\r\n[feature/magic dc2a11e] A  man/git\\-magic\\.md\r\n 1 file changed, 37 insertions(+)\r\n create mode 100644 man/git\\-auto\\.md\r\n# git log\r\nAuthor: overengineer <54alpersaid@gmail\\.com>\r\nDate:   Thu Sep 30 20:14:22 2021 +0300\r\n\r\n    M  man/git\\-magic\\.md\r\n.fi\r\n.IP \"\" 0\r\n.P\r\n\\fB\\-m\\fR option PREPENDS generated message\\.\r\n.IP \"\" 4\r\n.nf\r\n$ git magic \\-am \"Added documentation for git magic\"\r\n[feature/magic dc2a11e] Added documentation for git magic\r\n 1 file changed, 42 insertions(+), 0 deletions(\\-)\r\n create mode 100644 A man/git\\-auto\\.md\r\n$ git log\r\nAuthor: overengineer <54alpersaid@gmail\\.com>\r\nDate:   Thu Sep 30 20:14:22 2021 +0300\r\n\r\n    Added documentation for git magic\r\n\r\n    M  man/git\\-magic\\.md\r\n.fi\r\n.IP \"\" 0\r\n.SH \"AUTHOR\"\r\nWritten by Alper S\\. Soylu \\fI54alpersaid@gmail\\.com\\fR\r\n.SH \"REPORTING BUGS\"\r\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\r\n.SH \"SEE ALSO\"\r\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\r\n"
  },
  {
    "path": "man/git-magic.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\r\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\r\n  <title>git-magic(1) - Automate add/commit/push routines</title>\r\n  <style type='text/css' media='all'>\r\n  /* style: man */\r\n  body#manpage {margin:0}\r\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\r\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\r\n  .mp h2 {margin:10px 0 0 0}\r\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\r\n  .mp h3 {margin:0 0 0 4ex}\r\n  .mp dt {margin:0;clear:left}\r\n  .mp dt.flush {float:left;width:8ex}\r\n  .mp dd {margin:0 0 0 9ex}\r\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\r\n  .mp pre {margin-bottom:20px}\r\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\r\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\r\n  .mp img {display:block;margin:auto}\r\n  .mp h1.man-title {display:none}\r\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\r\n  .mp h2 {font-size:16px;line-height:1.25}\r\n  .mp h1 {font-size:20px;line-height:2}\r\n  .mp {text-align:justify;background:#fff}\r\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\r\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\r\n  .mp u {text-decoration:underline}\r\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\r\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\r\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\r\n  .mp b.man-ref {font-weight:normal;color:#434241}\r\n  .mp pre {padding:0 4ex}\r\n  .mp pre code {font-weight:normal;color:#434241}\r\n  .mp h2+pre,h3+pre {padding-left:0}\r\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\r\n  ol.man-decor {width:100%}\r\n  ol.man-decor li.tl {text-align:left}\r\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\r\n  ol.man-decor li.tr {text-align:right;float:right}\r\n  </style>\r\n</head>\r\n<!--\r\n  The following styles are deprecated and will be removed at some point:\r\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\r\n\r\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\r\n  .man-navigation should be used instead.\r\n-->\r\n<body id='manpage'>\r\n  <div class='mp' id='man'>\r\n\r\n  <div class='man-navigation' style='display:none'>\r\n    <a href=\"#NAME\">NAME</a>\r\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\r\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\r\n    <a href=\"#OPTIONS\">OPTIONS</a>\r\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\r\n    <a href=\"#AUTHOR\">AUTHOR</a>\r\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\r\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\r\n  </div>\r\n\r\n  <ol class='man-decor man-head man head'>\r\n    <li class='tl'>git-magic(1)</li>\r\n    <li class='tc'>Git Extras</li>\r\n    <li class='tr'>git-magic(1)</li>\r\n  </ol>\r\n\r\n  \r\n\r\n<h2 id=\"NAME\">NAME</h2>\r\n<p class=\"man-name\">\r\n  <code>git-magic</code> - <span class=\"man-whatis\">Automate add/commit/push routines</span>\r\n</p>\r\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\r\n\r\n<p><code>git-magic</code> [-a] [-m <var>msg</var>] [-e] [-p] [-f]</p>\r\n\r\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\r\n\r\n<p>Produces summary of changes for commit message from <code>git status --porcelain</code> output.\r\nCommits staged changes with the generated commit message and\r\nopens editor to modify generated commit message optionally.\r\nAlso staging and pushing can be automated optionally.</p>\r\n\r\n<h2 id=\"OPTIONS\">OPTIONS</h2>\r\n\r\n<p>-a</p>\r\n\r\n<p>Adds everything including untracked files.</p>\r\n\r\n<p>-m <var>msg</var></p>\r\n\r\n<p>Use the given <var>msg</var> as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs.\r\nPassed to git commit command. The generated is appended to user-given messages.</p>\r\n\r\n<p>-e</p>\r\n\r\n<p>This option lets you further edit the generated message.\r\nPassed to git commit command.</p>\r\n\r\n<p>-p</p>\r\n\r\n<p>Runs <code>git push</code> after commit.</p>\r\n\r\n<p>-f</p>\r\n\r\n<p>Adds <code>--force-with-lease</code> option to <code>git push</code> command for safer force pushing.</p>\r\n\r\n<p>-h</p>\r\n\r\n<p>Prints synopsis.</p>\r\n\r\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\r\n\r\n<p>This example stages all changes then commits with automatic commit message.</p>\r\n\r\n<pre><code>$ git magic -a\r\n[feature/magic dc2a11e] A  man/git-magic.md\r\n 1 file changed, 37 insertions(+)\r\n create mode 100644 man/git-auto.md\r\n# git log\r\nAuthor: overengineer &lt;54alpersaid@gmail.com&gt;\r\nDate:   Thu Sep 30 20:14:22 2021 +0300\r\n\r\n    M  man/git-magic.md\r\n</code></pre>\r\n\r\n<p><code>-m</code> option PREPENDS generated message.</p>\r\n\r\n<pre><code>$ git magic -am \"Added documentation for git magic\"\r\n[feature/magic dc2a11e] Added documentation for git magic\r\n 1 file changed, 42 insertions(+), 0 deletions(-)\r\n create mode 100644 A man/git-auto.md\r\n$ git log\r\nAuthor: overengineer &lt;54alpersaid@gmail.com&gt;\r\nDate:   Thu Sep 30 20:14:22 2021 +0300\r\n\r\n    Added documentation for git magic\r\n    \r\n    M  man/git-magic.md\r\n</code></pre>\r\n\r\n<h2 id=\"AUTHOR\">AUTHOR</h2>\r\n\r\n<p>Written by Alper S. Soylu <a href=\"mailto:54alpersaid@gmail.com\" data-bare-link=\"true\">54alpersaid@gmail.com</a></p>\r\n\r\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\r\n\r\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\r\n\r\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\r\n\r\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\r\n\r\n  <ol class='man-decor man-foot man foot'>\r\n    <li class='tl'></li>\r\n    <li class='tc'>September 2025</li>\r\n    <li class='tr'>git-magic(1)</li>\r\n  </ol>\r\n\r\n  </div>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "man/git-magic.md",
    "content": "git-magic(1) -- Automate add/commit/push routines\n================================\n\n## SYNOPSIS\n\n`git-magic` [-a] [-m <msg>] [-e] [-p] [-f]\n\n## DESCRIPTION\n\nProduces summary of changes for commit message from `git status --porcelain` output.\nCommits staged changes with the generated commit message and\nopens editor to modify generated commit message optionally.\nAlso staging and pushing can be automated optionally.\n\n## OPTIONS\n\n-a\n\nAdds everything including untracked files.\n\n-m <msg>\n\nUse the given <msg> as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs.\nPassed to git commit command. The generated is appended to user-given messages.\n\n-e\n\nThis option lets you further edit the generated message.\nPassed to git commit command.\n\n-p\n\nRuns `git push` after commit.\n\n-f\n\nAdds `--force-with-lease` option to `git push` command for safer force pushing.\n\n-h\n\nPrints synopsis.\n\n## EXAMPLES\n\nThis example stages all changes then commits with automatic commit message.\n\n```\n$ git magic -a\n[feature/magic dc2a11e] A  man/git-magic.md\n 1 file changed, 37 insertions(+)\n create mode 100644 man/git-auto.md\n# git log\nAuthor: overengineer <54alpersaid@gmail.com>\nDate:   Thu Sep 30 20:14:22 2021 +0300\n\n    M  man/git-magic.md\n```\n\n`-m` option PREPENDS generated message.\n\n```\n$ git magic -am \"Added documentation for git magic\"\n[feature/magic dc2a11e] Added documentation for git magic\n 1 file changed, 42 insertions(+), 0 deletions(-)\n create mode 100644 A man/git-auto.md\n$ git log\nAuthor: overengineer <54alpersaid@gmail.com>\nDate:   Thu Sep 30 20:14:22 2021 +0300\n\n    Added documentation for git magic\n    \n    M  man/git-magic.md\n```\n\n## AUTHOR\n\nWritten by Alper S. Soylu <54alpersaid@gmail.com>\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-merge-into.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-MERGE\\-INTO\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-merge\\-into\\fR \\- Merge one branch into another\n.\n.SH \"SYNOPSIS\"\n\\fBgit merge\\-into\\fR [src] <dest> [\\-\\-ff\\-only]\n.\n.SH \"DESCRIPTION\"\nMerge one branch into another, and keep yourself on current branch\\. If src branch not given, it will merge current one to dest\\.\n.\n.SH \"OPTIONS\"\n<src>\n.\n.P\nThe name of the branch will be merged into\\. If this not given, use current branch as default\\.\n.\n.P\n<dest>\n.\n.P\nThe name of the branch to merge into\\.\n.\n.P\n\\-\\-ff\\-only\n.\n.P\nRefuse to merge and exit with a non\\-zero status unless the current HEAD is already up\\-to\\-date or the merge can be resolved as a fast\\-forward\\.\n.\n.SH \"EXAMPLES\"\nAssume the following history exists and the current branch is src:\n.\n.IP \"\" 4\n.\n.nf\n\n                 A\\-\\-\\-B\\-\\-\\-C src(current)\n                /\n           D\\-\\-\\-E\\-\\-\\-F\\-\\-\\-G dest\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nAfter running \\fBgit merge\\-into dest\\fR, it will look like this:\n.\n.IP \"\" 4\n.\n.nf\n\n                A\\-\\-\\-B\\-\\-\\-C src(current)\n                /         \\e\n           D\\-\\-\\-E\\-\\-\\-F\\-\\-\\-G\\-\\-\\-H dest\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nThe \\fBH\\fR commit will record the merge result, just like what \\fBgit merge\\fR does\\. And \\fBsrc\\fR is still the current branch\\.\n.\n.P\nThe default implementation of \\fBmerge\\-into\\fR use \\fBgit checkout\\fR and \\fBgit merge\\fR, which may cause temporary change in the working tree\\. If you make sure your branch can be merged fast\\-forward, add \\fB\\-\\-ff\\-only\\fR to avoid files change\\.\n.\n.SH \"AUTHOR\"\nWritten by spacewander <\\fIspacewanderlzx@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-merge-into.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-merge-into(1) - Merge one branch into another</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-merge-into(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-merge-into(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-merge-into</code> - <span class=\"man-whatis\">Merge one branch into another</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git merge-into</code> [src] &lt;dest&gt; [--ff-only]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Merge one branch into another, and keep yourself on current branch. If src branch not given, it will merge current one to dest.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;src&gt;</p>\n\n<p>  The name of the branch will be merged into. If this not given, use current branch as default.</p>\n\n<p>  &lt;dest&gt;</p>\n\n<p>  The name of the branch to merge into.</p>\n\n<p>  --ff-only</p>\n\n<p>  Refuse to merge and exit with a non-zero status unless the current HEAD is\n  already up-to-date or the merge can be resolved as a fast-forward.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Assume the following history exists and the current branch is src:</p>\n\n<pre><code>                 A---B---C src(current)\n                /\n           D---E---F---G dest\n</code></pre>\n\n<p>After running <code>git merge-into dest</code>, it will look like this:</p>\n\n<pre><code>                A---B---C src(current)\n                /         \\\n           D---E---F---G---H dest\n</code></pre>\n\n<p>The <code>H</code> commit will record the merge result, just like what <code>git merge</code> does.\nAnd <code>src</code> is still the current branch.</p>\n\n<p>The default implementation of <code>merge-into</code> use <code>git checkout</code> and <code>git merge</code>,\nwhich may cause temporary change in the working tree. If you make sure your\nbranch can be merged fast-forward, add <code>--ff-only</code> to avoid files change.</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by spacewander &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#58;&#115;&#112;&#97;&#x63;&#x65;&#x77;&#97;&#110;&#100;&#101;&#x72;&#108;&#122;&#120;&#64;&#103;&#109;&#97;&#105;&#x6c;&#46;&#99;&#x6f;&#109;\" data-bare-link=\"true\">&#115;&#x70;&#x61;&#99;&#101;&#119;&#97;&#110;&#x64;&#101;&#114;&#108;&#x7a;&#120;&#x40;&#x67;&#109;&#97;&#x69;&#108;&#46;&#99;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-merge-into(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-merge-into.md",
    "content": "git-merge-into(1) -- Merge one branch into another\n=================================\n\n## SYNOPSIS\n\n`git merge-into` [src] &lt;dest&gt; [--ff-only]\n\n## DESCRIPTION\n\nMerge one branch into another, and keep yourself on current branch. If src branch not given, it will merge current one to dest.\n\n## OPTIONS\n  \n  &lt;src&gt;\n\n  The name of the branch will be merged into. If this not given, use current branch as default.\n\n  &lt;dest&gt;\n\n  The name of the branch to merge into.\n\n  --ff-only\n\n  Refuse to merge and exit with a non-zero status unless the current HEAD is\n  already up-to-date or the merge can be resolved as a fast-forward.\n\n\n## EXAMPLES\n\nAssume the following history exists and the current branch is src:\n\n                     A---B---C src(current)\n                    /\n               D---E---F---G dest\n\nAfter running `git merge-into dest`, it will look like this:\n\n                    A---B---C src(current)\n                    /         \\\n               D---E---F---G---H dest\n\nThe `H` commit will record the merge result, just like what `git merge` does.\nAnd `src` is still the current branch.\n\nThe default implementation of `merge-into` use `git checkout` and `git merge`, \nwhich may cause temporary change in the working tree. If you make sure your \nbranch can be merged fast-forward, add `--ff-only` to avoid files change.\n\n## AUTHOR\n\nWritten by spacewander &lt;<spacewanderlzx@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-merge-repo.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-MERGE\\-REPO\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-merge\\-repo\\fR \\- Merge two repo histories\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-merge\\-repo\\fR <repo> <branch> <directory> [\\-\\-squash]\n.\n.SH \"DESCRIPTION\"\nMerges a repository\\'s history with the current repository, inside a specified directory\\.\n.\n.P\nOptional \\fB\\-\\-squash\\fR flag skips the full history and generates only one commit for the merge\\.\n.\n.SH \"EXAMPLES\"\nMerges a local repo\\'s \\fBfrontend\\fR branch into the current repo\\'s \\fBweb\\fR folder:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git merge\\-repo \\.\\./app/\\.git frontend web\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nMerges a remote repo\\'s \\fBmaster\\fR branch into the current repo\\'s folder:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git merge\\-repo git@github\\.com:tj/git\\-extras\\.git master \\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Ivan Malopinsky <\\fIhello@imsky\\.co\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-merge-repo.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-merge-repo(1) - Merge two repo histories</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-merge-repo(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-merge-repo(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-merge-repo</code> - <span class=\"man-whatis\">Merge two repo histories</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-merge-repo</code> &lt;repo&gt; &lt;branch&gt; &lt;directory&gt; [--squash]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Merges a repository's history with the current repository, inside a specified directory.</p>\n\n<p>Optional <code>--squash</code> flag skips the full history and generates only one commit for the merge.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Merges a local repo's <code>frontend</code> branch into the current repo's <code>web</code> folder:</p>\n\n<pre><code>$ git merge-repo ../app/.git frontend web\n</code></pre>\n\n<p>  Merges a remote repo's <code>master</code> branch into the current repo's folder:</p>\n\n<pre><code>$ git merge-repo git@github.com:tj/git-extras.git master .\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Ivan Malopinsky &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#58;&#104;&#101;&#108;&#x6c;&#x6f;&#x40;&#105;&#109;&#115;&#107;&#x79;&#46;&#99;&#111;\" data-bare-link=\"true\">&#104;&#101;&#108;&#108;&#111;&#x40;&#105;&#109;&#x73;&#107;&#121;&#x2e;&#x63;&#111;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-merge-repo(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-merge-repo.md",
    "content": "git-merge-repo(1) -- Merge two repo histories\n=============================================\n\n## SYNOPSIS\n\n`git-merge-repo` &lt;repo&gt; &lt;branch&gt; &lt;directory&gt; [--squash]\n\n## DESCRIPTION\n\nMerges a repository's history with the current repository, inside a specified directory.\n\nOptional `--squash` flag skips the full history and generates only one commit for the merge.\n\n## EXAMPLES\n\n  Merges a local repo's `frontend` branch into the current repo's `web` folder:\n\n    $ git merge-repo ../app/.git frontend web\n\n  Merges a remote repo's `master` branch into the current repo's folder:\n\n    $ git merge-repo git@github.com:tj/git-extras.git master .\n\n## AUTHOR\n\nWritten by Ivan Malopinsky &lt;<hello@imsky.co>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-missing.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-MISSING\" \"1\" \"August 2024\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-missing\\fR \\- Show commits missing from another branch\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-missing\\fR [<first branch>] <second branch> [<git log options>] [[\\-\\-] <path>\\.\\.\\.]\n.\n.SH \"DESCRIPTION\"\nShows commits that are in either of two branches but not both\\. Useful for seeing what would come across in a merge or push\\. Optionally, the comparison can be limited to specific paths\\.\n.\n.SH \"OPTIONS\"\n[<first branch>]\n.\n.P\nFirst branch to compare\\. If not specified, defaults to currently checked out branch\\.\n.\n.P\n<second branch>\n.\n.P\nSecond branch to compare\\.\n.\n.P\n[<git log options>]\n.\n.P\nAny flags that should be passed to \\'git log\\', such as \\-\\-no\\-merges\\.\n.\n.P\n[[\\-\\-] <path>\\.\\.\\.]\n.\n.P\nOptional path specifications (pathspec) to limit the comparison to specific files or directories\\. For more details about the pathspec syntax, see the pathspec entry in gitglossary[7] \\fIhttps://git\\-scm\\.com/docs/gitglossary#Documentation/gitglossary\\.txt\\-aiddefpathspecapathspec\\fR\\.\n.\n.SH \"EXAMPLES\"\nShow commits on either my current branch or master but not both:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git missing master\n< d14b8f0 only on current checked out branch\n> 97ef387 only on master\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nShow commits on either branch foo or branch bar but not both:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git missing foo bar\n< b8f0d14 only on foo\n> f38797e only on bar\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nShow commits on either my current branch or master but not both, limited to the src/ directory:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git missing master \\-\\- src/\n< ed52989 only on current checked out branch, in src/ directory\n> 7988c4b only on master, in src/ directory\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Nate Jones <\\fInate@endot\\.org\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-missing.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-missing(1) - Show commits missing from another branch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-missing(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-missing(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-missing</code> - <span class=\"man-whatis\">Show commits missing from another branch</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-missing</code> [&lt;first branch&gt;] &lt;second branch&gt; [&lt;git log options&gt;] [[--] &lt;path&gt;...]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Shows commits that are in either of two branches but not both. Useful for\n  seeing what would come across in a merge or push. Optionally, the comparison\n  can be limited to specific paths.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  [&lt;first branch&gt;]</p>\n\n<p>  First branch to compare.  If not specified, defaults to currently checked out branch.</p>\n\n<p>  &lt;second branch&gt;</p>\n\n<p>  Second branch to compare.</p>\n\n<p>  [&lt;git log options&gt;]</p>\n\n<p>  Any flags that should be passed to 'git log', such as --no-merges.</p>\n\n<p>  [[--] &lt;path&gt;...]</p>\n\n<p>  Optional path specifications (pathspec) to limit the comparison to specific\n  files or directories. For more details about the pathspec syntax, see the\n  pathspec entry in <a href=\"https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec\">gitglossary[7]</a>.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Show commits on either my current branch or master but not both:</p>\n\n<pre><code>$ git missing master\n&lt; d14b8f0 only on current checked out branch\n> 97ef387 only on master\n</code></pre>\n\n<p>  Show commits on either branch foo or branch bar but not both:</p>\n\n<pre><code>$ git missing foo bar\n&lt; b8f0d14 only on foo\n> f38797e only on bar\n</code></pre>\n\n<p>  Show commits on either my current branch or master but not both, limited to the\n  src/ directory:</p>\n\n<pre><code>$ git missing master -- src/\n&lt; ed52989 only on current checked out branch, in src/ directory\n&gt; 7988c4b only on master, in src/ directory\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Nate Jones &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#116;&#111;&#x3a;&#110;&#x61;&#x74;&#101;&#64;&#x65;&#110;&#x64;&#x6f;&#116;&#46;&#x6f;&#x72;&#103;\" data-bare-link=\"true\">&#x6e;&#97;&#116;&#101;&#x40;&#101;&#110;&#100;&#111;&#116;&#46;&#x6f;&#114;&#x67;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2024</li>\n    <li class='tr'>git-missing(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-missing.md",
    "content": "git-missing(1) -- Show commits missing from another branch\n=========================================================\n\n## SYNOPSIS\n\n`git-missing` [&lt;first branch&gt;] &lt;second branch&gt; [&lt;git log options&gt;] [[--] &lt;path&gt;...]\n\n## DESCRIPTION\n\n  Shows commits that are in either of two branches but not both. Useful for\n  seeing what would come across in a merge or push. Optionally, the comparison\n  can be limited to specific paths.\n\n## OPTIONS\n\n  [&lt;first branch&gt;]\n\n  First branch to compare.  If not specified, defaults to currently checked out branch.\n\n  &lt;second branch&gt;\n\n  Second branch to compare.\n\n  [&lt;git log options&gt;]\n\n  Any flags that should be passed to 'git log', such as --no-merges.\n\n  [[--] &lt;path&gt;...]\n\n  Optional path specifications (pathspec) to limit the comparison to specific\n  files or directories. For more details about the pathspec syntax, see the\n  pathspec entry in [gitglossary[7]](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec).\n\n## EXAMPLES\n\n  Show commits on either my current branch or master but not both:\n\n    $ git missing master\n    < d14b8f0 only on current checked out branch\n    > 97ef387 only on master\n\n  Show commits on either branch foo or branch bar but not both:\n\n    $ git missing foo bar\n    < b8f0d14 only on foo\n    > f38797e only on bar\n\n  Show commits on either my current branch or master but not both, limited to the\n  src/ directory:\n\n    $ git missing master -- src/\n    < ed52989 only on current checked out branch, in src/ directory\n    > 7988c4b only on master, in src/ directory\n\n## AUTHOR\n\nWritten by Nate Jones &lt;<nate@endot.org>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-mr.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-MR\" \"1\" \"April 2018\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-mr\\fR \\- Checks out a merge request locally\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-mr\\fR <number> [<remote>]\n.\n.br\n\\fBgit\\-mr\\fR <url>\n.\n.br\n\\fBgit\\-mr clean\\fR\n.\n.SH \"DESCRIPTION\"\nFetches merge request head by its number or URl and check it out in a branch named with merge request number\\.\n.\n.SH \"OPTIONS\"\n<remote>\n.\n.P\nThe name of the remote to fetch from\\. Defaults to \\fBorigin\\fR\\.\n.\n.P\n<url>\n.\n.P\nGitLab merge request URL in the format \\fBhttps://gitlab\\.tld/owner/repository/merge_requests/453\\fR\\.\n.\n.SH \"EXAMPLES\"\nThis checks out merge request \\fB!51\\fR from remote \\fBorigin\\fR to branch \\fBmr/51\\fR\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git mr 51\nFrom gitlab\\.com:owner/repository\n * [new ref]         refs/merge\\-requests/51/head \\-> mr/51\nSwitched to branch \\'mr/51\\'\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Étienne BERSAC \\fIbersace03@gmail\\.com\\fR from git\\-pr(1)\\.\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-mr.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-mr(1) - Checks out a merge request locally</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-mr(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-mr(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-mr</code> - <span class=\"man-whatis\">Checks out a merge request locally</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-mr</code> &lt;number&gt; [&lt;remote&gt;]<br />\n<code>git-mr</code> &lt;url&gt;<br />\n<code>git-mr clean</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Fetches merge request head by its number or URl and check it out in a branch\n  named with merge request number.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;remote&gt;</p>\n\n<p>  The name of the remote to fetch from. Defaults to <code>origin</code>.</p>\n\n<p>  &lt;url&gt;</p>\n\n<p>  GitLab merge request URL in the format\n  <code>https://gitlab.tld/owner/repository/merge_requests/453</code>.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>This checks out merge request <code>!51</code> from remote <code>origin</code> to branch <code>mr/51</code>.</p>\n\n<pre><code>$ git mr 51\nFrom gitlab.com:owner/repository\n * [new ref]         refs/merge-requests/51/head -&gt; mr/51\nSwitched to branch 'mr/51'\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Étienne BERSAC <a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#58;&#x62;&#101;&#x72;&#115;&#97;&#x63;&#101;&#48;&#x33;&#64;&#103;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#x6f;&#109;\" data-bare-link=\"true\">&#x62;&#101;&#114;&#115;&#x61;&#x63;&#101;&#48;&#51;&#64;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#x63;&#111;&#109;</a> from <a class=\"man-ref\" href=\"git-pr.html\">git-pr<span class=\"s\">(1)</span></a>.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>April 2018</li>\n    <li class='tr'>git-mr(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-mr.md",
    "content": "git-mr(1) -- Checks out a merge request locally\n========================================\n\n## SYNOPSIS\n\n`git-mr` &lt;number&gt; [&lt;remote&gt;]<br>\n`git-mr` &lt;url&gt;<br>\n`git-mr clean`\n\n## DESCRIPTION\n\n  Fetches merge request head by its number or URl and check it out in a branch\n  named with merge request number.\n\n## OPTIONS\n\n  &lt;remote&gt;\n\n  The name of the remote to fetch from. Defaults to `origin`.\n\n  &lt;url&gt;\n\n  GitLab merge request URL in the format\n  `https://gitlab.tld/owner/repository/merge_requests/453`.\n\n\n## EXAMPLES\n\nThis checks out merge request `!51` from remote `origin` to branch `mr/51`.\n\n    $ git mr 51\n    From gitlab.com:owner/repository\n     * [new ref]         refs/merge-requests/51/head -> mr/51\n    Switched to branch 'mr/51'\n\n## AUTHOR\n\nWritten by Étienne BERSAC <bersace03@gmail.com> from git-pr(1).\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-obliterate.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-OBLITERATE\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-obliterate\\fR \\- rewrite past commits to remove some files\n.\n.SH \"SYNOPSIS\"\ngit obliterate <files\\.\\.\\.> [\\-\\- <rev\\-list options\\.\\.\\.>]\n.\n.SH \"DESCRIPTION\"\nCompletely remove some files from the repository, including past commits and tags\\. WARNING! This command will rewrite the history similar to \\fBgit rebase\\fR(though it affects more)\\. The rewritten history will have different object names for all the objects and will not converge with the original branch\\. So \\fBavoid using it on commits that you shared\\fR\\. And it will mess up stash, so \\fBdon\\'t have stash when you run \\fBgit obliterate\\fR\\fR\\.\n.\n.SH \"OPTIONS\"\nYou can pass rev\\-list options to indicate the range of commits affected\\. Those options need to be separated with \\'\\-\\-\\' before them\\. Run \\fBgit help rev\\-list\\fR to see the acceptable options\\.\n.\n.SH \"Examples\"\nRemove \\.secret from the repository:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git obliterate \\.secret\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nRemove \\.secret from commits between origin and feature:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git obliterate \\.secret \\-\\- feature ^origin\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nRemove \\.secret from commit abcdefg to commit 1234567\n.\n.IP \"\" 4\n.\n.nf\n\n$ git obliterate \\.secret \\-\\- abcdefg\\.\\.1234567\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by <\\fIbrianloveswords@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUG\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-obliterate.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-obliterate(1) - rewrite past commits to remove some files</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#Examples\">Examples</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUG\">REPORTING BUG</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-obliterate(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-obliterate(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-obliterate</code> - <span class=\"man-whatis\">rewrite past commits to remove some files</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p>git obliterate &lt;files...&gt; [-- &lt;rev-list options...&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Completely remove some files from the repository, including past commits and tags.\nWARNING! This command will rewrite the history similar to <code>git rebase</code>(though it affects more). The rewritten history will have different object names for all the objects and will not converge with the original branch. So <strong>avoid using it on commits that you shared</strong>.\nAnd it will mess up stash, so <strong>don't have stash when you run <code>git obliterate</code></strong>.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>You can pass rev-list options to indicate the range of commits affected. Those options need to be separated with '--' before them. Run <code>git help rev-list</code> to see the acceptable options.</p>\n\n<h2 id=\"Examples\">Examples</h2>\n\n<p>  Remove .secret from the repository:</p>\n\n<pre><code>$ git obliterate .secret\n</code></pre>\n\n<p>  Remove .secret from commits between origin and feature:</p>\n\n<pre><code>$ git obliterate .secret -- feature ^origin\n</code></pre>\n\n<p>  Remove .secret from commit abcdefg to commit 1234567</p>\n\n<pre><code>$ git obliterate .secret -- abcdefg..1234567\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by &lt;<a href=\"&#x6d;&#97;&#x69;&#108;&#x74;&#x6f;&#x3a;&#98;&#114;&#x69;&#97;&#110;&#108;&#111;&#x76;&#101;&#x73;&#x77;&#111;&#x72;&#x64;&#x73;&#x40;&#103;&#109;&#x61;&#x69;&#108;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x62;&#x72;&#x69;&#x61;&#110;&#108;&#x6f;&#118;&#101;&#115;&#119;&#111;&#114;&#100;&#115;&#x40;&#x67;&#x6d;&#x61;&#105;&#108;&#46;&#99;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUG\">REPORTING BUG</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-obliterate(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-obliterate.md",
    "content": "git-obliterate(1) -- rewrite past commits to remove some files\n===============================\n\n## SYNOPSIS\n\ngit obliterate &lt;files...&gt; [-- &lt;rev-list options...&gt;]\n\n## DESCRIPTION\n\nCompletely remove some files from the repository, including past commits and tags. \nWARNING! This command will rewrite the history similar to `git rebase`(though it affects more). The rewritten history will have different object names for all the objects and will not converge with the original branch. So **avoid using it on commits that you shared**.\nAnd it will mess up stash, so **don't have stash when you run `git obliterate`**.\n\n## OPTIONS\n\nYou can pass rev-list options to indicate the range of commits affected. Those options need to be separated with '--' before them. Run `git help rev-list` to see the acceptable options.\n\n## Examples\n\n  Remove .secret from the repository:\n\n    $ git obliterate .secret\n\n  Remove .secret from commits between origin and feature:\n\n    $ git obliterate .secret -- feature ^origin\n\n  Remove .secret from commit abcdefg to commit 1234567\n\n    $ git obliterate .secret -- abcdefg..1234567\n\n## AUTHOR\n\nWritten by &lt;<brianloveswords@gmail.com>&gt;\n\n## REPORTING BUG\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-paste.1",
    "content": ".\\\" generated with Ronn-NG/v0.8.0\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.8.0\n.TH \"GIT\\-PASTE\" \"1\" \"September 2019\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-paste\\fR \\- Send patches to pastebin for chat conversations\n.SH \"SYNOPSIS\"\n\\fBgit\\-paste\\fR <git format\\-patch options>\n.SH \"DESCRIPTION\"\nSend patches to pastebin for chat conversations using pastebinit\\. The syntax highlighting will be set to \\'diff\\'\\.\n.SH \"OPTIONS\"\n<git format\\-patch options>\n.P\nAll options are passed directly to \\fBgit format\\-patch\\fR\\. Given no arguments, \\fBgit\\-paste\\fR passes \\fB@{u}\\fR to \\fBgit format\\-patch\\fR\\.\n.SH \"CONFIGURATION\"\nThe pastebinit software chooses the most appropriate pastebin site for your operating system and the pastebinit documentation \\fI\\%https://manpages\\.debian\\.org/pastebinit\\fR contains details of how to configure it to use a different site\\.\n.SH \"EXAMPLES\"\nPastebin the patches between the current branch and its upstream:\n.IP \"\" 4\n.nf\n$ git paste\n$ git paste @{u}\n.fi\n.IP \"\" 0\n.P\nPastebin the latest commit:\n.IP \"\" 4\n.nf\n$ git paste \\-1\n.fi\n.IP \"\" 0\n.P\nPastebin the latest three commits:\n.IP \"\" 4\n.nf\n$ git paste \\-3\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Paul Wise <\\fI\\%mailto:pabs3@bonedaddy\\.net\\fR>\n.SH \"REPORTING BUGS\"\n<\\fI\\%https://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fI\\%https://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-paste.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.8.0 (http://github.com/apjanke/ronn-ng/tree/0.8.0)'>\n  <title>git-paste(1) - Send patches to pastebin for chat conversations</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#CONFIGURATION\">CONFIGURATION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-paste(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-paste(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-paste</code> - <span class=\"man-whatis\">Send patches to pastebin for chat conversations</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-paste</code> &lt;git format-patch options&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Send patches to pastebin for chat conversations using pastebinit.\n  The syntax highlighting will be set to 'diff'.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;git format-patch options&gt;</p>\n\n<p>  All options are passed directly to <code>git format-patch</code>.\n  Given no arguments, <code>git-paste</code> passes <code>@{u}</code> to <code>git format-patch</code>.</p>\n\n<h2 id=\"CONFIGURATION\">CONFIGURATION</h2>\n\n<p>  The pastebinit software chooses the most appropriate pastebin site\n  for your operating system and the <a href=\"https://manpages.debian.org/pastebinit\">pastebinit documentation</a>\n  contains details of how to configure it to use a different site.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p> Pastebin the patches between the current branch and its upstream:</p>\n\n<pre><code>$ git paste\n$ git paste @{u}\n</code></pre>\n\n<p> Pastebin the latest commit:</p>\n\n<pre><code>$ git paste -1\n</code></pre>\n\n<p> Pastebin the latest three commits:</p>\n\n<pre><code>$ git paste -3\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Paul Wise &lt;<a href=\"mailto:pabs3@bonedaddy.net\" data-bare-link=\"true\">pabs3@bonedaddy.net</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2019</li>\n    <li class='tr'>git-paste(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-paste.md",
    "content": "git-paste(1) -- Send patches to pastebin for chat conversations\n===============================================================\n\n## SYNOPSIS\n\n`git-paste` &lt;git format-patch options&gt;\n\n## DESCRIPTION\n\n  Send patches to pastebin for chat conversations using pastebinit.\n  The syntax highlighting will be set to 'diff'.\n\n## OPTIONS\n\n  &lt;git format-patch options&gt;\n\n  All options are passed directly to `git format-patch`.\n  Given no arguments, `git-paste` passes `@{u}` to `git format-patch`.\n\n## CONFIGURATION\n\n  The pastebinit software chooses the most appropriate pastebin site\n  for your operating system and the [pastebinit documentation](https://manpages.debian.org/pastebinit)\n  contains details of how to configure it to use a different site.\n\n## EXAMPLES\n\n Pastebin the patches between the current branch and its upstream:\n\n    $ git paste\n    $ git paste @{u}\n\n Pastebin the latest commit:\n\n    $ git paste -1\n\n Pastebin the latest three commits:\n\n    $ git paste -3\n\n## AUTHOR\n\nWritten by Paul Wise &lt;<pabs3@bonedaddy.net>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-pr.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-PR\" \"1\" \"September 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-pr\\fR \\- Checks out a pull request locally\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-pr\\fR [\\-m|\\-\\-merge] <number> [<remote>]\n.\n.br\n\\fBgit\\-pr\\fR [\\-m|\\-\\-merge] <[remote]:number>\\.\\.\\.\n.\n.br\n\\fBgit\\-pr\\fR [\\-m|\\-\\-merge] <url>\\.\\.\\.\n.\n.br\n\\fBgit\\-pr clean\\fR\n.\n.SH \"DESCRIPTION\"\nCreates a local branch based on a GitHub pull request number or URL, and switch to that branch afterwards\\.\n.\n.SH \"OPTIONS\"\n<remote>\n.\n.P\nThe name of the remote to fetch from\\. Defaults to \\fBorigin\\fR\\.\n.\n.P\n<url>\n.\n.P\nGitHub pull request URL in the format \\fBhttps://github\\.com/tj/git\\-extras/pull/453\\fR\\.\n.\n.P\n\\-m | \\-\\-merge\n.\n.P\nCheckout a merge commit against the branch the pull request is targeting\\. Because this feature uses a private API with which GitHub checks the pull request\\'s mergeability, it only works with the opened pull request\\. If the merge commit is not up\\-to\\-date, please visit the pull request web page to trigger the rebuild\\.\n.\n.SH \"EXAMPLES\"\nThis checks out the pull request \\fB226\\fR from \\fBorigin\\fR:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr 226\n\nremote: Counting objects: 12, done\\.\nremote: Compressing objects: 100% (9/9), done\\.\nremote: Total 12 (delta 3), reused 9 (delta 3)\nUnpacking objects: 100% (12/12), done\\.\nFrom https://github\\.com/tj/git\\-extras\n * [new ref]         refs/pull/226/head \\-> pr/226\n\nSwitched to branch \\'pr/226\\'\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nThis pulls from a different remote:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr 226 upstream\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nThis does the same thing as the command above:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr upstream:226\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nYou can also checkout a pull request based on a GitHub URL:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr https://github\\.com/tj/git\\-extras/pull/453\n\nFrom https://github\\.com/tj/git\\-extras\n * [new ref]         refs/pull/453/head \\-> pr/453\nSwitched to branch \\'pr/453\\'\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nYou could even pull multiple pull requests via the GitHub URL or the ID \\fBwith remote specified\\fR:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr upstream:226 upstream:443\n$ git pr upstream:443 https://github\\.com/tj/git\\-extras/pull/453\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nNote that \\fBgit pr PR\\-A PR\\-B\\fR is equal to:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr PR\\-A\n$ git pr PR\\-B\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nTherefore, if one of the pull request is failed to pull, this command will still go ahead and pull the others\\. The final exit code will be decided by the result of the final pulling\\.\n.\n.P\nWith \\fB\\-\\-merge\\fR option, you could check out a merge commit:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr origin:755 \\-\\-merge\nremote: Enumerating objects: 3, done\\.\nremote: Counting objects: 100% (3/3), done\\.\nremote: Compressing objects: 100% (3/3), done\\.\nremote: Total 3 (delta 0), reused 0 (delta 0), pack\\-reused 0\nUnpacking objects: 100% (3/3), done\\.\nFrom github\\.com:tj/git\\-extras\nbf7dd69\\.\\.de6e51c  refs/pull/755/merge \\-> pr/755\nSwitched to branch \\'pr/775\\'\n\n$ git log pr/775 \\-\\-oneline\nde6e51c (pr/755) Merge bf7dd6\\.\\.\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nTo clean up old branches:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git pr clean\n\nDeleted branch pr/226 (was b96a8c2)\\.\nDeleted branch pr/220 (was d34dc0f)\\.\nDeleted branch pr/775 (was de6e51c)\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nOriginally from https://gist\\.github\\.com/gnarf/5406589\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-pr.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-pr(1) - Checks out a pull request locally</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-pr(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-pr(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-pr</code> - <span class=\"man-whatis\">Checks out a pull request locally</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-pr</code> [-m|--merge] &lt;number&gt; [&lt;remote&gt;]<br />\n<code>git-pr</code> [-m|--merge] &lt;[remote]:number&gt;...<br />\n<code>git-pr</code> [-m|--merge] &lt;url&gt;...<br />\n<code>git-pr clean</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Creates a local branch based on a GitHub pull request number or URL, and\n  switch to that branch afterwards.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;remote&gt;</p>\n\n<p>  The name of the remote to fetch from. Defaults to <code>origin</code>.</p>\n\n<p>  &lt;url&gt;</p>\n\n<p>  GitHub pull request URL in the format <code>https://github.com/tj/git-extras/pull/453</code>.</p>\n\n<p>  -m | --merge</p>\n\n<p>  Checkout a merge commit against the branch the pull request is targeting.\n  Because this feature uses a private API with which GitHub checks the pull\n  request's mergeability, it only works with the opened pull request. If the merge\n  commit is not up-to-date, please visit the pull request web page to trigger the\n  rebuild.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>This checks out the pull request <code>226</code> from <code>origin</code>:</p>\n\n<pre><code>$ git pr 226\n\nremote: Counting objects: 12, done.\nremote: Compressing objects: 100% (9/9), done.\nremote: Total 12 (delta 3), reused 9 (delta 3)\nUnpacking objects: 100% (12/12), done.\nFrom https://github.com/tj/git-extras\n * [new ref]         refs/pull/226/head -&gt; pr/226\n\nSwitched to branch 'pr/226'\n</code></pre>\n\n<p>This pulls from a different remote:</p>\n\n<pre><code>$ git pr 226 upstream\n</code></pre>\n\n<p>This does the same thing as the command above:</p>\n\n<pre><code>$ git pr upstream:226\n</code></pre>\n\n<p>You can also checkout a pull request based on a GitHub URL:</p>\n\n<pre><code>$ git pr https://github.com/tj/git-extras/pull/453\n\nFrom https://github.com/tj/git-extras\n * [new ref]         refs/pull/453/head -&gt; pr/453\nSwitched to branch 'pr/453'\n</code></pre>\n\n<p>You could even pull multiple pull requests via the GitHub URL or the ID <strong>with remote specified</strong>:</p>\n\n<pre><code>$ git pr upstream:226 upstream:443\n$ git pr upstream:443 https://github.com/tj/git-extras/pull/453\n</code></pre>\n\n<p>Note that <code>git pr PR-A PR-B</code> is equal to:</p>\n\n<pre><code>$ git pr PR-A\n$ git pr PR-B\n</code></pre>\n\n<p>Therefore, if one of the pull request is failed to pull, this command will still go ahead and pull\nthe others. The final exit code will be decided by the result of the final pulling.</p>\n\n<p>With <code>--merge</code> option, you could check out a merge commit:</p>\n\n<pre><code>$ git pr origin:755 --merge\nremote: Enumerating objects: 3, done.\nremote: Counting objects: 100% (3/3), done.\nremote: Compressing objects: 100% (3/3), done.\nremote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0\nUnpacking objects: 100% (3/3), done.\nFrom github.com:tj/git-extras\nbf7dd69..de6e51c  refs/pull/755/merge -&gt; pr/755\nSwitched to branch 'pr/775'\n\n$ git log pr/775 --oneline\nde6e51c (pr/755) Merge bf7dd6...\n</code></pre>\n\n<p>To clean up old branches:</p>\n\n<pre><code>$ git pr clean\n\nDeleted branch pr/226 (was b96a8c2).\nDeleted branch pr/220 (was d34dc0f).\nDeleted branch pr/775 (was de6e51c).\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Originally from https://gist.github.com/gnarf/5406589</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2020</li>\n    <li class='tr'>git-pr(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-pr.md",
    "content": "git-pr(1) -- Checks out a pull request locally\n=================================\n\n## SYNOPSIS\n\n`git-pr` [-m|--merge] &lt;number&gt; [&lt;remote&gt;]<br>\n`git-pr` [-m|--merge] &lt;[remote]:number&gt;...<br>\n`git-pr` [-m|--merge] &lt;url&gt;...<br>\n`git-pr clean`\n\n## DESCRIPTION\n\n  Creates a local branch based on a GitHub pull request number or URL, and\n  switch to that branch afterwards.\n\n## OPTIONS\n\n  &lt;remote&gt;\n\n  The name of the remote to fetch from. Defaults to `origin`.\n\n  &lt;url&gt;\n\n  GitHub pull request URL in the format `https://github.com/tj/git-extras/pull/453`.\n\n  -m | --merge\n\n  Checkout a merge commit against the branch the pull request is targeting.\n  Because this feature uses a private API with which GitHub checks the pull\n  request's mergeability, it only works with the opened pull request. If the merge\n  commit is not up-to-date, please visit the pull request web page to trigger the\n  rebuild.\n\n## EXAMPLES\n\nThis checks out the pull request `226` from `origin`:\n\n    $ git pr 226\n\n    remote: Counting objects: 12, done.\n    remote: Compressing objects: 100% (9/9), done.\n    remote: Total 12 (delta 3), reused 9 (delta 3)\n    Unpacking objects: 100% (12/12), done.\n    From https://github.com/tj/git-extras\n     * [new ref]         refs/pull/226/head -> pr/226\n\n    Switched to branch 'pr/226'\n\nThis pulls from a different remote:\n\n    $ git pr 226 upstream\n\nThis does the same thing as the command above:\n\n    $ git pr upstream:226\n\nYou can also checkout a pull request based on a GitHub URL:\n\n    $ git pr https://github.com/tj/git-extras/pull/453\n\n    From https://github.com/tj/git-extras\n     * [new ref]         refs/pull/453/head -> pr/453\n    Switched to branch 'pr/453'\n\nYou could even pull multiple pull requests via the GitHub URL or the ID **with remote specified**:\n\n    $ git pr upstream:226 upstream:443\n    $ git pr upstream:443 https://github.com/tj/git-extras/pull/453\n\nNote that `git pr PR-A PR-B` is equal to:\n\n    $ git pr PR-A\n    $ git pr PR-B\n\nTherefore, if one of the pull request is failed to pull, this command will still go ahead and pull\nthe others. The final exit code will be decided by the result of the final pulling.\n\nWith `--merge` option, you could check out a merge commit:\n\n    $ git pr origin:755 --merge\n    remote: Enumerating objects: 3, done.\n    remote: Counting objects: 100% (3/3), done.\n    remote: Compressing objects: 100% (3/3), done.\n    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0\n    Unpacking objects: 100% (3/3), done.\n    From github.com:tj/git-extras\n    bf7dd69..de6e51c  refs/pull/755/merge -> pr/755\n    Switched to branch 'pr/775'\n\n    $ git log pr/775 --oneline\n    de6e51c (pr/755) Merge bf7dd6...\n\nTo clean up old branches:\n\n    $ git pr clean\n\n    Deleted branch pr/226 (was b96a8c2).\n    Deleted branch pr/220 (was d34dc0f).\n    Deleted branch pr/775 (was de6e51c).\n\n## AUTHOR\n\nOriginally from https://gist.github.com/gnarf/5406589\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-psykorebase.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-PSYKOREBASE\" \"1\" \"August 2021\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-psykorebase\\fR \\- Rebase a branch with a merge commit\n.SH \"SYNOPSIS\"\n\\fBgit\\-psykorebase\\fR <target_branch> [<feature_branch>] [\\-\\-no\\-ff]\n.br\n\\fBgit\\-psykorebase\\fR \\-\\-continue\n.SH \"DESCRIPTION\"\nRebase the \\fBfeature_branch\\fR on top of the \\fBtarget_branch\\fR, the \\fBfeature_branch\\fR defaults to the current one\\.\n.SH \"OPTIONS\"\n\\fB\\-\\-no\\-ff\\fR Force a commit message even if there are no conflicts\\.\n.P\n\\fB\\-\\-continue\\fR Continue the rebase after conflicts have been resolved\\.\n.SH \"EXAMPLES\"\nRebase current branch on top of master:\n.IP \"\" 4\n.nf\n$ git psykorebase master \\-\\-no\\-ff\n.fi\n.IP \"\" 0\n.P\nHandle conflicts:\n.IP \"\" 4\n.nf\n$ git add README\\.md\n.fi\n.IP \"\" 0\n.P\nContinue rebase:\n.IP \"\" 4\n.nf\n$ git psykorebase \\-\\-continue\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Rémy Hubscher <\\fIhubscher\\.remy@gmail\\.com\\fR>\n.P\nBased on Benoît Bryon <\\fIbenoit@marmelune\\.net\\fR> implementation in Python\\.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n.P\n<\\fIhttps://github\\.com/benoitbryon/psykorebase\\fR>\n"
  },
  {
    "path": "man/git-psykorebase.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-psykorebase(1) - Rebase a branch with a merge commit</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-psykorebase(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-psykorebase(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-psykorebase</code> - <span class=\"man-whatis\">Rebase a branch with a merge commit</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-psykorebase</code> &lt;target_branch&gt; [&lt;feature_branch&gt;] [--no-ff]<br>\n<code>git-psykorebase</code> --continue</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Rebase the <code>feature_branch</code> on top of the <code>target_branch</code>, the\n<code>feature_branch</code> defaults to the current one.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p><code>--no-ff</code> Force a commit message even if there are no conflicts.</p>\n\n<p><code>--continue</code> Continue the rebase after conflicts have been resolved.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Rebase current branch on top of master:</p>\n\n<pre><code>$ git psykorebase master --no-ff\n</code></pre>\n\n<p>Handle conflicts:</p>\n\n<pre><code>$ git add README.md\n</code></pre>\n\n<p>Continue rebase:</p>\n\n<pre><code>$ git psykorebase --continue\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Rémy Hubscher &lt;<a href=\"mailto:hubscher.remy@gmail.com\" data-bare-link=\"true\">hubscher.remy@gmail.com</a>&gt;</p>\n\n<p>Based on Benoît Bryon &lt;<a href=\"mailto:benoit@marmelune.net\" data-bare-link=\"true\">benoit@marmelune.net</a>&gt; implementation in\nPython.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n<p>&lt;<a href=\"https://github.com/benoitbryon/psykorebase\" data-bare-link=\"true\">https://github.com/benoitbryon/psykorebase</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2021</li>\n    <li class='tr'>git-psykorebase(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-psykorebase.md",
    "content": "git-psykorebase(1) -- Rebase a branch with a merge commit\n=========================================================\n\n## SYNOPSIS\n\n`git-psykorebase` &lt;target_branch&gt; [&lt;feature_branch&gt;] [--no-ff]  \n`git-psykorebase` --continue\n\n## DESCRIPTION\n\nRebase the `feature_branch` on top of the `target_branch`, the\n`feature_branch` defaults to the current one.\n\n## OPTIONS\n\n  `--no-ff` Force a commit message even if there are no conflicts.\n\n  `--continue` Continue the rebase after conflicts have been resolved.\n\n## EXAMPLES\n\n  Rebase current branch on top of master:\n\n    $ git psykorebase master --no-ff\n\n  Handle conflicts:\n\n    $ git add README.md\n\n  Continue rebase:\n\n    $ git psykorebase --continue\n\n## AUTHOR\n\nWritten by Rémy Hubscher &lt;<hubscher.remy@gmail.com>&gt;\n\nBased on Benoît Bryon &lt;<benoit@marmelune.net>&gt; implementation in\nPython.\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n\n&lt;<https://github.com/benoitbryon/psykorebase>&gt;\n"
  },
  {
    "path": "man/git-pull-request.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-PULL\\-REQUEST\" \"1\" \"August 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-pull\\-request\\fR \\- Create pull request for GitHub project\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-pull\\-request\\fR [<target branch>]\n.\n.SH \"DESCRIPTION\"\nCreate pull request for a project on GitHub via command line\\.\n.\n.P\nA personal access token is required for making the API call to open the pull request(s) in GitHub\\. API Documentation here \\fIhttps://docs\\.github\\.com/en/rest/reference/pulls#create\\-a\\-pull\\-request\\fR\n.\n.P\nMake sure the personal access token has the right \\fBOAuth\\fR scopes for the repo(s)\n.\n.P\nUse \\fBGITHUB_TOKEN\\fR environment variable, or \\fBgit config \\-\\-global \\-\\-add git\\-extras\\.github\\-personal\\-access\\-token <your\\-personal\\-access\\-token>\\fR\n.\n.P\nIf using multiple accounts, override the global value in the specific repo using \\fBgit config git\\-extras\\.github\\-personal\\-access\\-token <other\\-acc\\-personal\\-access\\-token>\\fR\n.\n.SH \"OPTIONS\"\n<target branch>\n.\n.P\nThe target branch you want to send pull request to\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git pull\\-request master\nEverything up\\-to\\-date\n\n  create pull\\-request for spacewander/spacewander\\-toolbox \\'master\\'\n\n  title: test\n  body:\n  base [master]:\n  GitHub two\\-factor authentication code (leave blank if not set up):\n\n\\.\\.\\.\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-pull-request.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-pull-request(1) - Create pull request for GitHub project</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-pull-request(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-pull-request(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-pull-request</code> - <span class=\"man-whatis\">Create pull request for GitHub project</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-pull-request</code> [&lt;target branch&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Create pull request for a project on GitHub via command line.</p>\n\n<p>A personal access token is required for making the API call to open the pull request(s) in GitHub. <a href=\"https://docs.github.com/en/rest/reference/pulls#create-a-pull-request\">API Documentation here</a></p>\n\n<p>Make sure the personal access token has the right <code>OAuth</code> scopes for the repo(s)</p>\n\n<p>Use <code>GITHUB_TOKEN</code> environment variable, or <code>git config --global --add git-extras.github-personal-access-token &lt;your-personal-access-token></code></p>\n\n<p>If using multiple accounts, override the global value in the specific repo using <code>git config git-extras.github-personal-access-token &lt;other-acc-personal-access-token></code></p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;target branch&gt;</p>\n\n<p>The target branch you want to send pull request to.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git pull-request master\nEverything up-to-date\n\n  create pull-request for spacewander/spacewander-toolbox 'master'\n\n  title: test\n  body:\n  base [master]:\n  GitHub two-factor authentication code (leave blank if not set up):\n\n...\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#109;&#97;&#105;&#108;&#x74;&#111;&#x3a;&#x74;&#x6a;&#64;&#118;&#x69;&#x73;&#105;&#x6f;&#x6e;&#x2d;&#109;&#x65;&#x64;&#x69;&#97;&#46;&#99;&#97;\" data-bare-link=\"true\">&#116;&#x6a;&#x40;&#118;&#x69;&#x73;&#105;&#x6f;&#x6e;&#45;&#109;&#x65;&#x64;&#x69;&#97;&#x2e;&#x63;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2020</li>\n    <li class='tr'>git-pull-request(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-pull-request.md",
    "content": "git-pull-request(1) -- Create pull request for GitHub project\n================================\n\n## SYNOPSIS\n\n`git-pull-request` [&lt;target branch&gt;]\n\n## DESCRIPTION\n\nCreate pull request for a project on GitHub via command line.\n\nA personal access token is required for making the API call to open the pull request(s) in GitHub. [API Documentation here](https://docs.github.com/en/rest/reference/pulls#create-a-pull-request)\n\nMake sure the personal access token has the right `OAuth` scopes for the repo(s)\n\nUse `GITHUB_TOKEN` environment variable, or `git config --global --add git-extras.github-personal-access-token <your-personal-access-token>`\n\nIf using multiple accounts, override the global value in the specific repo using `git config git-extras.github-personal-access-token <other-acc-personal-access-token>`\n\n## OPTIONS\n\n&lt;target branch&gt;\n\nThe target branch you want to send pull request to.\n\n## EXAMPLES\n\n```\n$ git pull-request master\nEverything up-to-date\n\n  create pull-request for spacewander/spacewander-toolbox 'master'\n\n  title: test\n  body:  \n  base [master]: \n  GitHub two-factor authentication code (leave blank if not set up): \n\n...\n```\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-reauthor.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-REAUTHOR\" \"1\" \"September 2019\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-reauthor\\fR \\- Rewrite history to change author's identity\n.SH \"SYNOPSIS\"\n\\fBgit reauthor [<options>]\\fR\n.SH \"DESCRIPTION\"\nLets you replace the author and/or committer identities in commits and tags\\.\n.P\nThe command goes through all existing commits and tags in all local branches to selectively modify the identities present in those objects\\. All the other information such as dates, messages,\\.\\. are preserved\\.\n.P\nYou can rewrite all the identities in the commits and tags objects by using the \\-\\-all flag, or only replace the identities whose email matches the value of the \\-\\-old\\-email option\\. It is also possible to limit the rewrite to a certain type of identity: the author or the committer identity\\. By default, both of them are affected\\.\n.br\nFor each of those identities to update, the command will replace the name and/or email with the new correct values as defined via the options\\. If the new identity name to set is not defined, the current one will be kept (and vice\\-versa with the email)\\.\n.P\n\\fBWARNING!\\fR This command rewrites history and as a result you will not able to push your branch to the remote without using the \\-\\-force option\\.\n.br\nSee more information with \\fBgit help filter\\-branch\\fR\\.\n.SH \"OPTIONS\"\n\\-a, \\-\\-all\n.IP \"\" 4\n.nf\nRewrite ALL identities in commits and tags\\.\n.fi\n.IP \"\" 0\n.P\n\\-c, \\-\\-use\\-config\n.IP \"\" 4\n.nf\nDefine correct values from user Git config\nValues of \\-\\-correct\\-email and \\-\\-correct\\-name options take precedence over the ones from the config if specified as well\n.fi\n.IP \"\" 0\n.P\n\\-e, \\-\\-correct\\-email <\\fIemail\\fR>\n.IP \"\" 4\n.nf\nDefine the correct email to set\nEmpty email '' is allowed\n.fi\n.IP \"\" 0\n.P\n\\-n, \\-\\-correct\\-name <\\fIname\\fR>\n.IP \"\" 4\n.nf\nDefine the correct name to set\nEmpty name '' is not allowed\n.fi\n.IP \"\" 0\n.P\n\\-o, \\-\\-old\\-email <\\fIemail\\fR>\n.IP \"\" 4\n.nf\nRewrite identities matching old email in commits and tags\nEmpty email '' is allowed\n.fi\n.IP \"\" 0\n.P\n\\-t, \\-\\-type <\\fIid\\fR>\n.IP \"\" 4\n.nf\nDefine the type of identities affected by the rewrite\nPossible type identifiers are: author, committer, both (default)\n.fi\n.IP \"\" 0\n.SH \"EXAMPLES\"\nReplace the personal email and name of Jack to his work ones\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-old\\-email jack@perso\\.me \\-\\-correct\\-email jack@work\\.com \\-\\-correct\\-name 'Jack Foobar'\n.fi\n.IP \"\" 0\n.P\nReplace the email and name of Jack to the ones defined in the Git config\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-old\\-email jack@perso\\.me \\-\\-use\\-config\n.fi\n.IP \"\" 0\n.P\nReplace only the email of Jack (keep the name already used)\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-old\\-email jack@perso \\-\\-correct\\-email jack@perso\\.me\n.fi\n.IP \"\" 0\n.P\nChange only the committer email of Jack (keep the author email already used)\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-old\\-email jack@perso\\.me \\-\\-correct\\-email jack@work\\.com \\-\\-type committer\n.fi\n.IP \"\" 0\n.P\nChange only the name and keep email to merge one user with multiple pseudonyms\\.\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-old\\-email jack@perso\\.me \\-\\-correct\\-name Jack\n.fi\n.IP \"\" 0\n.P\nSet Jack's identity as the only one of the whole repository\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-all \\-\\-correct\\-email jack@perso\\.me \\-\\-correct\\-name Jack\n.fi\n.IP \"\" 0\n.P\nSet Jack as the only committer of the whole repository (keeps authors)\n.IP \"\" 4\n.nf\n$ git reauthor \\-\\-all \\-\\-correct\\-email jack@perso\\.me \\-\\-correct\\-name Jack \\-\\-type committer\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Damien Tardy\\-Panis <\\fIdamien@tardypad\\.me\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-reauthor.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-reauthor(1) - Rewrite history to change author&#39;s identity</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-reauthor(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-reauthor(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-reauthor</code> - <span class=\"man-whatis\">Rewrite history to change author's identity</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git reauthor [&lt;options&gt;]</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Lets you replace the author and/or committer identities in commits and tags.</p>\n\n<p>The command goes through all existing commits and tags in all local branches to selectively modify the identities present in those objects. All the other information such as dates, messages,.. are preserved.</p>\n\n<p>You can rewrite all the identities in the commits and tags objects by using the --all flag, or only replace the identities whose email matches the value of the --old-email option. It is also possible to limit the rewrite to a certain type of identity: the author or the committer identity. By default, both of them are affected.<br>\nFor each of those identities to update, the command will replace the name and/or email with the new correct values as defined via the options. If the new identity name to set is not defined, the current one will be kept (and vice-versa with the email).</p>\n\n<p><code>WARNING!</code> This command rewrites history and as a result you will not able to push your branch to the remote without using the --force option.<br>\nSee more information with <code>git help filter-branch</code>.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-a, --all</p>\n\n<pre><code>Rewrite ALL identities in commits and tags.\n</code></pre>\n\n<p>-c, --use-config</p>\n\n<pre><code>Define correct values from user Git config\nValues of --correct-email and --correct-name options take precedence over the ones from the config if specified as well\n</code></pre>\n\n<p>-e, --correct-email &lt;<var>email</var>&gt;</p>\n\n<pre><code>Define the correct email to set\nEmpty email '' is allowed\n</code></pre>\n\n<p>-n, --correct-name &lt;<var>name</var>&gt;</p>\n\n<pre><code>Define the correct name to set\nEmpty name '' is not allowed\n</code></pre>\n\n<p>-o, --old-email &lt;<var>email</var>&gt;</p>\n\n<pre><code>Rewrite identities matching old email in commits and tags\nEmpty email '' is allowed\n</code></pre>\n\n<p>-t, --type &lt;<var>id</var>&gt;</p>\n\n<pre><code>Define the type of identities affected by the rewrite\nPossible type identifiers are: author, committer, both (default)\n</code></pre>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Replace the personal email and name of Jack to his work ones</p>\n\n<pre><code>$ git reauthor --old-email jack@perso.me --correct-email jack@work.com --correct-name 'Jack Foobar'\n</code></pre>\n\n<p>Replace the email and name of Jack to the ones defined in the Git config</p>\n\n<pre><code>$ git reauthor --old-email jack@perso.me --use-config\n</code></pre>\n\n<p>Replace only the email of Jack (keep the name already used)</p>\n\n<pre><code>$ git reauthor --old-email jack@perso --correct-email jack@perso.me\n</code></pre>\n\n<p>Change only the committer email of Jack (keep the author email already used)</p>\n\n<pre><code>$ git reauthor --old-email jack@perso.me --correct-email jack@work.com --type committer\n</code></pre>\n\n<p>Change only the name and keep email to merge one user with multiple pseudonyms.</p>\n\n<pre><code>$ git reauthor --old-email jack@perso.me --correct-name Jack\n</code></pre>\n\n<p>Set Jack's identity as the only one of the whole repository</p>\n\n<pre><code>$ git reauthor --all --correct-email jack@perso.me --correct-name Jack\n</code></pre>\n\n<p>Set Jack as the only committer of the whole repository (keeps authors)</p>\n\n<pre><code>$ git reauthor --all --correct-email jack@perso.me --correct-name Jack --type committer\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Damien Tardy-Panis &lt;<a href=\"mailto:damien@tardypad.me\" data-bare-link=\"true\">damien@tardypad.me</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2019</li>\n    <li class='tr'>git-reauthor(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-reauthor.md",
    "content": "git-reauthor(1) -- Rewrite history to change author's identity\n==============================================================\n\n## SYNOPSIS\n\n`git reauthor [<options>]`\n\n## DESCRIPTION\n\nLets you replace the author and/or committer identities in commits and tags.\n\nThe command goes through all existing commits and tags in all local branches to selectively modify the identities present in those objects. All the other information such as dates, messages,.. are preserved.\n\nYou can rewrite all the identities in the commits and tags objects by using the --all flag, or only replace the identities whose email matches the value of the --old-email option. It is also possible to limit the rewrite to a certain type of identity: the author or the committer identity. By default, both of them are affected.  \nFor each of those identities to update, the command will replace the name and/or email with the new correct values as defined via the options. If the new identity name to set is not defined, the current one will be kept (and vice-versa with the email).\n\n`WARNING!` This command rewrites history and as a result you will not able to push your branch to the remote without using the --force option.  \nSee more information with `git help filter-branch`.\n\n## OPTIONS\n\n  -a, --all\n\n    Rewrite ALL identities in commits and tags.\n\n  -c, --use-config\n\n    Define correct values from user Git config\n    Values of --correct-email and --correct-name options take precedence over the ones from the config if specified as well\n\n  -e, --correct-email &lt;<email>&gt;\n\n    Define the correct email to set\n    Empty email '' is allowed\n\n  -n, --correct-name &lt;<name>&gt;\n\n    Define the correct name to set\n    Empty name '' is not allowed\n\n  -o, --old-email &lt;<email>&gt;\n\n    Rewrite identities matching old email in commits and tags\n    Empty email '' is allowed\n\n  -t, --type &lt;<id>&gt;\n\n    Define the type of identities affected by the rewrite\n    Possible type identifiers are: author, committer, both (default)\n\n## EXAMPLES\n\nReplace the personal email and name of Jack to his work ones\n\n    $ git reauthor --old-email jack@perso.me --correct-email jack@work.com --correct-name 'Jack Foobar'\n\nReplace the email and name of Jack to the ones defined in the Git config\n\n    $ git reauthor --old-email jack@perso.me --use-config\n\nReplace only the email of Jack (keep the name already used)\n\n    $ git reauthor --old-email jack@perso --correct-email jack@perso.me\n\nChange only the committer email of Jack (keep the author email already used)\n\n    $ git reauthor --old-email jack@perso.me --correct-email jack@work.com --type committer\n\nChange only the name and keep email to merge one user with multiple pseudonyms.\n\n    $ git reauthor --old-email jack@perso.me --correct-name Jack\n\nSet Jack's identity as the only one of the whole repository\n\n    $ git reauthor --all --correct-email jack@perso.me --correct-name Jack\n    \nSet Jack as the only committer of the whole repository (keeps authors)\n\n    $ git reauthor --all --correct-email jack@perso.me --correct-name Jack --type committer\n\n## AUTHOR\n\nWritten by Damien Tardy-Panis &lt;<damien@tardypad.me>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-rebase-patch.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-REBASE\\-PATCH\" \"1\" \"September 2019\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-rebase\\-patch\\fR \\- Rebases a patch\n.SH \"SYNOPSIS\"\n\\fBgit\\-rebase\\-patch\\fR <patch\\-file>\n.SH \"DESCRIPTION\"\nGiven you have a patch that doesn't apply to the current HEAD, but you know it applied to some commit in the past, \\fBgit\\-rebase\\-patch\\fR will help you find that commit and do a rebase\\.\n.SH \"OPTIONS\"\n.TP\n<patch\\-file>\nThe patch to be applied\\.\n.SH \"EXAMPLES\"\nExecuting\n.IP \"\" 4\n.nf\n$ git rebase\\-patch test\\.patch\n.fi\n.IP \"\" 0\n.P\ncould give you something like that:\n.IP \"\" 4\n.nf\nTrying to find a commit the patch applies to\\|\\.\\|\\.\\|\\.\nPatch applied to dbcf408dd26 as 7dc8b23ae1a\nFirst, rewinding head to replay your work on top of it\\|\\.\\|\\.\\|\\.\nApplying: test\\.patch\nUsing index info to reconstruct a base tree\\|\\.\\|\\.\\|\\.\nFalling back to patching base and 3\\-way merge\\|\\.\\|\\.\\|\\.\nAuto\\-merging README\\.txt\n.fi\n.IP \"\" 0\n.P\nThen your last commit has the changes of the patch and is named \\fItest\\.patch\\fR\\.\n.SH \"AUTHOR\"\nWritten by Niklas Fiekas <\\fIniklas\\.fiekas@tu\\-clausthal\\.de\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-rebase-patch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-rebase-patch(1) - Rebases a patch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-rebase-patch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-rebase-patch(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-rebase-patch</code> - <span class=\"man-whatis\">Rebases a patch</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-rebase-patch</code> &lt;patch-file&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Given you have a patch that doesn't apply to the current HEAD, but you know it\napplied to some commit in the past, <code>git-rebase-patch</code> will help you find that\ncommit and do a rebase.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<dl>\n<dt>&lt;patch-file&gt;</dt>\n<dd> The patch to be applied.</dd>\n</dl>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Executing</p>\n\n<pre><code>$ git rebase-patch test.patch\n</code></pre>\n\n<p>could give you something like that:</p>\n\n<pre><code>Trying to find a commit the patch applies to...\nPatch applied to dbcf408dd26 as 7dc8b23ae1a\nFirst, rewinding head to replay your work on top of it...\nApplying: test.patch\nUsing index info to reconstruct a base tree...\nFalling back to patching base and 3-way merge...\nAuto-merging README.txt\n</code></pre>\n\n<p>Then your last commit has the changes of the patch and is named <em>test.patch</em>.</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Niklas Fiekas &lt;<a href=\"mailto:niklas.fiekas@tu-clausthal.de\" data-bare-link=\"true\">niklas.fiekas@tu-clausthal.de</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2019</li>\n    <li class='tr'>git-rebase-patch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-rebase-patch.md",
    "content": "git-rebase-patch(1) -- Rebases a patch\n================================\n\n## SYNOPSIS\n\n`git-rebase-patch` &lt;patch-file&gt;\n\n## DESCRIPTION\n\nGiven you have a patch that doesn't apply to the current HEAD, but you know it\napplied to some commit in the past, `git-rebase-patch` will help you find that\ncommit and do a rebase.\n\n## OPTIONS\n\n  * &lt;patch-file&gt;:\n     The patch to be applied.\n\n## EXAMPLES\n\n  Executing\n\n    $ git rebase-patch test.patch\n\n  could give you something like that:\n\n    Trying to find a commit the patch applies to...\n    Patch applied to dbcf408dd26 as 7dc8b23ae1a\n    First, rewinding head to replay your work on top of it...\n    Applying: test.patch\n    Using index info to reconstruct a base tree...\n    Falling back to patching base and 3-way merge...\n    Auto-merging README.txt\n\n  Then your last commit has the changes of the patch and is named *test.patch*.\n\n## AUTHOR\n\nWritten by Niklas Fiekas &lt;<niklas.fiekas@tu-clausthal.de>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-release.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-RELEASE\" \"1\" \"April 2022\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-release\\fR \\- Commit, tag and push changes to the repository\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-release\\fR [<tagname> | \\-\\-semver <name>] [\\-r <remote>] [\\-m <commit info>] [\\-\\-no\\-empty\\-commit] [\\-c] [\\-s] [\\-u <key\\-id>] [\\-\\-prefix <tag prefix>] [[\\-\\-] <hook arguments\\.\\.\\.>]\n.\n.SH \"DESCRIPTION\"\nCommits changes with message \"Release <tagname>\" or custom commit information, tags with the given <tagname> and pushes the branch / tags\\.\n.\n.P\nThis command always creates a release commit, which could be empty if nothing changed\\. It works like \\fBgit merge \\-\\-no\\-ff\\fR\\. If you don\\'t like the behavior, you could add \\fB\\-\\-no\\-empty\\-commit\\fR to skip it\\.\n.\n.P\nOptionally it generates a changelog (see git\\-changelog) and a remote can be defined\\. The order of first \\-c or \\-r does not matter\\.\n.\n.P\nIf \\fB\\.git/hook/pre\\-release\\fR or \\fB\\.git/hook/post\\-release\\fR exist, they will be triggered with \\fBtagname\\fR and extra hook arguments before/after the release\\.\n.\n.SH \"OPTIONS\"\n\\-\\-semver <name>\n.\n.P\nIf the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag with this option\\. The name must be one of the \\fBmajor\\fR, \\fBminor\\fR, \\fBpatch\\fR\\. For example, assumed the latest tag is \\fB4\\.4\\.0\\fR, with \\fBgit release \\-\\-semver minor\\fR you will make a new release with tag \\fB4\\.5\\.0\\fR\\. Use \\fB\\-\\-prefix\\fR if tag has a character before semver\\.\n.\n.P\n<tagname>\n.\n.P\nThe name of the newly created tag\\. Also used in tag comment\\.\n.\n.P\n\\-\\-prefix <tag prefix>\n.\n.P\nUse a prefix with a semver tag\\. \\fBgit release \\-\\-semver minor \\-\\-prefix r\\fR would increment the latest tag r4\\.4\\.0 to r4\\.5\\.0\\. This prefix can be any length, without spaces\\.\n.\n.P\n\\-r <remote>\n.\n.P\nThe \"remote\" repository that is destination of a push operation: it is passed to git push\\.\n.\n.P\n\\-m <commit info>\n.\n.P\nuse the custom commit information instead of the default message \"Release <tagname>\" \\.\n.\n.P\n\\-\\-no\\-empty\\-commit\n.\n.P\nAvoid creating empty commit if nothing could be committed\\.\n.\n.P\n\\-c\n.\n.P\nGenerates or populates the changelog with all commit message since the last tag\\. For more info see git\\-changelog\\.\\.\n.\n.P\n\\-s\n.\n.P\nCreate a signed and annotated tag\\.\n.\n.P\n\\-u <key\\-id>\n.\n.P\nCreate a tag, annotated and signed with the given key\\.\n.\n.P\n[\\-\\-] hook arguments\\.\\.\\.\n.\n.P\nThe arguments listed after \"\\-\\-\" separator will be passed to pre/post\\-release hook following the \\fBtagname\\fR\\.\n.\n.SH \"EXAMPLES\"\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname>\\.\n.\n.IP\n$ git release 0\\.1\\.0\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname> and custom commit message\\.\n.\n.IP\n$ git release 0\\.1\\.0 \\-m \"+ powerful feature added\\.\"\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname> and push to specific remote\\.\n.\n.IP\n$ git release 0\\.1\\.0 \\-r github\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname> and populate changelog\\.\n.\n.IP\n$ git release 0\\.1\\.0 \\-c\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname>, populate changelog, and push to specific remote\\.\n.\n.IP\n$ git release 0\\.1\\.0 \\-r github \\-c\n.\n.IP \"\\(bu\" 4\nRelease commit with the given <tagname>, pass <tagname> and extra argument to release hook, populate changelog, and push to specific remote\\.\n.\n.IP\n$ git release 0\\.1\\.0 \\-r github \\-c \\-\\- \\-\\-signature\\-required\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR> Extended by David Hartmann <\\fIdh@tsl\\.io\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-release.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-release(1) - Commit, tag and push changes to the repository</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-release(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-release(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-release</code> - <span class=\"man-whatis\">Commit, tag and push changes to the repository</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-release</code> [&lt;tagname&gt; | --semver &lt;name&gt;] [-r &lt;remote&gt;] [-m &lt;commit info&gt;] [--no-empty-commit] [-c] [-s] [-u &lt;key-id&gt;] [--prefix &lt;tag prefix&gt;] [[--] &lt;hook arguments...&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Commits changes with message \"Release &lt;tagname&gt;\" or custom commit information, tags with the given &lt;tagname&gt; and pushes the branch / tags.</p>\n\n<p>  This command always creates a release commit, which could be empty if nothing changed. It works like <code>git merge --no-ff</code>. If you don't like the behavior, you could add <code>--no-empty-commit</code> to skip it.</p>\n\n<p>  Optionally it generates a changelog (see git-changelog) and a remote can be defined. The order of first -c or -r does not matter.</p>\n\n<p>  If <code>.git/hook/pre-release</code> or <code>.git/hook/post-release</code> exist, they will be triggered with <code>tagname</code> and extra hook arguments before/after the release.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --semver &lt;name&gt;</p>\n\n<p>  If the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag\n  with this option. The name must be one of the <code>major</code>, <code>minor</code>, <code>patch</code>. For example, assumed the latest tag is <code>4.4.0</code>, with\n  <code>git release --semver minor</code> you will make a new release with tag <code>4.5.0</code>. Use <code>--prefix</code> if tag has a character before semver.</p>\n\n<p>  &lt;tagname&gt;</p>\n\n<p>  The name of the newly created tag. Also used in tag comment.</p>\n\n<p>  --prefix &lt;tag prefix&gt;</p>\n\n<p>  Use a prefix with a semver tag. <code>git release --semver minor --prefix r</code> would increment the latest tag r4.4.0 to r4.5.0. This prefix\n  can be any length, without spaces.</p>\n\n<p>  -r &lt;remote&gt;</p>\n\n<p>  The \"remote\" repository that is destination of a push operation: it is passed to git push.</p>\n\n<p>  -m &lt;commit info&gt;</p>\n\n<p>  use the custom commit information instead of the default message \"Release &lt;tagname&gt;\" .</p>\n\n<p>  --no-empty-commit</p>\n\n<p>  Avoid creating empty commit if nothing could be committed.</p>\n\n<p>  -c</p>\n\n<p>  Generates or populates the changelog with all commit message since the last tag. For more info see git-changelog..</p>\n\n<p>  -s</p>\n\n<p>  Create a signed and annotated tag.</p>\n\n<p>  -u &lt;key-id&gt;</p>\n\n<p>  Create a tag, annotated and signed with the given key.</p>\n\n<p>  [--] hook arguments...</p>\n\n<p>  The arguments listed after \"--\" separator will be passed to pre/post-release hook following the <code>tagname</code>.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<ul>\n<li><p>Release commit with the given &lt;tagname&gt;.</p>\n\n<p>$ git release 0.1.0</p></li>\n<li><p>Release commit with the given &lt;tagname&gt; and custom commit message.</p>\n\n<p>$ git release 0.1.0 -m \"+ powerful feature added.\"</p></li>\n<li><p>Release commit with the given &lt;tagname&gt; and push to specific remote.</p>\n\n<p>$ git release 0.1.0 -r github</p></li>\n<li><p>Release commit with the given &lt;tagname&gt; and populate changelog.</p>\n\n<p>$ git release 0.1.0 -c</p></li>\n<li><p>Release commit with the given &lt;tagname&gt;, populate changelog, and push to specific remote.</p>\n\n<p>$ git release 0.1.0 -r github -c</p></li>\n<li><p>Release commit with the given &lt;tagname&gt;, pass &lt;tagname&gt; and extra argument to release hook,\npopulate changelog, and push to specific remote.</p>\n\n<p>$ git release 0.1.0 -r github -c -- --signature-required</p></li>\n</ul>\n\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#116;&#106;&#x40;&#x76;&#105;&#115;&#x69;&#111;&#x6e;&#x2d;&#109;&#x65;&#x64;&#105;&#x61;&#46;&#99;&#97;\" data-bare-link=\"true\">&#x74;&#106;&#64;&#118;&#x69;&#115;&#105;&#111;&#x6e;&#45;&#109;&#x65;&#x64;&#105;&#x61;&#x2e;&#99;&#x61;</a>&gt;\nExtended by David Hartmann &lt;<a href=\"&#x6d;&#x61;&#x69;&#108;&#116;&#x6f;&#x3a;&#100;&#104;&#x40;&#116;&#115;&#x6c;&#x2e;&#105;&#x6f;\" data-bare-link=\"true\">&#100;&#x68;&#64;&#116;&#x73;&#x6c;&#x2e;&#x69;&#111;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>April 2022</li>\n    <li class='tr'>git-release(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-release.md",
    "content": "git-release(1) -- Commit, tag and push changes to the repository\n================================================================\n\n## SYNOPSIS\n\n`git-release` [&lt;tagname&gt; | --semver &lt;name&gt;] [-r &lt;remote&gt;] [-m &lt;commit info&gt;] [--no-empty-commit] [-c] [-s] [-u &lt;key-id&gt;] [--prefix &lt;tag prefix&gt;] [[--] &lt;hook arguments...&gt;]\n\n## DESCRIPTION\n\n  Commits changes with message \"Release &lt;tagname&gt;\" or custom commit information, tags with the given &lt;tagname&gt; and pushes the branch / tags.\n\n  This command always creates a release commit, which could be empty if nothing changed. It works like `git merge --no-ff`. If you don't like the behavior, you could add `--no-empty-commit` to skip it.\n\n  Optionally it generates a changelog (see git-changelog) and a remote can be defined. The order of first -c or -r does not matter.\n\n  If `.git/hook/pre-release` or `.git/hook/post-release` exist, they will be triggered with `tagname` and extra hook arguments before/after the release.\n\n## OPTIONS\n\n  --semver &lt;name&gt;\n\n  If the latest tag in your repo matches the semver format requirement, you could increase part of it as the new release tag\n  with this option. The name must be one of the `major`, `minor`, `patch`. For example, assumed the latest tag is `4.4.0`, with\n  `git release --semver minor` you will make a new release with tag `4.5.0`. Use `--prefix` if tag has a character before semver.\n\n  &lt;tagname&gt;\n\n  The name of the newly created tag. Also used in tag comment.\n\n  --prefix &lt;tag prefix&gt;\n\n  Use a prefix with a semver tag. `git release --semver minor --prefix r` would increment the latest tag r4.4.0 to r4.5.0. This prefix\n  can be any length, without spaces.\n\n  -r &lt;remote&gt;\n\n  The \"remote\" repository that is destination of a push operation: it is passed to git push.\n\n  -m &lt;commit info&gt;\n\n  use the custom commit information instead of the default message \"Release &lt;tagname&gt;\" .\n\n  --no-empty-commit\n\n  Avoid creating empty commit if nothing could be committed.\n\n  -c\n\n  Generates or populates the changelog with all commit message since the last tag. For more info see git-changelog..\n\n  -s\n\n  Create a signed and annotated tag.\n\n  -u &lt;key-id&gt;\n\n  Create a tag, annotated and signed with the given key.\n\n  [--] hook arguments...\n\n  The arguments listed after \"--\" separator will be passed to pre/post-release hook following the `tagname`.\n\n## EXAMPLES\n\n  * Release commit with the given &lt;tagname&gt;.\n\n    $ git release 0.1.0\n\n  * Release commit with the given &lt;tagname&gt; and custom commit message.\n\n    $ git release 0.1.0 -m \"+ powerful feature added.\"\n\n  * Release commit with the given &lt;tagname&gt; and push to specific remote.\n\n    $ git release 0.1.0 -r github\n\n  * Release commit with the given &lt;tagname&gt; and populate changelog.\n\n    $ git release 0.1.0 -c\n\n  * Release commit with the given &lt;tagname&gt;, populate changelog, and push to specific remote.\n\n    $ git release 0.1.0 -r github -c\n\n  * Release commit with the given &lt;tagname&gt;, pass &lt;tagname&gt; and extra argument to release hook,\n    populate changelog, and push to specific remote.\n\n    $ git release 0.1.0 -r github -c -- --signature-required\n\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\nExtended by David Hartmann &lt;<dh@tsl.io>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-rename-branch.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-RENAME\\-BRANCH\" \"1\" \"September 2025\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-rename\\-branch\\fR \\- rename local branch and push to remote\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-rename\\-branch\\fR <old\\-branch> <new\\-branch>\n.\n.SH \"DESCRIPTION\"\nRename local branch and push the new branch to remote\n.\n.SH \"OPTIONS\"\n<old\\-branch>\n.\n.P\nOld branch whose has to be renamed\\. This is an optional parameter\\. If no value is supplied then the current branch will be renamed\\.\n.\n.P\n<new\\-branch>\n.\n.P\nNew branch name\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git rename\\-branch old\\-name new\\-name\n\n$ git rename\\-branch new\\-name\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Hozefa Jodiawalla <\\fIhozefarules@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-rename-branch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-rename-branch(1) - rename local branch and push to remote</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-rename-branch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-rename-branch(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-rename-branch</code> - <span class=\"man-whatis\">rename local branch and push to remote</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-rename-branch</code> &lt;old-branch&gt; &lt;new-branch&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Rename local branch and push the new branch to remote</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;old-branch&gt;</p>\n\n<p>  Old branch whose has to be renamed. This is an optional parameter. If no value is supplied then the current branch will be renamed.</p>\n\n<p>  &lt;new-branch&gt;</p>\n\n<p>  New branch name</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git rename-branch old-name new-name\n\n$ git rename-branch new-name\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Hozefa Jodiawalla &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#104;&#111;&#x7a;&#x65;&#x66;&#x61;&#114;&#117;&#108;&#x65;&#115;&#x40;&#x67;&#109;&#x61;&#x69;&#108;&#46;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#x68;&#111;&#x7a;&#x65;&#102;&#97;&#114;&#x75;&#108;&#x65;&#115;&#64;&#103;&#x6d;&#97;&#x69;&#x6c;&#46;&#99;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2025</li>\n    <li class='tr'>git-rename-branch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-rename-branch.md",
    "content": "git-rename-branch(1) -- rename local branch and push to remote\n================================\n\n## SYNOPSIS\n\n`git-rename-branch` &lt;old-branch&gt; &lt;new-branch&gt;\n\n## DESCRIPTION\n\n  Rename local branch and push the new branch to remote\n\n## OPTIONS\n\n  &lt;old-branch&gt;\n\n  Old branch whose has to be renamed. This is an optional parameter. If no value is supplied then the current branch will be renamed.\n\n  &lt;new-branch&gt;\n\n  New branch name\n\n## EXAMPLES\n\n    $ git rename-branch old-name new-name\n\n    $ git rename-branch new-name\n\n## AUTHOR\n\nWritten by Hozefa Jodiawalla &lt;<hozefarules@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-rename-file.1",
    "content": ".\\\" generated with Ronn-NG/v0.8.0\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.8.0\n.TH \"GIT\\-RENAME\\-FILE\" \"1\" \"July 2024\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-rename\\-file\\fR \\- Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.\n.SH \"SYNOPSIS\"\n\\fBgit\\-rename\\-file\\fR [OPTIONS] <source> <destination>\n.SH \"DESCRIPTION\"\nThe \\fBgit\\-rename\\-file\\fR command renames a file or directory and ensures Git recognizes the change, regardless of filesystem case-sensitivity. It combines the functionality of the \\fBmv\\fR command and \\fBgit mv\\fR.\nThis is particularly useful for renaming files or directories to change only their case, which might not be detected by Git on case-insensitive filesystems.\n.SH \"OPTIONS\"\n\\fB\\-h\\fR, \\fB\\-\\-help\\fR\n.RS\nShow usage information.\n.RE\n.SH \"EXAMPLES\"\nRename a file:\n.RS\n\\fBgit\\-rename\\-file old_filename new_filename\\fR\n.RE\nRename a directory:\n.RS\n\\fBgit\\-rename\\-file old_directory new_directory\\fR\n.RE\n.SH \"AUTHOR\"\nWritten by Zachary Miller <\\fI\\%codebyzach@gmail.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fI\\%https://github.com/tj/git-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fI\\%https://github.com/tj/git-extras\\fR>\n"
  },
  {
    "path": "man/git-rename-file.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.8.0 (http://github.com/apjanke/ronn-ng/tree/0.8.0)'>\n  <title>git-rename-file(1) - Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-rename-file(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-rename-file(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n  <p class=\"man-name\">\n    <code>git-rename-file</code> - <span class=\"man-whatis\">Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity</span>\n  </p>\n\n  <h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n  <p><code>git-rename-file</code> [OPTIONS] &lt;source&gt; &lt;destination&gt;</p>\n\n  <h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n  <p>The <b>git-rename-file</b> command renames a file or directory and ensures Git recognizes the change, regardless of filesystem case-sensitivity. It combines the functionality of the <b>mv</b> command and <b>git mv</b>.</p>\n  <p>This is particularly useful for renaming files or directories to change only their case, which might not be detected by Git on case-insensitive filesystems.</p>\n\n  <h2 id=\"OPTIONS\">OPTIONS</h2>\n  <dl>\n    <dt><b>-h, --help</b></dt>\n    <dd>Show usage information.</dd>\n  </dl>\n\n  <h2 id=\"EXAMPLES\">EXAMPLES</h2>\n  <p>Rename a file:</p>\n  <pre><code>git-rename-file old_filename new_filename</code></pre>\n  <p>Rename a directory:</p>\n  <pre><code>git-rename-file old_directory new_directory</code></pre>\n\n  <h2 id=\"AUTHOR\">AUTHOR</h2>\n  <p>Written by &lt;Zachary Miller&gt; &lt;<a href=\"mailto:your.email@example.com\" data-bare-link=\"true\">codebyzach@gmail.com</a>&gt;</p>\n\n  <h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n  <p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n  <h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n  <p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>July 2024</li>\n    <li class='tr'>git-rename-file(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-rename-file.md",
    "content": "git-rename-file(1) -- Rename a file or directory and ensure Git recognizes the change, regardless of filesystem case-sensitivity.\n================================================\n\n## SYNOPSIS\n\n`git-rename-file` [OPTIONS] <source> <destination>\n\n## DESCRIPTION\n\nThe `git-rename-file` command renames a file or directory and ensures Git recognizes the change, regardless of filesystem case-sensitivity. It combines the functionality of the `mv` command and `git mv`.\n\nThis is particularly useful for renaming files or directories to change only their case, which might not be detected by Git on case-insensitive filesystems.\n\n## OPTIONS\n\n-h, --help\n    Show usage information.\n\n## EXAMPLES\n\nRename a file:\n\n```sh\ngit-rename-file old_filename new_filename\n```\n\nRename a directory:\n\n```sh\ngit-rename-file old_directory new_directory\n```\n\n## AUTHOR\n\nWritten by Zachary Miller &lt;<codebyzach@gmail.com>&gt;\n\n## REPORTING BUGS\n\n<https://github.com/tj/git-extras/issues>\n\n## SEE ALSO\n\n<https://github.com/tj/git-extras>\n"
  },
  {
    "path": "man/git-rename-remote.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-RENAME\\-REMOTE\" \"1\" \"May 2019\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-rename\\-remote\\fR \\- Rename a remote\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-rename\\-remote\\fR <old\\-remote\\-name> <new\\-remote\\-name>\n.\n.SH \"DESCRIPTION\"\nRename a git remote regardless of name conflict, and then list current git remotes\n.\n.SH \"OPTIONS\"\n<old\\-remote\\-name>\n.\n.P\nThe name of the remote you want to rename\\.\n.\n.P\n<new\\-remote\\-name>\n.\n.P\nThe new name of the remote\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git remote \\-v\norigin  git@myserver\\.com:myuser/foo\\.git (fetch)\norigin  git@myserver\\.com:myuser/foo\\.git (push)\nupstream    git@myserver\\.com:myuser/bar\\.git (fetch)\nupstream    git@myserver\\.com:myuser/bar\\.git (push)\n$ git\\-rename\\-remote upstream origin\norigin  git@myserver\\.com:myuser/bar\\.git (fetch)\norigin  git@myserver\\.com:myuser/bar\\.git (push)\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by timfeirg <\\fIkkcocogogo@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-rename-remote.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-rename-remote(1) - Rename a remote</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-rename-remote(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-rename-remote(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-rename-remote</code> - <span class=\"man-whatis\">Rename a remote</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-rename-remote</code> &lt;old-remote-name&gt; &lt;new-remote-name&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Rename a git remote regardless of name conflict, and then list current git remotes</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;old-remote-name&gt;</p>\n\n<p>  The name of the remote you want to rename.</p>\n\n<p>  &lt;new-remote-name&gt;</p>\n\n<p>  The new name of the remote.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git remote -v\norigin  git@myserver.com:myuser/foo.git (fetch)\norigin  git@myserver.com:myuser/foo.git (push)\nupstream    git@myserver.com:myuser/bar.git (fetch)\nupstream    git@myserver.com:myuser/bar.git (push)\n$ git-rename-remote upstream origin\norigin  git@myserver.com:myuser/bar.git (fetch)\norigin  git@myserver.com:myuser/bar.git (push)\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by timfeirg &lt;<a href=\"&#x6d;&#x61;&#105;&#108;&#x74;&#x6f;&#58;&#107;&#x6b;&#99;&#111;&#x63;&#111;&#x67;&#x6f;&#103;&#111;&#64;&#x67;&#x6d;&#x61;&#105;&#108;&#46;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#x6b;&#x6b;&#x63;&#x6f;&#99;&#x6f;&#x67;&#111;&#103;&#111;&#64;&#103;&#x6d;&#x61;&#x69;&#108;&#x2e;&#99;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2019</li>\n    <li class='tr'>git-rename-remote(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-rename-remote.md",
    "content": "git-rename-remote(1) -- Rename a remote\n=================================\n\n## SYNOPSIS\n\n`git-rename-remote` &lt;old-remote-name&gt; &lt;new-remote-name&gt;\n\n## DESCRIPTION\n\n  Rename a git remote regardless of name conflict, and then list current git remotes\n\n## OPTIONS\n\n  &lt;old-remote-name&gt;\n\n  The name of the remote you want to rename.\n\n  &lt;new-remote-name&gt;\n\n  The new name of the remote.\n\n## EXAMPLES\n\n    $ git remote -v\n    origin\tgit@myserver.com:myuser/foo.git (fetch)\n    origin\tgit@myserver.com:myuser/foo.git (push)\n    upstream\tgit@myserver.com:myuser/bar.git (fetch)\n    upstream\tgit@myserver.com:myuser/bar.git (push)\n    $ git-rename-remote upstream origin\n    origin\tgit@myserver.com:myuser/bar.git (fetch)\n    origin\tgit@myserver.com:myuser/bar.git (push)\n\n## AUTHOR\n\nWritten by timfeirg &lt;<kkcocogogo@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-rename-tag.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-RENAME\\-TAG\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-rename\\-tag\\fR \\- Rename a tag\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-rename\\-tag\\fR <old\\-tag\\-name> <new\\-tag\\-name>\n.\n.SH \"DESCRIPTION\"\nRename a tag (locally and remotely)\n.\n.SH \"OPTIONS\"\n<old\\-tag\\-name>\n.\n.P\nThe name of the tag you want to rename\\.\n.\n.P\n<new\\-tag\\-name>\n.\n.P\nThe new name of the tag\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git tag test\n$ git push \\-\\-tags\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver\\.com:myuser/myrepository\\.git\n * [new tag]         test \\-> test\n$ git tag\ntest\n$ git rename\\-tag test test2\nDeleted tag \\'test\\' (was 1111111)\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver\\.com:myuser/myrepository\\.git\n * [new tag]         test2 \\-> test2\nremote: warning: Deleting a non\\-existent ref\\.\nTo git@myserver\\.com:myuser/myrepository\\.git\n \\- [deleted]         refs/tag/test\n$ git tag\ntest2\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jesús Espino <\\fIjespinog@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-rename-tag.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-rename-tag(1) - Rename a tag</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-rename-tag(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-rename-tag(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-rename-tag</code> - <span class=\"man-whatis\">Rename a tag</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-rename-tag</code> &lt;old-tag-name&gt; &lt;new-tag-name&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Rename a tag (locally and remotely)</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;old-tag-name&gt;</p>\n\n<p>  The name of the tag you want to rename.</p>\n\n<p>  &lt;new-tag-name&gt;</p>\n\n<p>  The new name of the tag.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git tag test\n$ git push --tags\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver.com:myuser/myrepository.git\n * [new tag]         test -&gt; test\n$ git tag\ntest\n$ git rename-tag test test2\nDeleted tag 'test' (was 1111111)\nTotal 0 (delta 0), reused 0 (delta 0)\nTo git@myserver.com:myuser/myrepository.git\n * [new tag]         test2 -&gt; test2\nremote: warning: Deleting a non-existent ref.\nTo git@myserver.com:myuser/myrepository.git\n - [deleted]         refs/tag/test\n$ git tag\ntest2\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jesús Espino &lt;<a href=\"&#109;&#x61;&#x69;&#x6c;&#116;&#x6f;&#58;&#106;&#x65;&#115;&#x70;&#105;&#110;&#x6f;&#x67;&#x40;&#x67;&#109;&#x61;&#105;&#108;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#106;&#101;&#x73;&#x70;&#x69;&#110;&#x6f;&#x67;&#x40;&#x67;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#99;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-rename-tag(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-rename-tag.md",
    "content": "git-rename-tag(1) -- Rename a tag\n=================================\n\n## SYNOPSIS\n\n`git-rename-tag` &lt;old-tag-name&gt; &lt;new-tag-name&gt;\n\n## DESCRIPTION\n\n  Rename a tag (locally and remotely)\n\n## OPTIONS\n\n  &lt;old-tag-name&gt;\n\n  The name of the tag you want to rename.\n\n  &lt;new-tag-name&gt;\n\n  The new name of the tag.\n\n## EXAMPLES\n\n    $ git tag test\n    $ git push --tags\n    Total 0 (delta 0), reused 0 (delta 0)\n    To git@myserver.com:myuser/myrepository.git\n     * [new tag]         test -> test\n    $ git tag\n    test\n    $ git rename-tag test test2\n    Deleted tag 'test' (was 1111111)\n    Total 0 (delta 0), reused 0 (delta 0)\n    To git@myserver.com:myuser/myrepository.git\n     * [new tag]         test2 -> test2\n    remote: warning: Deleting a non-existent ref.\n    To git@myserver.com:myuser/myrepository.git\n     - [deleted]         refs/tag/test\n    $ git tag\n    test2\n\n## AUTHOR\n\nWritten by Jesús Espino &lt;<jespinog@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-repl.1",
    "content": ".\\\" generated with Ronn-NG/v0.10.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.10.1\n.TH \"GIT\\-REPL\" \"1\" \"February 2026\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-repl\\fR \\- git read\\-eval\\-print\\-loop\n.SH \"SYNOPSIS\"\n\\fBgit\\-repl\\fR\n.P\n\\fBgit\\-repl\\fR [command\\|\\.\\|\\.\\|\\.]\n.SH \"DESCRIPTION\"\nGit read\\-eval\\-print\\-loop\\. Lets you run \\fBgit\\fR commands without typing 'git'\\.\n.P\nCommands can be prefixed with an exclamation mark (!) to be interpreted as a regular shell command\\.\n.P\nAny arguments to git repl will be taken collectively as the first command to execute in the repl\\.\n.P\nType \\fBexit\\fR, \\fBquit\\fR, or \\fBq\\fR to end the repl session\\. Ctrl\\-D and Ctrl\\-C will also work\\.\n.SH \"COMMANDS\"\n<command>\n.P\nInterpreted as \\fBgit <command>\\fR\\.\n.P\n!<command>\n.P\nInterpreted as \\fB<command>\\fR (not through \\fBgit\\fR)\\.\n.P\nls\n.P\nEquivalent of 'git ls\\-files'\\.\n.P\nexit|quit|q\n.P\nEnds the repl session\\.\n.SH \"CONFIGURATION\"\nCommands entered in a repl session will be saved to a history file and be available in future sessions, similar to a shell or programming language repl\\. By default, the global history file is at \\fB~/\\.local/state/git_extras_repl_history\\fR\\. You can specify that your projects each have their own independent history file\\. This file will be saved in \\.git_repl_history at the top level of the repo, and will need to be added to the repo or global \\.gitignore\\.\n.IP \"\" 4\n.nf\n  # remove the \\-\\-global flag to configure only an individual project to have its own history file\n  git config \\-\\-global git\\-extras\\.repl\\.use\\-local\\-history \"true\"\n.fi\n.IP \"\" 0\n.P\nYou can specify a default command to run when hitting enter:\n.P\n\\fBgit config \\-\\-global git\\-extras\\.repl\\.on\\-enter\\-command \"git status \\-sb\"\\fR\n.P\nYou can configure which character is used at the end of the prompt (default \\fB>\\fR):\n.P\n\\fBgit config \\-\\-global git\\-extras\\.repl\\.prompt\\-character \"±\"\\fR\n.P\nYou can specify the prefix for the prompt (default \\fBgit\\fR): \\fBgit config \\-\\-global git\\-extras\\.repl\\.prefix \"\"\\fR\n.P\nYou can have the name of the current git repo shown in the prompt (default \\fBfalse\\fR):\n.P\n\\fBgit config \\-\\-global git\\-extras\\.repl\\.show\\-project\\-name \"true\"\\fR\n.SH \"EXAMPLES\"\n.nf\n$ git repl\ngit version 2\\.34\\.1\ngit\\-extras version 7\\.3\\.0\nType 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl\\.\n\ngit (master)> ls\\-files\nHistory\\.md\nMakefile\nReadme\\.md\nbin/git\\-changelog\nbin/git\\-count\nbin/git\\-delete\\-branch\nbin/git\\-delete\\-tag\nbin/git\\-ignore\nbin/git\\-release\n\ngit (master)> !echo Straight from the shell!\nStraight from the shell!\n\ngit (master)> quit\n.fi\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\\. Updated by Wyatt S Carpenter to add display of the previous command's exit status, 'q', and the ability to pass in the initial command as arguments\\.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-repl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\n  <title>git-repl(1) - git read-eval-print-loop</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#COMMANDS\">COMMANDS</a>\n    <a href=\"#CONFIGURATION\">CONFIGURATION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-repl(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-repl(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-repl</code> - <span class=\"man-whatis\">git read-eval-print-loop</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-repl</code></p>\n\n<p><code>git-repl</code> [command...]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Git read-eval-print-loop. Lets you run <code>git</code> commands without typing 'git'.</p>\n\n<p>Commands can be prefixed with an exclamation mark (!) to be interpreted as\n  a regular shell command.</p>\n\n<p>Any arguments to git repl will be taken collectively as the first command\n  to execute in the repl.</p>\n\n<p>Type <code>exit</code>, <code>quit</code>, or <code>q</code> to end the repl session. Ctrl-D and Ctrl-C\n  will also work.</p>\n\n<h2 id=\"COMMANDS\">COMMANDS</h2>\n\n<p>&lt;command&gt;</p>\n\n<p>Interpreted as <code>git &lt;command&gt;</code>.</p>\n\n<p>!&lt;command&gt;</p>\n\n<p>Interpreted as <code>&lt;command&gt;</code> (not through <code>git</code>).</p>\n\n<p>ls</p>\n\n<p>Equivalent of 'git ls-files'.</p>\n\n<p>exit|quit|q</p>\n\n<p>Ends the repl session.</p>\n\n<h2 id=\"CONFIGURATION\">CONFIGURATION</h2>\n\n<p>Commands entered in a repl session will be saved to a history file and be available in\n  future sessions, similar to a shell or programming language repl. By default,\n  the global history file is at <code>~/.local/state/git_extras_repl_history</code>. You can specify that your projects\n  each have their own independent history file. This file will be saved in .git_repl_history\n  at the top level of the repo, and will need to be added to the repo or global .gitignore.</p>\n\n<pre><code class=\"language-bash\">  # remove the --global flag to configure only an individual project to have its own history file\n  git config --global git-extras.repl.use-local-history \"true\"\n</code></pre>\n\n<p>You can specify a default command to run when hitting enter:</p>\n\n<p><code>git config --global git-extras.repl.on-enter-command \"git status -sb\"</code></p>\n\n<p>You can configure which character is used at the end of the prompt\n  (default <code>&gt;</code>):</p>\n\n<p><code>git config --global git-extras.repl.prompt-character \"±\"</code></p>\n\n<p>You can specify the prefix for the prompt (default <code>git</code>):\n  <code>git config --global git-extras.repl.prefix \"\"</code></p>\n\n<p>You can have the name of the current git repo shown in the prompt\n  (default <code>false</code>):</p>\n\n<p><code>git config --global git-extras.repl.show-project-name \"true\"</code></p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git repl\ngit version 2.34.1\ngit-extras version 7.3.0\nType 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl.\n\ngit (master)&gt; ls-files\nHistory.md\nMakefile\nReadme.md\nbin/git-changelog\nbin/git-count\nbin/git-delete-branch\nbin/git-delete-tag\nbin/git-ignore\nbin/git-release\n\ngit (master)&gt; !echo Straight from the shell!\nStraight from the shell!\n\ngit (master)&gt; quit\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"mailto:tj@vision-media.ca\" data-bare-link=\"true\">tj@vision-media.ca</a>&gt;. Updated by Wyatt S Carpenter to add display of the previous command's exit status, 'q', and the ability to pass in the initial command as arguments.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>February 2026</li>\n    <li class='tr'>git-repl(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-repl.md",
    "content": "git-repl(1) -- git read-eval-print-loop\n=======================================\n\n## SYNOPSIS\n\n`git-repl`\n\n`git-repl` [command...]\n\n## DESCRIPTION\n\n  Git read-eval-print-loop. Lets you run `git` commands without typing 'git'.\n\n  Commands can be prefixed with an exclamation mark (!) to be interpreted as\n  a regular shell command.\n\n  Any arguments to git repl will be taken collectively as the first command\n  to execute in the repl.\n\n  Type `exit`, `quit`, or `q` to end the repl session. Ctrl-D and Ctrl-C\n  will also work.\n\n## COMMANDS\n\n  &lt;command&gt;\n\n  Interpreted as `git <command>`.\n\n  !&lt;command&gt;\n\n  Interpreted as `<command>` (not through `git`).\n\n  ls\n\n  Equivalent of 'git ls-files'.\n\n  exit\\|quit\\|q\n\n  Ends the repl session.\n\n## CONFIGURATION\n\n  Commands entered in a repl session will be saved to a history file and be available in\n  future sessions, similar to a shell or programming language repl. By default,\n  the global history file is at `~/.local/state/git_extras_repl_history`. You can specify that your projects\n  each have their own independent history file. This file will be saved in .git_repl_history\n  at the top level of the repo, and will need to be added to the repo or global .gitignore.\n\n  ```bash\n  # remove the --global flag to configure only an individual project to have its own history file\n  git config --global git-extras.repl.use-local-history \"true\"\n  ```\n\n  You can specify a default command to run when hitting enter:\n\n  `git config --global git-extras.repl.on-enter-command \"git status -sb\"`\n\n  You can configure which character is used at the end of the prompt\n  (default `>`):\n\n  `git config --global git-extras.repl.prompt-character \"±\"`\n\n  You can specify the prefix for the prompt (default `git`):\n  `git config --global git-extras.repl.prefix \"\"`\n\n  You can have the name of the current git repo shown in the prompt\n  (default `false`):\n\n  `git config --global git-extras.repl.show-project-name \"true\"`\n\n\n## EXAMPLES\n\n    $ git repl\n    git version 2.34.1\n    git-extras version 7.3.0\n    Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl.\n\n    git (master)> ls-files\n    History.md\n    Makefile\n    Readme.md\n    bin/git-changelog\n    bin/git-count\n    bin/git-delete-branch\n    bin/git-delete-tag\n    bin/git-ignore\n    bin/git-release\n\n    git (master)> !echo Straight from the shell!\n    Straight from the shell!\n\n    git (master)> quit\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;. Updated by Wyatt S Carpenter to add display of the previous command's exit status, 'q', and the ability to pass in the initial command as arguments.\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-reset-file.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-RESET\\-FILE\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-reset\\-file\\fR \\- Reset one file\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-reset\\-file\\fR [<filename>] commit\\-hash\n.\n.SH \"DESCRIPTION\"\nReset one file to HEAD or certain commit\\-hash\n.\n.SH \"OPTIONS\"\n<filename>\n.\n.P\nThe name of the file to reset\\.\n.\n.P\n<commit\\-hash>\n.\n.P\n(Optional) Hash of commit to reset the file to\\. Defaults to HEAD\\.\n.\n.SH \"EXAMPLES\"\nReset one file to HEAD\n.\n.IP \"\" 4\n.\n.nf\n\n$ git reset\\-file \\.htaccess\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nor reset one file to certain commit\n.\n.IP \"\" 4\n.\n.nf\n\n$ git reset\\-file \\.htaccess dc82b19\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Sasha Khamkov <\\fIsanusart@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-reset-file.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-reset-file(1) - Reset one file</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-reset-file(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-reset-file(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-reset-file</code> - <span class=\"man-whatis\">Reset one file</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-reset-file</code> [&lt;filename&gt;] commit-hash</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Reset one file to HEAD or certain commit-hash</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;filename&gt;</p>\n\n<p>  The name of the file to reset.</p>\n\n<p>  &lt;commit-hash&gt;</p>\n\n<p>  (Optional) Hash of commit to reset the file to. Defaults to HEAD.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Reset one file to HEAD</p>\n\n<pre><code>$ git reset-file .htaccess\n</code></pre>\n\n<p>  or reset one file to certain commit</p>\n\n<pre><code>$ git reset-file .htaccess dc82b19\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Sasha Khamkov &lt;<a href=\"&#109;&#97;&#105;&#108;&#x74;&#x6f;&#x3a;&#x73;&#97;&#x6e;&#x75;&#115;&#97;&#x72;&#x74;&#64;&#x67;&#x6d;&#97;&#105;&#108;&#46;&#99;&#x6f;&#109;\" data-bare-link=\"true\">&#115;&#97;&#x6e;&#x75;&#115;&#x61;&#x72;&#x74;&#x40;&#x67;&#109;&#97;&#105;&#x6c;&#x2e;&#99;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-reset-file(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-reset-file.md",
    "content": "git-reset-file(1) -- Reset one file\n================================\n\n## SYNOPSIS\n\n`git-reset-file` [&lt;filename&gt;] commit-hash\n\n## DESCRIPTION\n\n  Reset one file to HEAD or certain commit-hash\n\n## OPTIONS\n\n  &lt;filename&gt;\n\n  The name of the file to reset.\n\n  &lt;commit-hash&gt;\n\n  (Optional) Hash of commit to reset the file to. Defaults to HEAD.\n\n## EXAMPLES\n\n  Reset one file to HEAD\n\n\t$ git reset-file .htaccess\n\n  or reset one file to certain commit\n\n\t$ git reset-file .htaccess dc82b19\n\n## AUTHOR\n\nWritten by Sasha Khamkov &lt;<sanusart@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-root.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-ROOT\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-root\\fR \\- show path of root\n.\n.SH \"SYNOPSIS\"\n\\fBgit root\\fR \\fIOPTIONS\\fR\n.\n.SH \"DESCRIPTION\"\nprint the path for the root directory of git repo\n.\n.SH \"OPTIONS\"\n\\-r, \\-\\-relative\n.\n.P\nshow the relative path from root directory to current directory\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ cd \\.\\.\\./git\\-extras/bin\n$ git root \\-r\nbin/\n$ git root\n/home/\\.\\.\\./git\\-extras\n$ cd `git root`\n$ pwd\n/home/\\.\\.\\./git\\-extras\n# then we can\n$ git add \\. && git commit\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by spacewander <\\fIspacewanderlzx@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-root.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-root(1) - show path of root</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-root(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-root(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-root</code> - <span class=\"man-whatis\">show path of root</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git root</code> <a href=\"#OPTIONS\" title=\"OPTIONS\" data-bare-link=\"true\">OPTIONS</a></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>print the path for the root directory of git repo</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -r, --relative</p>\n\n<p>  show the relative path from root directory to current directory</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ cd .../git-extras/bin\n$ git root -r\nbin/\n$ git root\n/home/.../git-extras\n$ cd `git root`\n$ pwd\n/home/.../git-extras\n# then we can\n$ git add . &amp;&amp; git commit\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by spacewander &lt;<a href=\"&#109;&#97;&#105;&#108;&#x74;&#x6f;&#x3a;&#x73;&#112;&#x61;&#x63;&#101;&#119;&#x61;&#x6e;&#100;&#x65;&#x72;&#108;&#122;&#120;&#64;&#103;&#x6d;&#97;&#105;&#108;&#x2e;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x73;&#x70;&#x61;&#x63;&#101;&#119;&#97;&#x6e;&#x64;&#101;&#114;&#x6c;&#122;&#x78;&#x40;&#x67;&#109;&#97;&#x69;&#x6c;&#46;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-root(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-root.md",
    "content": "git-root(1) -- show path of root\n========================================\n\n## SYNOPSIS\n\n`git root` [OPTIONS]\n\n## DESCRIPTION\n\nprint the path for the root directory of git repo\n\n## OPTIONS\n\n  -r, --relative\n\n  show the relative path from root directory to current directory\n\n## EXAMPLES\n\n\n    $ cd .../git-extras/bin\n    $ git root -r\n    bin/\n    $ git root\n    /home/.../git-extras\n    $ cd `git root`\n    $ pwd\n    /home/.../git-extras\n    # then we can\n    $ git add . && git commit\n\n## AUTHOR\n\nWritten by spacewander &lt;<spacewanderlzx@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-scp.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SCP\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-scp\\fR \\- Copy files to SSH compatible \\fBgit\\-remote\\fR\n.\n.SH \"SYNOPSIS\"\n.\n.nf\n\n`git scp` \\-h|help|?\n`git scp` <remote> [<commits>\\.\\.\\.|<path>\\.\\.\\.]\n`git rscp` <remote> <path>\n.\n.fi\n.\n.SH \"DESCRIPTION\"\nA convenient way to copy files from the current working tree to the working directory of a remote repository\\. If a \\fB<commits>\\.\\.\\.\\fR is provided, only files that has changed within the commit range will be copied\\.\n.\n.P\nInternally this script uses \\fBrsync\\fR and not \\fBscp\\fR as the name suggests\\.\n.\n.P\n\\fBgit\\-rscp\\fR \\- The reverse of \\fBgit\\-scp\\fR\\. Copies specific files from the working directory of a remote repository to the current working directory\\.\n.\n.SH \"OPTIONS\"\n<remote>\n.\n.IP \"\" 4\n.\n.nf\n\nThe git remote where you want to copy your files\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\n<commits>\\.\\.\\.\n.\n.IP \"\" 4\n.\n.nf\n\nAny commit, commit range or tree\\. Uses `git\\-diff`(1)\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\n<path>\\.\\.\\.\n.\n.IP \"\" 4\n.\n.nf\n\nThe <paths> parameters, when given, are used to limit the diff to the named paths (you can give directory names and get diff for all files under them)\\.\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"GIT CONFIGS\"\nTo sanitize files using \\fBdos2unix\\fR before copying files\n.\n.IP \"\" 4\n.\n.nf\n\n$ git config \\-\\-global \\-\\-add extras\\.scp\\.sanitize dos2unix\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nYou can run the files through PHP lint (i\\.e\\. \\fBphp \\-l\\fR) before copying files\n.\n.IP \"\" 4\n.\n.nf\n\n$ git config \\-\\-global \\-\\-add extras\\.scp\\.sanitize php_lint\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"EXAMPLES\"\nMake sure you have \\fBgit\\-remote\\fR(1) setup\n.\n.IP \"\" 4\n.\n.nf\n\n$ git remote add staging myStagingServer:/var/www/html\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy unstaged files to remote\\. Useful when you want to make quick test without making any commits\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy staged and unstaged files to remote\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging HEAD\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy files that has been changed in the last commit, plus any staged or unstaged files to remote\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging HEAD~1\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy files that has been changed between now and a tag\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging v1\\.2\\.3\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy specific files\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging index\\.html \\.gitignore \\.htaccess\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy specific directory\n.\n.IP \"\" 4\n.\n.nf\n\n$ git scp staging js/vendor/\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nCopy files from specific directory to multiple servers\n.\n.IP \"\" 4\n.\n.nf\n\n$ for dest in web1 web2 web3; do\n    git diff \\-\\-name\\-only 4\\.8\\.3 4\\.8\\.2 app/code/community app/design skin/ | xargs git scp $dest\ndone;\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Chern Jie <\\fIlim@chernjie\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/chernjie/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-scp.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-scp(1) - Copy files to SSH compatible &lt;code&gt;git-remote&lt;/code&gt;</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#GIT-CONFIGS\">GIT CONFIGS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-scp(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-scp(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-scp</code> - <span class=\"man-whatis\">Copy files to SSH compatible <code>git-remote</code></span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<pre><code>`git scp` -h|help|?\n`git scp` &lt;remote> [&lt;commits>...|&lt;path>...]\n`git rscp` &lt;remote> &lt;path>\n</code></pre>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>A convenient way to copy files from the current working tree to the working directory of a remote repository. If a <code>&lt;commits>...</code> is provided, only files that has changed within the commit range will be copied.</p>\n\n<p>Internally this script uses <code>rsync</code> and not <code>scp</code> as the name suggests.</p>\n\n<p><code>git-rscp</code> - The reverse of <code>git-scp</code>. Copies specific files from the working directory of a remote repository to the current working directory.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;remote&gt;</p>\n\n<pre><code>The git remote where you want to copy your files.\n</code></pre>\n\n<p>  &lt;commits&gt;...</p>\n\n<pre><code>Any commit, commit range or tree. Uses `git-diff`(1)\n</code></pre>\n\n<p>  &lt;path&gt;...</p>\n\n<pre><code>The &lt;paths> parameters, when given, are used to limit the diff to the named paths (you can give directory names and get diff for all files under them).\n</code></pre>\n\n<h2 id=\"GIT-CONFIGS\">GIT CONFIGS</h2>\n\n<p> To sanitize files using <code>dos2unix</code> before copying files</p>\n\n<pre><code>$ git config --global --add extras.scp.sanitize dos2unix\n</code></pre>\n\n<p> You can run the files through PHP lint (i.e. <code>php -l</code>) before copying files</p>\n\n<pre><code>$ git config --global --add extras.scp.sanitize php_lint\n</code></pre>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p> Make sure you have <code>git-remote</code>(1) setup</p>\n\n<pre><code>$ git remote add staging myStagingServer:/var/www/html\n</code></pre>\n\n<p> Copy unstaged files to remote. Useful when you want to make quick test without making any commits</p>\n\n<pre><code>$ git scp staging\n</code></pre>\n\n<p> Copy staged and unstaged files to remote</p>\n\n<pre><code>$ git scp staging HEAD\n</code></pre>\n\n<p> Copy files that has been changed in the last commit, plus any staged or unstaged files to remote</p>\n\n<pre><code>$ git scp staging HEAD~1\n</code></pre>\n\n<p> Copy files that has been changed between now and a tag</p>\n\n<pre><code>$ git scp staging v1.2.3\n</code></pre>\n\n<p> Copy specific files</p>\n\n<pre><code>$ git scp staging index.html .gitignore .htaccess\n</code></pre>\n\n<p> Copy specific directory</p>\n\n<pre><code>$ git scp staging js/vendor/\n</code></pre>\n\n<p> Copy files from specific directory to multiple servers</p>\n\n<pre><code>$ for dest in web1 web2 web3; do\n    git diff --name-only 4.8.3 4.8.2 app/code/community app/design skin/ | xargs git scp $dest\ndone;\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Chern Jie &lt;<a href=\"&#109;&#97;&#105;&#108;&#x74;&#x6f;&#x3a;&#x6c;&#105;&#x6d;&#x40;&#99;&#104;&#x65;&#x72;&#110;&#x6a;&#x69;&#101;&#46;&#99;&#111;&#109;\" data-bare-link=\"true\">&#x6c;&#105;&#109;&#64;&#x63;&#x68;&#101;&#x72;&#x6e;&#x6a;&#x69;&#x65;&#46;&#99;&#111;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/chernjie/git-extras/issues\" data-bare-link=\"true\">https://github.com/chernjie/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-scp(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-scp.md",
    "content": "git-scp(1) -- Copy files to SSH compatible `git-remote`\n=======================================================\n\n## SYNOPSIS\n\n    `git scp` -h|help|?\n    `git scp` <remote> [<commits>...|<path>...]\n    `git rscp` <remote> <path>\n\n## DESCRIPTION\n\nA convenient way to copy files from the current working tree to the working directory of a remote repository. If a `<commits>...` is provided, only files that has changed within the commit range will be copied.\n\nInternally this script uses `rsync` and not `scp` as the name suggests. \n\n`git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory.\n\n## OPTIONS\n\n  &lt;remote&gt;\n\n    The git remote where you want to copy your files.\n\n  &lt;commits&gt;...\n\n    Any commit, commit range or tree. Uses `git-diff`(1)\n\n  &lt;path&gt;...\n\n    The <paths> parameters, when given, are used to limit the diff to the named paths (you can give directory names and get diff for all files under them).\n\n## GIT CONFIGS\n\n To sanitize files using `dos2unix` before copying files\n\n    $ git config --global --add extras.scp.sanitize dos2unix\n\n You can run the files through PHP lint (i.e. `php -l`) before copying files\n\n    $ git config --global --add extras.scp.sanitize php_lint\n\n## EXAMPLES\n\n Make sure you have `git-remote`(1) setup\n\n    $ git remote add staging myStagingServer:/var/www/html\n\n Copy unstaged files to remote. Useful when you want to make quick test without making any commits\n\n    $ git scp staging\n\n Copy staged and unstaged files to remote\n\n    $ git scp staging HEAD\n\n Copy files that has been changed in the last commit, plus any staged or unstaged files to remote\n\n    $ git scp staging HEAD~1\n\n Copy files that has been changed between now and a tag\n\n    $ git scp staging v1.2.3\n\n Copy specific files\n\n    $ git scp staging index.html .gitignore .htaccess\n\n Copy specific directory\n\n    $ git scp staging js/vendor/\n\n Copy files from specific directory to multiple servers\n\n    $ for dest in web1 web2 web3; do\n        git diff --name-only 4.8.3 4.8.2 app/code/community app/design skin/ | xargs git scp $dest\n    done;\n\n## AUTHOR\n\nWritten by Chern Jie &lt;<lim@chernjie.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/chernjie/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-sed.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SED\" \"1\" \"January 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-sed\\fR \\- replace patterns in git\\-controlled files\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-sed\\fR [ \\-c ] [ \\-f \\fIflags\\fR ] \\fIsearch\\fR \\fIreplacement\\fR [ \\fIflags\\fR ] [ \\-\\- \\fIpathspec\\fR ]\n.\n.SH \"DESCRIPTION\"\nRun git grep and then send results to sed for replacement with the given flags, if they are provided via \\-f or as the third argument\\.\n.\n.P\nAlso runs git commit if \\-c is provided\\.\n.\n.SH \"OPTIONS\"\n\\-c\n.\n.P\ncommit the resulting changes with a standard commit message detailing the exact command ran\\. It will fail if there are unstaged changes\\.\n.\n.P\n<flags> \\-f <flags>\n.\n.P\nwill use the given regex flags in the sed command (for example \"g\" replaces multiple times on the same line)\\.\n.\n.P\n<search>\n.\n.P\nthe pattern passed to grep and to the first part of the sed expression\\.\n.\n.P\n<replacement>\n.\n.P\nthe replacement passed to sed, the second part of the sed expression\\.\n.\n.P\n\\-\\- <pathspec>\n.\n.P\nlimit the paths which will be applied on\\. Read https://git\\-scm\\.com/docs/gitglossary\\.html#Documentation/gitglossary\\.txt\\-aiddefpathspecapathspec for the supported patterns of pathspec\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git sed \\'my_function\\' \\'do_stuff\\'\n# \\.\\.\\. only does the changes, without committing\n$ git commit \\-m\"use proper function name\"\n$ git sed \\-c \\'do_stuff\\' \\'stuff\\'\n# \\.\\. does the changes and a commit\n$ git sed \\-f g do_stuff stuff\n# \\.\\. g is actually pretty important, otherwise you will miss some\n# stuff!\n$ git sed \\'my_method\\' \\'do_stuff\\' \\-\\- lake/\n# \\.\\.\\. only replace \\'my_method\\' occurs under lake/\\.\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Antoine Beaupré <\\fIanarcat@debian\\.org\\fR> from inspiration by https://github\\.com/da\\-x/git\\-search\\-replace and https://stackoverflow\\.com/questions/9651898/is\\-there\\-a\\-git\\-sed\\-or\\-equivalent\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-sed.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-sed(1) - replace patterns in git-controlled files</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-sed(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-sed(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-sed</code> - <span class=\"man-whatis\">replace patterns in git-controlled files</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-sed</code> [ -c ] [ -f <var>flags</var> ] <var>search</var> <var>replacement</var> [ <var>flags</var> ] [ -- <var>pathspec</var> ]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Run git grep and then send results to sed for replacement with the\ngiven flags, if they are provided via -f or as the third argument.</p>\n\n<p>Also runs git commit if -c is provided.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  -c</p>\n\n<p>  commit the resulting changes with a standard commit message\n  detailing the exact command ran. It will fail if there are unstaged\n  changes.</p>\n\n<p>  &lt;flags&gt;\n  -f &lt;flags&gt;</p>\n\n<p>  will use the given regex flags in the sed command (for example \"g\"\n  replaces multiple times on the same line).</p>\n\n<p>  &lt;search&gt;</p>\n\n<p>  the pattern passed to grep and to the first part of the sed expression.</p>\n\n<p>  &lt;replacement&gt;</p>\n\n<p>  the replacement passed to sed, the second part of the sed expression.</p>\n\n<p>  -- &lt;pathspec&gt;</p>\n\n<p>  limit the paths which will be applied on.\n  Read https://git-scm.com/docs/gitglossary.html#Documentation/gitglossary.txt-aiddefpathspecapathspec\n  for the supported patterns of pathspec.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git sed 'my_function' 'do_stuff'\n# ... only does the changes, without committing\n$ git commit -m\"use proper function name\"\n$ git sed -c 'do_stuff' 'stuff'\n# .. does the changes and a commit\n$ git sed -f g do_stuff stuff\n# .. g is actually pretty important, otherwise you will miss some\n# stuff!\n$ git sed 'my_method' 'do_stuff' -- lake/\n# ... only replace 'my_method' occurs under lake/.\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Antoine Beaupré &lt;<a href=\"&#x6d;&#x61;&#105;&#108;&#116;&#111;&#58;&#x61;&#x6e;&#97;&#x72;&#99;&#97;&#x74;&#x40;&#x64;&#101;&#98;&#x69;&#x61;&#110;&#46;&#x6f;&#x72;&#x67;\" data-bare-link=\"true\">&#97;&#110;&#97;&#x72;&#99;&#97;&#x74;&#64;&#100;&#x65;&#98;&#105;&#97;&#x6e;&#x2e;&#111;&#x72;&#103;</a>&gt; from\ninspiration by https://github.com/da-x/git-search-replace and\nhttps://stackoverflow.com/questions/9651898/is-there-a-git-sed-or-equivalent</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>January 2020</li>\n    <li class='tr'>git-sed(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-sed.md",
    "content": "git-sed(1) -- replace patterns in git-controlled files\n======================================================\n\n## SYNOPSIS\n\n`git-sed` [ -c ] [ -f <flags> ] <search> <replacement> [ <flags> ] [ -- <pathspec> ]\n\n## DESCRIPTION\n\nRun git grep and then send results to sed for replacement with the\ngiven flags, if they are provided via -f or as the third argument.\n\nAlso runs git commit if -c is provided.\n\n## OPTIONS\n\n  -c\n\n  commit the resulting changes with a standard commit message\n  detailing the exact command ran. It will fail if there are unstaged\n  changes.\n\n  &lt;flags&gt;\n  -f &lt;flags&gt;\n\n  will use the given regex flags in the sed command (for example \"g\"\n  replaces multiple times on the same line).\n\n  &lt;search&gt;\n\n  the pattern passed to grep and to the first part of the sed expression.\n\n  &lt;replacement&gt;\n\n  the replacement passed to sed, the second part of the sed expression.\n\n  -- &lt;pathspec&gt;\n\n  limit the paths which will be applied on.\n  Read https://git-scm.com/docs/gitglossary.html#Documentation/gitglossary.txt-aiddefpathspecapathspec\n  for the supported patterns of pathspec.\n\n## EXAMPLES\n\n    $ git sed 'my_function' 'do_stuff'\n    # ... only does the changes, without committing\n    $ git commit -m\"use proper function name\"\n    $ git sed -c 'do_stuff' 'stuff'\n    # .. does the changes and a commit\n    $ git sed -f g do_stuff stuff\n    # .. g is actually pretty important, otherwise you will miss some\n    # stuff!\n    $ git sed 'my_method' 'do_stuff' -- lake/\n    # ... only replace 'my_method' occurs under lake/.\n\n## AUTHOR\n\nWritten by Antoine Beaupré &lt;<anarcat@debian.org>&gt; from\ninspiration by https://github.com/da-x/git-search-replace and\nhttps://stackoverflow.com/questions/9651898/is-there-a-git-sed-or-equivalent\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-setup.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SETUP\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-setup\\fR \\- Set up a git repository\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-setup\\fR [<directory>]\n.\n.SH \"DESCRIPTION\"\nSet up a git repository if one doesn\\'t exist, add all files and make an initial commit\\.\n.\n.SH \"OPTIONS\"\n<directory>\n.\n.P\nThe name of a new directory to setup\\. By default, the current working directory\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git setup path/to/repository\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Aggelos Orfanakos <\\fIagorf@agorf\\.gr\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-setup.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-setup(1) - Set up a git repository</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-setup(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-setup(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-setup</code> - <span class=\"man-whatis\">Set up a git repository</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-setup</code> [&lt;directory&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Set up a git repository if one doesn't exist, add all files and make an initial commit.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;directory&gt;</p>\n\n<p>  The name of a new directory to setup. By default, the current working directory.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git setup path/to/repository\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Aggelos Orfanakos &lt;<a href=\"&#109;&#97;&#105;&#x6c;&#x74;&#111;&#58;&#x61;&#103;&#x6f;&#x72;&#x66;&#64;&#97;&#x67;&#x6f;&#114;&#x66;&#x2e;&#x67;&#x72;\" data-bare-link=\"true\">&#x61;&#103;&#x6f;&#x72;&#102;&#64;&#97;&#x67;&#x6f;&#114;&#x66;&#x2e;&#103;&#114;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-setup(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-setup.md",
    "content": "git-setup(1) -- Set up a git repository\n=======================================\n\n## SYNOPSIS\n\n`git-setup` [&lt;directory&gt;]\n\n## DESCRIPTION\n\nSet up a git repository if one doesn't exist, add all files and make an initial commit.\n           \n## OPTIONS\n\n  &lt;directory&gt;\n\n  The name of a new directory to setup. By default, the current working directory.\n\n## EXAMPLES\n\n    $ git setup path/to/repository\n\n## AUTHOR\n\nWritten by Aggelos Orfanakos &lt;<agorf@agorf.gr>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-show-merged-branches.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SHOW\\-MERGED\\-BRANCHES\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-show\\-merged\\-branches\\fR \\- Show merged branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-show\\-merged\\-branches\\fR\n.\n.SH \"DESCRIPTION\"\nShow all branches merged in to current HEAD\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git show\\-merged\\-branches\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Paul Schreiber <\\fIpaulschreiber@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-show-merged-branches.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-show-merged-branches(1) - Show merged branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-show-merged-branches(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-show-merged-branches(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-show-merged-branches</code> - <span class=\"man-whatis\">Show merged branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-show-merged-branches</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Show all branches merged in to current HEAD.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git show-merged-branches\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Paul Schreiber &lt;<a href=\"&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x70;&#97;&#x75;&#x6c;&#x73;&#99;&#104;&#x72;&#x65;&#x69;&#x62;&#101;&#x72;&#x40;&#103;&#109;&#97;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#112;&#x61;&#x75;&#x6c;&#115;&#x63;&#104;&#x72;&#101;&#105;&#98;&#x65;&#x72;&#x40;&#103;&#109;&#97;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-show-merged-branches(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-show-merged-branches.md",
    "content": "git-show-merged-branches(1) -- Show merged branches\n===================================================\n\n## SYNOPSIS\n\n`git-show-merged-branches`\n\n## DESCRIPTION\n\n  Show all branches merged in to current HEAD.\n\n## EXAMPLES\n\n    $ git show-merged-branches\n\n## AUTHOR\n\nWritten by Paul Schreiber &lt;<paulschreiber@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-show-tree.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SHOW\\-TREE\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-show\\-tree\\fR \\- show branch tree of commit history\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-show\\-tree\\fR\n.\n.SH \"DESCRIPTION\"\nShow the decorated graph view of one liner summarized commits from all branches\\.\n.\n.SH \"EXAMPLES\"\nOutput the commit history log for all branches as tree view:\n.\n.IP \"\" 4\n.\n.nf\n\n*   4b57684 (HEAD, develop) Merge branch upstream master\\.\n|\\e\n| *   515e94a Merge pull request #128 from nickl\\-/git\\-extras\\-html\\-hyperlinks\n| |\\e\n| | * 815db8b (nickl/git\\-extras\\-html\\-hyperlinks, git\\-extras\\-html\\-hyperlinks) help ronn make hyperlinks\\.\n| * | 7398d10 (nickl/develop) Fix #127 git\\-ignore won\\'t add duplicates\\.\n| |/\n| | * ab72c1e (refs/stash) WIP on develop: 5e943f5 Fix #127 git\\-ignore won\\'t add duplicates\\.\n| |/\n|/|\n* | 730ca89 (bolshakov) Rebase bolshakov with master\n|/\n* 60f8371 (origin/master, origin/HEAD, master) Merge pull request #126 from agrimaldi/fix\\-changelog\\-last\\-tag\n* 9627780 (tag: 1\\.7\\.0) Release 1\\.7\\.0\n* 2e53ff6 (tag: 1\\.6\\.0) Release 1\\.6\\.0\n* bbd32d8 (tag: 1\\.5\\.1) Release 1\\.5\\.1\n| * 6b6b758 (nickl/gh\\-pages, gh\\-pages) add example git\\-extras to gh\\-pages\n| * 19cfd11 (origin/gh\\-pages) Index page\n| | * 881a70e (tag: 1\\.5\\.0) Release 1\\.5\\.0\n| |/\n|/|\n* | 4db5ee0 (tag: 1\\.4\\.0) Release 1\\.4\\.0\n* | 9b0bc89 (tag: 1\\.3\\.0) Release 1\\.3\\.0\n* | be49961 (tag: 1\\.2\\.0) Release 1\\.2\\.0\n* | c1d2dfc (tag: 1\\.1\\.0) Release 1\\.1\\.0\n* | 4a56adb (tag: 1\\.0\\.0) Release 1\\.0\\.0\n* | 948308b (tag: 0\\.9\\.0) Release 0\\.9\\.0\n* | 40b131d (tag: 0\\.8\\.1) Release 0\\.8\\.1\n* | 391431d (tag: 0\\.8\\.0) Release 0\\.8\\.0\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Nick Lombard \\fIgithub@jigsoft\\.co\\.za\\fR\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-show-tree.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-show-tree(1) - show branch tree of commit history</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-show-tree(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-show-tree(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-show-tree</code> - <span class=\"man-whatis\">show branch tree of commit history</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-show-tree</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Show the decorated graph view of one liner summarized commits from all branches.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Output the commit history log for all branches as tree view:</p>\n\n<pre><code>*   4b57684 (HEAD, develop) Merge branch upstream master.\n|\\\n| *   515e94a Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n| |\\\n| | * 815db8b (nickl/git-extras-html-hyperlinks, git-extras-html-hyperlinks) help ronn make hyperlinks.\n| * | 7398d10 (nickl/develop) Fix #127 git-ignore won't add duplicates.\n| |/\n| | * ab72c1e (refs/stash) WIP on develop: 5e943f5 Fix #127 git-ignore won't add duplicates.\n| |/\n|/|\n* | 730ca89 (bolshakov) Rebase bolshakov with master\n|/\n* 60f8371 (origin/master, origin/HEAD, master) Merge pull request #126 from agrimaldi/fix-changelog-last-tag\n* 9627780 (tag: 1.7.0) Release 1.7.0\n* 2e53ff6 (tag: 1.6.0) Release 1.6.0\n* bbd32d8 (tag: 1.5.1) Release 1.5.1\n| * 6b6b758 (nickl/gh-pages, gh-pages) add example git-extras to gh-pages\n| * 19cfd11 (origin/gh-pages) Index page\n| | * 881a70e (tag: 1.5.0) Release 1.5.0\n| |/\n|/|\n* | 4db5ee0 (tag: 1.4.0) Release 1.4.0\n* | 9b0bc89 (tag: 1.3.0) Release 1.3.0\n* | be49961 (tag: 1.2.0) Release 1.2.0\n* | c1d2dfc (tag: 1.1.0) Release 1.1.0\n* | 4a56adb (tag: 1.0.0) Release 1.0.0\n* | 948308b (tag: 0.9.0) Release 0.9.0\n* | 40b131d (tag: 0.8.1) Release 0.8.1\n* | 391431d (tag: 0.8.0) Release 0.8.0\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Nick Lombard <a href=\"&#109;&#x61;&#x69;&#108;&#116;&#x6f;&#58;&#x67;&#105;&#x74;&#x68;&#x75;&#98;&#64;&#x6a;&#x69;&#x67;&#115;&#111;&#102;&#x74;&#x2e;&#x63;&#x6f;&#46;&#x7a;&#97;\" data-bare-link=\"true\">&#103;&#105;&#116;&#x68;&#117;&#x62;&#64;&#x6a;&#x69;&#103;&#x73;&#x6f;&#102;&#116;&#46;&#x63;&#111;&#46;&#x7a;&#x61;</a></p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-show-tree(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-show-tree.md",
    "content": "git-show-tree(1) -- show branch tree of commit history\n======================================================\n\n## SYNOPSIS\n\n`git-show-tree`\n\n## DESCRIPTION\n\nShow the decorated graph view of one liner summarized commits from all branches.\n\n## EXAMPLES\n\n  Output the commit history log for all branches as tree view:\n\n    *   4b57684 (HEAD, develop) Merge branch upstream master.\n    |\\\n    | *   515e94a Merge pull request #128 from nickl-/git-extras-html-hyperlinks\n    | |\\\n    | | * 815db8b (nickl/git-extras-html-hyperlinks, git-extras-html-hyperlinks) help ronn make hyperlinks.\n    | * | 7398d10 (nickl/develop) Fix #127 git-ignore won't add duplicates.\n    | |/\n    | | * ab72c1e (refs/stash) WIP on develop: 5e943f5 Fix #127 git-ignore won't add duplicates.\n    | |/\n    |/|\n    * | 730ca89 (bolshakov) Rebase bolshakov with master\n    |/\n    * 60f8371 (origin/master, origin/HEAD, master) Merge pull request #126 from agrimaldi/fix-changelog-last-tag\n    * 9627780 (tag: 1.7.0) Release 1.7.0\n    * 2e53ff6 (tag: 1.6.0) Release 1.6.0\n    * bbd32d8 (tag: 1.5.1) Release 1.5.1\n    | * 6b6b758 (nickl/gh-pages, gh-pages) add example git-extras to gh-pages\n    | * 19cfd11 (origin/gh-pages) Index page\n    | | * 881a70e (tag: 1.5.0) Release 1.5.0\n    | |/\n    |/|\n    * | 4db5ee0 (tag: 1.4.0) Release 1.4.0\n    * | 9b0bc89 (tag: 1.3.0) Release 1.3.0\n    * | be49961 (tag: 1.2.0) Release 1.2.0\n    * | c1d2dfc (tag: 1.1.0) Release 1.1.0\n    * | 4a56adb (tag: 1.0.0) Release 1.0.0\n    * | 948308b (tag: 0.9.0) Release 0.9.0\n    * | 40b131d (tag: 0.8.1) Release 0.8.1\n    * | 391431d (tag: 0.8.0) Release 0.8.0\n\n## AUTHOR\n\nWritten by Nick Lombard <github@jigsoft.co.za>\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-show-unmerged-branches.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SHOW\\-UNMERGED\\-BRANCHES\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-show\\-unmerged\\-branches\\fR \\- Show unmerged branches\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-show\\-unmerged\\-branches\\fR\n.\n.SH \"DESCRIPTION\"\nShow all branches not merged in to current HEAD\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n$ git show\\-unmerged\\-branches\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Paul Schreiber <\\fIpaulschreiber@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-show-unmerged-branches.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-show-unmerged-branches(1) - Show unmerged branches</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-show-unmerged-branches(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-show-unmerged-branches(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-show-unmerged-branches</code> - <span class=\"man-whatis\">Show unmerged branches</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-show-unmerged-branches</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Show all branches not merged in to current HEAD.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git show-unmerged-branches\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Paul Schreiber &lt;<a href=\"&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x70;&#97;&#x75;&#x6c;&#x73;&#99;&#104;&#x72;&#x65;&#x69;&#x62;&#101;&#x72;&#x40;&#103;&#109;&#97;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#112;&#x61;&#x75;&#x6c;&#115;&#x63;&#104;&#x72;&#101;&#105;&#98;&#x65;&#x72;&#x40;&#103;&#109;&#97;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-show-unmerged-branches(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-show-unmerged-branches.md",
    "content": "git-show-unmerged-branches(1) -- Show unmerged branches\n=======================================================\n\n## SYNOPSIS\n\n`git-show-unmerged-branches`\n\n## DESCRIPTION\n\n  Show all branches not merged in to current HEAD.\n\n## EXAMPLES\n\n    $ git show-unmerged-branches\n\n## AUTHOR\n\nWritten by Paul Schreiber &lt;<paulschreiber@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-squash.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SQUASH\" \"1\" \"October 2020\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-squash\\fR \\- squash N last changes up to a ref\\'ed commit\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-squash\\fR [<\\-\\-squash\\-msg>] <source\\-branch|commit ref> [<commit\\-message>]\n.\n.SH \"DESCRIPTION\"\nSquash the N last changes in the current branch, where N is the range of commits from the given ref up to HEAD\\.\n.\n.SH \"OPTIONS\"\n<source\\-branch>\n.\n.P\nBranch to squash on the current branch\\.\n.\n.P\n<commit reference> A commit reference (has to be from the current branch) can also be used as the first argument\\. A range of commits \\fIsha\\fR\\.\\.HEAD will be squashed\\.\n.\n.P\n<\\-\\-squash\\-msg>\n.\n.P\nCommit the squash result with the concatenated squashed committed messages\\. This option can not be used together with <commit\\-message>\\.\n.\n.P\n<commit\\-message>\n.\n.P\nIf commit\\-message is given, commit the squashed result, otherwise the squash remains just added to the index and is not committed\\.\n.\n.SH \"EXAMPLES\"\n.\n.nf\n\n# squash changes and follow up with separate commit step\n$ git squash my\\-other\\-branch\nUpdating a2740f5\\.\\.533b19c\nFast\\-forward\nSquash commit \\-\\- not updating HEAD\n my\\-changed\\-file | 1 +\n 1 file changed, 1 insertion(+)\n$ git commit \\-m \"New commit without a real merge\"\n\n# squash and commit with given message\n$ git squash HEAD~3 \"Commit message\"\n\n# squash and commit and concatenate all messages\n$ git squash \\-\\-squash\\-msg @~3\n.\n.fi\n.\n.SH \"AUTHOR\"\nWritten by Jesús Espino <\\fIjespinog@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-squash.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-squash(1) - squash N last changes up to a ref&#39;ed commit</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-squash(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-squash(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-squash</code> - <span class=\"man-whatis\">squash N last changes up to a ref'ed commit</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-squash</code> [&lt;--squash-msg&gt;] &lt;source-branch|commit ref&gt; [&lt;commit-message&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Squash the N last changes in the current branch, where N is the range of commits from the given ref up to HEAD.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;source-branch&gt;</p>\n\n<p>  Branch to squash on the current branch.</p>\n\n<p>  &lt;commit reference&gt;\n  A commit reference (has to be from the current branch) can also be used as the\n  first argument. A range of commits <var>sha</var>..HEAD will be squashed.</p>\n\n<p>  &lt;--squash-msg&gt;</p>\n\n<p>  Commit the squash result with the concatenated squashed committed messages.\n  This option can not be used together with &lt;commit-message&gt;.</p>\n\n<p>  &lt;commit-message&gt;</p>\n\n<p>  If commit-message is given, commit the squashed result, otherwise the squash remains just added to the index and is not committed.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code># squash changes and follow up with separate commit step\n$ git squash my-other-branch\nUpdating a2740f5..533b19c\nFast-forward\nSquash commit -- not updating HEAD\n my-changed-file | 1 +\n 1 file changed, 1 insertion(+)\n$ git commit -m \"New commit without a real merge\"\n\n# squash and commit with given message\n$ git squash HEAD~3 \"Commit message\"\n\n# squash and commit and concatenate all messages\n$ git squash --squash-msg @~3\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Jesús Espino &lt;<a href=\"&#x6d;&#x61;&#105;&#x6c;&#x74;&#111;&#x3a;&#106;&#x65;&#x73;&#112;&#105;&#x6e;&#111;&#103;&#x40;&#103;&#x6d;&#x61;&#x69;&#x6c;&#46;&#x63;&#x6f;&#x6d;\" data-bare-link=\"true\">&#x6a;&#101;&#115;&#x70;&#x69;&#110;&#111;&#103;&#64;&#103;&#x6d;&#97;&#x69;&#x6c;&#x2e;&#99;&#111;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2020</li>\n    <li class='tr'>git-squash(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-squash.md",
    "content": "git-squash(1) -- squash N last changes up to a ref'ed commit\n=============================================\n\n## SYNOPSIS\n\n`git-squash` [&lt;--squash-msg&gt;] &lt;source-branch|commit ref&gt; [&lt;commit-message&gt;]\n\n## DESCRIPTION\n\n  Squash the N last changes in the current branch, where N is the range of commits from the given ref up to HEAD.\n\n## OPTIONS\n\n  &lt;source-branch&gt;\n\n  Branch to squash on the current branch.\n\n  &lt;commit reference&gt;\n  A commit reference (has to be from the current branch) can also be used as the\n  first argument. A range of commits <sha>..HEAD will be squashed.\n\n  &lt;--squash-msg&gt;\n\n  Commit the squash result with the concatenated squashed committed messages.\n  This option can not be used together with &lt;commit-message&gt;.\n\n  &lt;commit-message&gt;\n\n  If commit-message is given, commit the squashed result, otherwise the squash remains just added to the index and is not committed.\n\n## EXAMPLES\n\n    # squash changes and follow up with separate commit step\n    $ git squash my-other-branch\n    Updating a2740f5..533b19c\n    Fast-forward\n    Squash commit -- not updating HEAD\n     my-changed-file | 1 +\n     1 file changed, 1 insertion(+)\n    $ git commit -m \"New commit without a real merge\"\n\n    # squash and commit with given message\n    $ git squash HEAD~3 \"Commit message\"\n\n    # squash and commit and concatenate all messages\n    $ git squash --squash-msg @~3\n\n## AUTHOR\n\nWritten by Jesús Espino &lt;<jespinog@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-stamp.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-STAMP\" \"1\" \"September 2024\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-stamp\\fR \\- Stamp the last commit message\n.SH \"SYNOPSIS\"\n\\fBgit stamp [<options>] <id> [<messages>]\\fR\n.SH \"DESCRIPTION\"\nLets you amend the last commit with a stamp message\\.\n.P\nThe command appends a message with its identifier to the last commit message\\.\n.br\nBy default all stamps are appended as a new paragraph to the commit message\\.\n.br\nYou can change this behavior by using the \\-\\-replace flag\\.\n.br\nWith this flag, all the related stamps with the same identifier will be removed first before the new one gets appended\\.\n.P\n\\fBWARNING!\\fR If a commit message without stamp have a line starting with the same identifier, it will be interpreted as a stamp\n.SH \"OPTIONS\"\n\\-r, \\-\\-replace\n.IP \"\" 4\n.nf\nReplace all previous stamps in the last commit message that have the same identifier\nThe identifier is case insensitive for this replacement\n.fi\n.IP \"\" 0\n.SH \"EXAMPLES\"\nCommit message is\n.IP \"\" 4\n.nf\n| Fix timezone bug\n.fi\n.IP \"\" 0\n.P\nReference the issues numbers from your bug tracker\n.IP \"\" 4\n.nf\n$ git stamp Issue FOO\\-123\n$ git stamp Issue FOO\\-456 \\e#close\n\n| Fix timezone bug\n|\n| Issue FOO\\-123\n|\n| Issue FOO\\-456 #close\n.fi\n.IP \"\" 0\n.P\nLink to its review page\n.IP \"\" 4\n.nf\n$ git stamp Review https://reviews\\.foo\\.org/r/4567/\n\n| Fix timezone bug\n|\n| Issue FOO\\-123\n|\n| Issue FOO\\-456 #close\n|\n| Review https://reviews\\.foo\\.org/r/4567/\n.fi\n.IP \"\" 0\n.P\nReplace previous issues with a new one\n.br\n(Note that the identifier is case insensitive)\n.IP \"\" 4\n.nf\n$ git stamp \\-\\-replace issue BAR\\-123\n\n| Fix timezone bug\n|\n| Review https://reviews\\.foo\\.org/r/4567/\n|\n| issue BAR\\-123\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Damien Tardy\\-Panis <\\fIdamien@tardypad\\.me\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-stamp.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-stamp(1) - Stamp the last commit message</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-stamp(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-stamp(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-stamp</code> - <span class=\"man-whatis\">Stamp the last commit message</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git stamp [&lt;options&gt;] &lt;id&gt; [&lt;messages&gt;]</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Lets you amend the last commit with a stamp message.</p>\n\n<p>The command appends a message with its identifier to the last commit message.<br>\nBy default all stamps are appended as a new paragraph to the commit message.<br>\nYou can change this behavior by using the --replace flag.<br>\nWith this flag, all the related stamps with the same identifier will be removed first before the new one gets appended.</p>\n\n<p><code>WARNING!</code> If a commit message without stamp have a line starting with the same identifier, it will be interpreted as a stamp</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-r, --replace</p>\n\n<pre><code>Replace all previous stamps in the last commit message that have the same identifier  \nThe identifier is case insensitive for this replacement\n</code></pre>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Commit message is</p>\n\n<pre><code>| Fix timezone bug\n</code></pre>\n\n<p>Reference the issues numbers from your bug tracker</p>\n\n<pre><code>$ git stamp Issue FOO-123\n$ git stamp Issue FOO-456 \\#close\n\n| Fix timezone bug\n|\n| Issue FOO-123\n|\n| Issue FOO-456 #close\n</code></pre>\n\n<p>Link to its review page</p>\n\n<pre><code>$ git stamp Review https://reviews.foo.org/r/4567/\n\n| Fix timezone bug\n|\n| Issue FOO-123\n|\n| Issue FOO-456 #close\n|\n| Review https://reviews.foo.org/r/4567/\n</code></pre>\n\n<p>Replace previous issues with a new one<br>\n(Note that the identifier is case insensitive)</p>\n\n<pre><code>$ git stamp --replace issue BAR-123\n\n| Fix timezone bug\n|\n| Review https://reviews.foo.org/r/4567/\n|\n| issue BAR-123\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Damien Tardy-Panis &lt;<a href=\"mailto:damien@tardypad.me\" data-bare-link=\"true\">damien@tardypad.me</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>September 2024</li>\n    <li class='tr'>git-stamp(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-stamp.md",
    "content": "git-stamp(1) -- Stamp the last commit message\n=============================================\n\n## SYNOPSIS\n\n`git stamp [<options>] <id> [<messages>]`\n\n## DESCRIPTION\n\nLets you amend the last commit with a stamp message.\n\nThe command appends a message with its identifier to the last commit message.  \nBy default all stamps are appended as a new paragraph to the commit message.  \nYou can change this behavior by using the --replace flag.  \nWith this flag, all the related stamps with the same identifier will be removed first before the new one gets appended.\n\n`WARNING!` If a commit message without stamp have a line starting with the same identifier, it will be interpreted as a stamp\n\n## OPTIONS\n\n  -r, --replace\n\n    Replace all previous stamps in the last commit message that have the same identifier  \n    The identifier is case insensitive for this replacement\n\n## EXAMPLES\n\nCommit message is\n\n    | Fix timezone bug\n\nReference the issues numbers from your bug tracker\n\n    $ git stamp Issue FOO-123\n    $ git stamp Issue FOO-456 \\#close\n\n    | Fix timezone bug\n    |\n    | Issue FOO-123\n    |\n    | Issue FOO-456 #close\n\nLink to its review page\n\n    $ git stamp Review https://reviews.foo.org/r/4567/\n\n    | Fix timezone bug\n    |\n    | Issue FOO-123\n    |\n    | Issue FOO-456 #close\n    |\n    | Review https://reviews.foo.org/r/4567/\n\nReplace previous issues with a new one  \n(Note that the identifier is case insensitive)\n\n    $ git stamp --replace issue BAR-123\n\n    | Fix timezone bug\n    |\n    | Review https://reviews.foo.org/r/4567/\n    |\n    | issue BAR-123\n\n## AUTHOR\n\nWritten by Damien Tardy-Panis &lt;<damien@tardypad.me>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-standup.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-STANDUP\" \"1\" \"July 2022\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-standup\\fR \\- Recall the commit history\n.SH \"SYNOPSIS\"\n\\fBgit\\-standup\\fR [\\-a author] [\\-w \\fIweekstart\\-weekend\\fR|\\-d \\fIdays\\-ago\\fR] [\\-m depth] [\\-D date format] [\\-L] [\\-f] [\\-B] [\\-n number of commits] [\\-F \\fIgpg|authordate\\fR]\n.br\n\\fBgit\\-standup\\fR \\-h\n.SH \"DESCRIPTION\"\nRecall what you did on the last working day \\.\\.or be nosy and find what someone else did\\.\n.SH \"OPTIONS\"\n\\-a author\n.P\nThe author of commits\\. Use \"all\" means specifying \"all authors\"\\. Defaults to \\fB$(git config user\\.name)\\fR\\.\n.P\n\\-m depth\n.P\nThe depth of recursive directory search\\. Defaults to 1\\.\n.P\n\\-L\n.P\nEnable the inclusion of symbolic links in recursive directory search\\.\n.P\n\\-d days\\-ago\n.P\nThe start of commit history\\. Defaults to 1, means \"1 days ago\"\\.\n.P\n\\-w \\fIweekstart\\-weekend\\fR\n.P\nLimit the search range to weekdays\\. If \\fIweekstart\\fR and/or \\fIweekend\\fR are missing they default to Mon and Fri\\. If the current day is \\fIweekstart\\fR, commits made on \\fIweekend\\fR will be included\\. I\\.e\\. calling \\fBgit standup \\-w \\-\\fR on a Monday will include commits made on the last Friday\\.\n.P\n\\-D relative\n.P\nThe date format displayed in commit history\\. Defaults to \"relative\"\\.\n.P\n\\-h\n.P\nDisplay help message\\.\n.P\n\\-f\n.P\nFetch the latest commits before showing commit history\\.\n.P\nThe former version of \\fBgit standup\\fR accepted \\fB<author> <since> <until>\\fR as options\\. This interface is deprecated now, and please avoid to use it!\n.P\n\\-B\n.P\nDisplay the commits in branch groups\\.\n.P\n\\-n number\\-of\\-commits\n.P\nLimit the number of commits displayed per group\\. By default, the limitation is applied in the repository level\\. For example, if you have 3 repositories under the current directory, \\fBgit standup \\|\\.\\|\\.\\|\\. \\-n 1\\fR will show you 3 commits at most\\. When \\fB\\-B\\fR is specific, the limitation is applied in the branch level\\. For instance, if each of your 3 repositories have 2 branches, \\fBgit standup \\|\\.\\|\\.\\|\\. \\-B \\-n 1\\fR will display 6 commits at most\\.\n.P\n\\-F \\fIgpg|authordate\\fR\n.P\nChange how the commits are formatted\\. Takes an argument, can be specified multiple times\\.\n.IP \"\\[ci]\" 4\n\\fB\\-F gpg\\fR: Display if commit is GPG signed (G) or not (N)\\.\n.IP \"\\[ci]\" 4\n\\fB\\-F authordate\\fR: Print the author date instead of the commit date\\.\n.IP \"\" 0\n.SH \"GIT CONFIGS\"\nYou can configure a implicit \\-w \\fIweekstart\\-weekend\\fR, which is superseded if \\-w or \\-d is given on the command line\\. Note that the \\fIweekstart\\-weekend\\fR must be specified, they don\\'t have any default values as the \\fB\\-w\\fR flag has\\.\n.IP \"\" 4\n.nf\n$ git config \\-\\-global git\\-extras\\.standup\\.implicit\\-week \"Mon\\-Fri\"\n.fi\n.IP \"\" 0\n.SH \"EXAMPLES\"\nThis shows your commits since yesterday:\n.IP \"\" 4\n.nf\n$ git standup\n\na26d1f9 \\- add profile hook (69 minutes ago) <spacewander>\n.fi\n.IP \"\" 0\n.P\nThis shows the author\\'s commits since last week:\n.IP \"\" 4\n.nf\n$ git standup \\-a spacewander \\-d 7\n\na26d1f9 \\- add profile hook (70 minutes ago) <spacewander>\n4e19859 \\- fix getTotalSize return value error (6 days ago) <spacewander>\n36da84e \\- fix rename over bound (7 days ago) <spacewander>\n8e4182a \\- add watermark\\.png (7 days ago) <spacewander>\n46fef1d \\- use tinyXML to configure (7 days ago) <spacewander>\n.fi\n.IP \"\" 0\n.P\nIf current directory is not a git repo, git\\-standup will fetch data from all top\\-level git repos under it:\n.IP \"\" 4\n.nf\n$ cd \\.\\.\n$ git standup \\-a spacewander \\-d 7\n\nsomeProject/\n4e19859 \\- fix getTotalSize return value error (6 days ago) <spacewander>\n36da84e \\- fix rename over bound (7 days ago) <spacewander>\n8e4182a \\- add watermark\\.png (7 days ago) <spacewander>\n46fef1d \\- use tinyXML to configure (7 days ago) <spacewander>\n.fi\n.IP \"\" 0\n.P\nBy specifying the \\fB\\-B\\fR option, git\\-standuo will group the commits in branches:\n.IP \"\" 4\n.nf\n$ git standup \\-B \\-a spacewander \\-d 7\n\ngit\\-summary\\-cleanup\nf788c78 \\- git\\-summary: clean up other shellcheck warnings (23 hours ago) <spacewander>\n3e8c3ab \\- git\\-summary: fix incorrect active days when commits range is given (23 hours ago) <spacewander>\nff991ac \\- git\\-summary: remove useless result function\\. (23 hours ago) <spacewander>\n203f5b4 \\- git\\-summary: add \\-\\-dedup\\-by\\-email to remove duplicate users (5 days ago) <spacewander>\n\nmaster\n203f5b4 \\- git\\-summary: add \\-\\-dedup\\-by\\-email to remove duplicate users (5 days ago) <spacewander>\n.fi\n.IP \"\" 0\n.P\nNote that the same commit can be seen in different branches\\.\n.SH \"AUTHOR\"\nOriginally from https://github\\.com/kamranahmedse/git\\-standup\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-standup.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-standup(1) - Recall the commit history</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#GIT-CONFIGS\">GIT CONFIGS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-standup(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-standup(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-standup</code> - <span class=\"man-whatis\">Recall the commit history</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-standup</code> [-a author] [-w <var>weekstart-weekend</var>|-d <var>days-ago</var>] [-m depth] [-D date format] [-L] [-f] [-B] [-n number of commits] [-F <var>gpg|authordate</var>]<br>\n<code>git-standup</code> -h</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Recall what you did on the last working day ..or be nosy and find what someone else did.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>-a author</p>\n\n<p>The author of commits. Use \"all\" means specifying \"all authors\".\nDefaults to <code>$(git config user.name)</code>.</p>\n\n<p>-m depth</p>\n\n<p>The depth of recursive directory search. Defaults to 1.</p>\n\n<p>-L</p>\n\n<p>Enable the inclusion of symbolic links in recursive directory search.</p>\n\n<p>-d days-ago</p>\n\n<p>The start of commit history. Defaults to 1, means \"1 days ago\".</p>\n\n<p>-w <var>weekstart-weekend</var></p>\n\n<p>Limit the search range to weekdays.\nIf <var>weekstart</var> and/or <var>weekend</var> are missing they default to Mon and Fri.\nIf the current day is <var>weekstart</var>, commits made on <var>weekend</var> will be included.\nI.e. calling <code>git standup -w -</code> on a Monday will include commits made on the last Friday.</p>\n\n<p>-D relative</p>\n\n<p>The date format displayed in commit history. Defaults to \"relative\".</p>\n\n<p>-h</p>\n\n<p>Display help message.</p>\n\n<p>-f</p>\n\n<p>Fetch the latest commits before showing commit history.</p>\n\n<p>The former version of <code>git standup</code> accepted <code>&lt;author&gt; &lt;since&gt; &lt;until&gt;</code> as options.\nThis interface is deprecated now, and please avoid to use it!</p>\n\n<p>-B</p>\n\n<p>Display the commits in branch groups.</p>\n\n<p>-n number-of-commits</p>\n\n<p>Limit the number of commits displayed per group.\nBy default, the limitation is applied in the repository level. For example, if you\nhave 3 repositories under the current directory, <code>git standup ... -n 1</code> will\nshow you 3 commits at most.\nWhen <code>-B</code> is  specific, the limitation is applied in the branch level. For instance,\nif each of your 3 repositories have 2 branches, <code>git standup ... -B -n 1</code> will\ndisplay 6 commits at most.</p>\n\n<p>-F <var>gpg|authordate</var></p>\n\n<p>Change how the commits are formatted. Takes an argument, can be specified multiple times.</p>\n\n<ul>\n  <li>\n<code>-F gpg</code>: Display if commit is GPG signed (G) or not (N).</li>\n  <li>\n<code>-F authordate</code>: Print the author date instead of the commit date.</li>\n</ul>\n\n<h2 id=\"GIT-CONFIGS\">GIT CONFIGS</h2>\n\n<p>You can configure a implicit -w <var>weekstart-weekend</var>, which is superseded if -w or -d is given on the command line.\nNote that the <var>weekstart-weekend</var> must be specified, they don't have any default values as the <code>-w</code> flag has.</p>\n\n<pre><code>$ git config --global git-extras.standup.implicit-week \"Mon-Fri\"\n</code></pre>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>This shows your commits since yesterday:</p>\n\n<pre><code>$ git standup\n\na26d1f9 - add profile hook (69 minutes ago) &lt;spacewander&gt;\n</code></pre>\n\n<p>This shows the author's commits since last week:</p>\n\n<pre><code>$ git standup -a spacewander -d 7\n\na26d1f9 - add profile hook (70 minutes ago) &lt;spacewander&gt;\n4e19859 - fix getTotalSize return value error (6 days ago) &lt;spacewander&gt;\n36da84e - fix rename over bound (7 days ago) &lt;spacewander&gt;\n8e4182a - add watermark.png (7 days ago) &lt;spacewander&gt;\n46fef1d - use tinyXML to configure (7 days ago) &lt;spacewander&gt;\n</code></pre>\n\n<p>If current directory is not a git repo, git-standup will fetch data from all top-level git repos under it:</p>\n\n<pre><code>$ cd ..\n$ git standup -a spacewander -d 7\n\nsomeProject/\n4e19859 - fix getTotalSize return value error (6 days ago) &lt;spacewander&gt;\n36da84e - fix rename over bound (7 days ago) &lt;spacewander&gt;\n8e4182a - add watermark.png (7 days ago) &lt;spacewander&gt;\n46fef1d - use tinyXML to configure (7 days ago) &lt;spacewander&gt;\n</code></pre>\n\n<p>By specifying the <code>-B</code> option, git-standuo will group the commits in branches:</p>\n\n<pre><code>$ git standup -B -a spacewander -d 7\n\ngit-summary-cleanup\nf788c78 - git-summary: clean up other shellcheck warnings (23 hours ago) &lt;spacewander&gt;\n3e8c3ab - git-summary: fix incorrect active days when commits range is given (23 hours ago) &lt;spacewander&gt;\nff991ac - git-summary: remove useless result function. (23 hours ago) &lt;spacewander&gt;\n203f5b4 - git-summary: add --dedup-by-email to remove duplicate users (5 days ago) &lt;spacewander&gt;\n\nmaster\n203f5b4 - git-summary: add --dedup-by-email to remove duplicate users (5 days ago) &lt;spacewander&gt;\n</code></pre>\n\n<p>Note that the same commit can be seen in different branches.</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Originally from https://github.com/kamranahmedse/git-standup</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>July 2022</li>\n    <li class='tr'>git-standup(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-standup.md",
    "content": "git-standup(1) -- Recall the commit history\n=================================\n\n## SYNOPSIS\n\n`git-standup` [-a author] [-w <weekstart-weekend>|-d <days-ago>] [-m depth] [-D date format] [-L] [-f] [-B] [-n number of commits] [-F <gpg|authordate>]  \n`git-standup` -h\n\n## DESCRIPTION\n\nRecall what you did on the last working day ..or be nosy and find what someone else did.\n\n## OPTIONS\n\n-a author\n\nThe author of commits. Use \"all\" means specifying \"all authors\".\nDefaults to `$(git config user.name)`.\n\n-m depth\n\nThe depth of recursive directory search. Defaults to 1.\n\n-L\n\nEnable the inclusion of symbolic links in recursive directory search.\n\n-d days-ago\n\nThe start of commit history. Defaults to 1, means \"1 days ago\".\n\n-w <weekstart-weekend>\n\nLimit the search range to weekdays.\nIf <weekstart> and/or <weekend> are missing they default to Mon and Fri.\nIf the current day is <weekstart>, commits made on <weekend> will be included.\nI.e. calling `git standup -w -` on a Monday will include commits made on the last Friday.\n\n-D relative\n\nThe date format displayed in commit history. Defaults to \"relative\".\n\n-h\n\nDisplay help message.\n\n-f\n\nFetch the latest commits before showing commit history.\n\nThe former version of `git standup` accepted `<author> <since> <until>` as options.\nThis interface is deprecated now, and please avoid to use it!\n\n-B\n\nDisplay the commits in branch groups.\n\n-n number-of-commits\n\nLimit the number of commits displayed per group.\nBy default, the limitation is applied in the repository level. For example, if you\nhave 3 repositories under the current directory, `git standup ... -n 1` will\nshow you 3 commits at most.\nWhen `-B` is  specific, the limitation is applied in the branch level. For instance,\nif each of your 3 repositories have 2 branches, `git standup ... -B -n 1` will\ndisplay 6 commits at most.\n\n-F <gpg|authordate>\n\nChange how the commits are formatted. Takes an argument, can be specified multiple times.\n\n* `-F gpg`: Display if commit is GPG signed (G) or not (N).\n* `-F authordate`: Print the author date instead of the commit date.\n\n## GIT CONFIGS\n\nYou can configure a implicit -w <weekstart-weekend>, which is superseded if -w or -d is given on the command line.\nNote that the <weekstart-weekend> must be specified, they don't have any default values as the `-w` flag has.\n\n    $ git config --global git-extras.standup.implicit-week \"Mon-Fri\"\n\n## EXAMPLES\n\nThis shows your commits since yesterday:\n\n    $ git standup\n\n    a26d1f9 - add profile hook (69 minutes ago) <spacewander>\n\nThis shows the author's commits since last week:\n\n    $ git standup -a spacewander -d 7\n\n    a26d1f9 - add profile hook (70 minutes ago) <spacewander>\n    4e19859 - fix getTotalSize return value error (6 days ago) <spacewander>\n    36da84e - fix rename over bound (7 days ago) <spacewander>\n    8e4182a - add watermark.png (7 days ago) <spacewander>\n    46fef1d - use tinyXML to configure (7 days ago) <spacewander>\n\nIf current directory is not a git repo, git-standup will fetch data from all top-level git repos under it:\n\n    $ cd ..\n    $ git standup -a spacewander -d 7\n\n    someProject/\n    4e19859 - fix getTotalSize return value error (6 days ago) <spacewander>\n    36da84e - fix rename over bound (7 days ago) <spacewander>\n    8e4182a - add watermark.png (7 days ago) <spacewander>\n    46fef1d - use tinyXML to configure (7 days ago) <spacewander>\n\nBy specifying the `-B` option, git-standuo will group the commits in branches:\n\n    $ git standup -B -a spacewander -d 7\n\n    git-summary-cleanup\n    f788c78 - git-summary: clean up other shellcheck warnings (23 hours ago) <spacewander>\n    3e8c3ab - git-summary: fix incorrect active days when commits range is given (23 hours ago) <spacewander>\n    ff991ac - git-summary: remove useless result function. (23 hours ago) <spacewander>\n    203f5b4 - git-summary: add --dedup-by-email to remove duplicate users (5 days ago) <spacewander>\n\n    master\n    203f5b4 - git-summary: add --dedup-by-email to remove duplicate users (5 days ago) <spacewander>\n\nNote that the same commit can be seen in different branches.\n\n## AUTHOR\n\nOriginally from https://github.com/kamranahmedse/git-standup\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-summary.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-SUMMARY\" \"1\" \"February 2025\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-summary\\fR \\- Show repository summary\n.SH \"SYNOPSIS\"\n\\fBgit\\-summary\\fR [\\-\\-dedup\\-by\\-email] [\\-\\-no\\-merges] [<committish>]\n.P\n\\fBgit\\-summary\\fR \\-\\-line [<path>]\n.SH \"DESCRIPTION\"\nShows a summary of the repository or a path within it\\.\n.SH \"OPTIONS\"\n<committish>\n.P\nSummarize only the range of commits included in the <committish>\\.\n.P\n<path>\n.P\nSummarize only the range of files included in the <path>\\.\n.P\n\\-\\-dedup\\-by\\-email\n.P\nRemove duplicate authors who belong to the same email address\\. For example,\n.IP \"\" 4\n.nf\n$ git summary\n\\|\\.\\|\\.\\|\\.\n133  TJ Holowaychuk            9\\.9%\n115  Tj Holowaychuk            8\\.5%\n\n$ git summary \\-\\-dedup\\-by\\-email\n\\|\\.\\|\\.\\|\\.\n248  TJ Holowaychuk            18\\.4%\n.fi\n.IP \"\" 0\n.P\n\\-\\-no\\-merges\n.P\nExclude merge commits\\.\n.P\n\\-\\-full\\-path\n.P\nShow the full path of the repository instead of its directory name\\.\n.P\n\\-\\-line\n.P\nSummarize with lines other than commits\\. When \\fB\\-\\-line\\fR is specified, the last argument is treated as <path>\\.\n.P\nThis option can not be used together with \\fB\\-\\-dedup\\-by\\-email\\fR or \\fB\\-\\-no\\-merges\\fR\\.\n.P\n\\-\\-output\\-style <style>\n.P\nSummarizes the repository and print the output according to the specified style\\. Styles:\n.IP \"\\(bu\" 4\n\\fBtabular\\fR: Prints the summary in a tabular form having a header in the first line and the values in the second\\. Column separator is a \\fB|\\fR surrounded by at least one space on each side\\.\n.IP \"\\(bu\" 4\n\\fBoneline\\fR: Prints the summary in a single line\\. Fields are separated by a \\fB/\\fR surrounded by one space on each side\\.\n.IP \"\" 0\n.P\nSome information like the authors cannot be displayed in this mode\\.\n.SH \"EXAMPLES\"\nOutputs a repo summary:\n.IP \"\" 4\n.nf\n$ git summary\n\nproject     : express\nrepo age    : 10 months ago\nbranch      : master\nlast active : 3 weeks ago\nactive on   : 93 days\ncommits     : 1893\nfiles       : 111\nuncommitted : 3\nauthors     :\n 1285 visionmedia\n  478 Tj Holowaychuk\n   48 Aaron Heckmann\n   34 csausdev\n   26 ciaranj\n    6 Guillermo Rauch\n    3 Nick Poulden\n    2 Brian McKinney\n    2 Benny Wong\n    1 Justin Lilly\n    1 James Herdman\n    1 Adam Sanderson\n    1 Viktor Kelemen\n    1 Gregory Ritter\n    1 Greg Ritter\n    1 ewoudj\n    1 isaacs\n    1 Matt Colyer\n.fi\n.IP \"\" 0\n.P\nThis command can also take a committish, and will print a summary for the range of commits included in the committish:\n.IP \"\" 4\n.nf\n$ git summary v42\\.\\.\n.fi\n.IP \"\" 0\n.P\nOutputs a repo summary by line:\n.IP \"\" 4\n.nf\n$ git summary \\-\\-line\n\nproject  : git\\-extras\nlines    : 26820\nauthors  :\n  \\|\\.\\|\\.\\|\\.\n.fi\n.IP \"\" 0\n.P\nFilter with the path:\n.IP \"\" 4\n.nf\n$ git summary \\-\\-line bin/\n\nproject  : git\\-extras\nlines    : 4420\nauthors  :\n  \\|\\.\\|\\.\\|\\.\n.fi\n.IP \"\" 0\n.P\nTabular summary\n.IP \"\" 4\n.nf\n$ git summary \\-\\-output\\-style tabular\n# Repo     | Age       | Last active | Active on | Commits | Uncommitted | Branch\ngit\\-extras | 13 years  | 7 hours ago | 807 days  | 1703    | 3           | master\n.fi\n.IP \"\" 0\n.P\nOneline summary\n.IP \"\" 4\n.nf\n$ git summary \\-\\-output\\-style oneline\ngit\\-extras / age: 13 years / last active: 7 hours ago / active on 807 days / commits: 1703 / uncommitted: 3 / branch: master\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Tj Holowaychuk <\\fItj@vision\\-media\\.ca\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-summary.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\n  <title>git-summary(1) - Show repository summary</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-summary(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-summary(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-summary</code> - <span class=\"man-whatis\">Show repository summary</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-summary</code> [--dedup-by-email] [--no-merges] [&lt;committish&gt;]</p>\n\n<p><code>git-summary</code> --line [&lt;path&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Shows a summary of the repository or a path within it.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;committish&gt;</p>\n\n<p>Summarize only the range of commits included in the &lt;committish&gt;.</p>\n\n<p>&lt;path&gt;</p>\n\n<p>Summarize only the range of files included in the &lt;path&gt;.</p>\n\n<p>--dedup-by-email</p>\n\n<p>Remove duplicate authors who belong to the same email address.\n  For example,</p>\n\n<pre><code>$ git summary\n...\n133  TJ Holowaychuk            9.9%\n115  Tj Holowaychuk            8.5%\n\n$ git summary --dedup-by-email\n...\n248  TJ Holowaychuk            18.4%\n</code></pre>\n\n<p>--no-merges</p>\n\n<p>Exclude merge commits.</p>\n\n<p>--full-path</p>\n\n<p>Show the full path of the repository instead of its directory name.</p>\n\n<p>--line</p>\n\n<p>Summarize with lines other than commits.\n  When <code>--line</code> is specified, the last argument is treated as &lt;path&gt;.</p>\n\n<p>This option can not be used together with <code>--dedup-by-email</code> or <code>--no-merges</code>.</p>\n\n<p>--output-style &lt;style&gt;</p>\n\n<p>Summarizes the repository and print the output according to the specified style.\n  Styles:</p>\n<ul>\n  <li>\n<code>tabular</code>: Prints the summary in a tabular form having a header in the\n           first line and the values in the second. Column separator is a <code>|</code>\n           surrounded by at least one space on each side.</li>\n  <li>\n<code>oneline</code>: Prints the summary in a single line. Fields are separated by a <code>/</code>\n           surrounded by one space on each side.</li>\n</ul>\n\n<p>Some information like the authors cannot be displayed in this mode.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Outputs a repo summary:</p>\n\n<pre><code>$ git summary\n\nproject     : express\nrepo age    : 10 months ago\nbranch      : master\nlast active : 3 weeks ago\nactive on   : 93 days\ncommits     : 1893\nfiles       : 111\nuncommitted : 3\nauthors     :\n 1285 visionmedia\n  478 Tj Holowaychuk\n   48 Aaron Heckmann\n   34 csausdev\n   26 ciaranj\n    6 Guillermo Rauch\n    3 Nick Poulden\n    2 Brian McKinney\n    2 Benny Wong\n    1 Justin Lilly\n    1 James Herdman\n    1 Adam Sanderson\n    1 Viktor Kelemen\n    1 Gregory Ritter\n    1 Greg Ritter\n    1 ewoudj\n    1 isaacs\n    1 Matt Colyer\n</code></pre>\n\n<p>This command can also take a committish, and will print a summary for the range\n  of commits included in the committish:</p>\n\n<pre><code>$ git summary v42..\n</code></pre>\n\n<p>Outputs a repo summary by line:</p>\n\n<pre><code>$ git summary --line\n\nproject  : git-extras\nlines    : 26820\nauthors  :\n  ...\n</code></pre>\n\n<p>Filter with the path:</p>\n\n<pre><code>$ git summary --line bin/\n\nproject  : git-extras\nlines    : 4420\nauthors  :\n  ...\n</code></pre>\n\n<p>Tabular summary</p>\n\n<pre><code>$ git summary --output-style tabular\n# Repo     | Age       | Last active | Active on | Commits | Uncommitted | Branch\ngit-extras | 13 years  | 7 hours ago | 807 days  | 1703    | 3           | master\n</code></pre>\n\n<p>Oneline summary</p>\n\n<pre><code>$ git summary --output-style oneline\ngit-extras / age: 13 years / last active: 7 hours ago / active on 807 days / commits: 1703 / uncommitted: 3 / branch: master\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Tj Holowaychuk &lt;<a href=\"mailto:tj@vision-media.ca\" data-bare-link=\"true\">tj@vision-media.ca</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2025</li>\n    <li class='tr'>git-summary(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-summary.md",
    "content": "git-summary(1) -- Show repository summary\n=========================================\n\n## SYNOPSIS\n\n`git-summary` [--dedup-by-email] [--no-merges] [&lt;committish&gt;]\n\n`git-summary` --line [&lt;path&gt;]\n\n## DESCRIPTION\n\nShows a summary of the repository or a path within it.\n\n## OPTIONS\n\n  &lt;committish&gt;\n\n  Summarize only the range of commits included in the &lt;committish&gt;.\n\n  &lt;path&gt;\n\n  Summarize only the range of files included in the &lt;path&gt;.\n\n  --dedup-by-email\n\n  Remove duplicate authors who belong to the same email address.\n  For example,\n\n    $ git summary\n    ...\n    133  TJ Holowaychuk            9.9%\n    115  Tj Holowaychuk            8.5%\n\n    $ git summary --dedup-by-email\n    ...\n    248  TJ Holowaychuk            18.4%\n\n  --no-merges\n\n  Exclude merge commits.\n\n  --full-path\n\n  Show the full path of the repository instead of its directory name.\n\n  --line\n\n  Summarize with lines other than commits.\n  When `--line` is specified, the last argument is treated as &lt;path&gt;.\n\n  This option can not be used together with `--dedup-by-email` or `--no-merges`.\n\n  --output-style &lt;style&gt;\n\n  Summarizes the repository and print the output according to the specified style.\n  Styles:\n  * `tabular`: Prints the summary in a tabular form having a header in the\n               first line and the values in the second. Column separator is a `|`\n               surrounded by at least one space on each side.\n  * `oneline`: Prints the summary in a single line. Fields are separated by a `/`\n               surrounded by one space on each side.\n\n  Some information like the authors cannot be displayed in this mode.\n\n## EXAMPLES\n\n  Outputs a repo summary:\n\n    $ git summary\n\n    project     : express\n    repo age    : 10 months ago\n    branch      : master\n    last active : 3 weeks ago\n    active on   : 93 days\n    commits     : 1893\n    files       : 111\n    uncommitted : 3\n    authors     :\n     1285 visionmedia\n      478 Tj Holowaychuk\n       48 Aaron Heckmann\n       34 csausdev\n       26 ciaranj\n        6 Guillermo Rauch\n        3 Nick Poulden\n        2 Brian McKinney\n        2 Benny Wong\n        1 Justin Lilly\n        1 James Herdman\n        1 Adam Sanderson\n        1 Viktor Kelemen\n        1 Gregory Ritter\n        1 Greg Ritter\n        1 ewoudj\n        1 isaacs\n        1 Matt Colyer\n\n  This command can also take a committish, and will print a summary for the range\n  of commits included in the committish:\n\n    $ git summary v42..\n\n  Outputs a repo summary by line:\n\n    $ git summary --line\n\n    project  : git-extras\n    lines    : 26820\n    authors  :\n      ...\n\n  Filter with the path:\n\n    $ git summary --line bin/\n\n    project  : git-extras\n    lines    : 4420\n    authors  :\n      ...\n\n  Tabular summary\n\n    $ git summary --output-style tabular\n    # Repo     | Age       | Last active | Active on | Commits | Uncommitted | Branch\n    git-extras | 13 years  | 7 hours ago | 807 days  | 1703    | 3           | master\n\n  Oneline summary\n\n    $ git summary --output-style oneline\n    git-extras / age: 13 years / last active: 7 hours ago / active on 807 days / commits: 1703 / uncommitted: 3 / branch: master\n\n## AUTHOR\n\nWritten by Tj Holowaychuk &lt;<tj@vision-media.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-sync.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-SYNC\" \"1\" \"August 2022\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-sync\\fR \\- Sync local branch with remote branch\n.\n.SH \"SYNOPSIS\"\n\\fBgit sync\\fR [\\-\\-soft] [\\-\\-force] [ <remote> <branch> ]\n.\n.SH \"DESCRIPTION\"\nSync local branch with <remote>/<branch>\\.\n.\n.P\nWhen <remote> and <branch> are not specified on the command line, upstream of local branch will be used by default\\.\n.\n.P\nAll changes and untracked files and directories will be removed unless you add \\-s(\\-\\-soft)\\.\n.\n.SH \"OPTIONS\"\n\\-\\-soft or \\-s\n.\n.P\nAdd this flag if you want to preserve untracked files\\.\n.\n.P\n\\-\\-force or \\-f\n.\n.P\nAdd this flag to disable interaction\\.\n.\n.SH \"EXAMPLES\"\nSync local branch with its upstream\n.\n.IP \"\" 4\n.\n.nf\n\n$ git sync\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nSync local branch with origin/master\n.\n.IP \"\" 4\n.\n.nf\n\n$ git sync origin master\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nSync without cleaning untracked files:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git sync \\-s origin master\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nSync without interaction:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git sync \\-f\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Takuma Yamaguchi <\\fIkumon0587@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-sync.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-sync(1) - Sync local branch with remote branch</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-sync(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-sync(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-sync</code> - <span class=\"man-whatis\">Sync local branch with remote branch</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p>  <code>git sync</code> [--soft] [--force] [ &lt;remote&gt; &lt;branch&gt; ]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Sync local branch with &lt;remote&gt;/&lt;branch&gt;.</p>\n\n<p>  When &lt;remote&gt; and &lt;branch&gt; are not specified on the command line, upstream of local branch will be used by default.</p>\n\n<p>  All changes and untracked files and directories will be removed unless you add -s(--soft).</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --soft or -s</p>\n\n<p>  Add this flag if you want to preserve untracked files.</p>\n\n<p>  --force or -f</p>\n\n<p>  Add this flag to disable interaction.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Sync local branch with its upstream</p>\n\n<pre><code>$ git sync\n</code></pre>\n\n<p>  Sync local branch with origin/master</p>\n\n<pre><code>$ git sync origin master\n</code></pre>\n\n<p>  Sync without cleaning untracked files:</p>\n\n<pre><code>$ git sync -s origin master\n</code></pre>\n\n<p>  Sync without interaction:</p>\n\n<pre><code>$ git sync -f\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Takuma Yamaguchi &lt;<a href=\"&#x6d;&#x61;&#105;&#108;&#x74;&#111;&#58;&#107;&#117;&#x6d;&#x6f;&#110;&#x30;&#53;&#x38;&#55;&#x40;&#x67;&#x6d;&#97;&#105;&#x6c;&#46;&#x63;&#111;&#x6d;\" data-bare-link=\"true\">&#x6b;&#x75;&#109;&#111;&#110;&#x30;&#x35;&#56;&#x37;&#64;&#103;&#x6d;&#97;&#x69;&#108;&#46;&#x63;&#x6f;&#109;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>August 2022</li>\n    <li class='tr'>git-sync(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-sync.md",
    "content": "git-sync(1) -- Sync local branch with remote branch\n=================================================================\n\n## SYNOPSIS\n\n  `git sync` [--soft] [--force] [ &lt;remote&gt; &lt;branch&gt; ]\n\n## DESCRIPTION\n\n  Sync local branch with &lt;remote&gt;/&lt;branch&gt;.\n  \n  When &lt;remote&gt; and &lt;branch&gt; are not specified on the command line, upstream of local branch will be used by default.\n  \n  All changes and untracked files and directories will be removed unless you add -s(--soft).\n\n## OPTIONS\n\n  --soft or -s\n\n  Add this flag if you want to preserve untracked files.\n\n  --force or -f\n\n  Add this flag to disable interaction.\n\n\n## EXAMPLES\n\n  Sync local branch with its upstream\n\n    $ git sync\n\n  Sync local branch with origin/master\n\n    $ git sync origin master\n\n  Sync without cleaning untracked files:\n\n    $ git sync -s origin master\n\n  Sync without interaction:\n\n    $ git sync -f\n\n## AUTHOR\n\nWritten by Takuma Yamaguchi &lt;<kumon0587@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-touch.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-TOUCH\" \"1\" \"October 2017\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-touch\\fR \\- Touch and add file to the index\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-touch\\fR <filename>\n.\n.SH \"DESCRIPTION\"\nCall \\fBtouch\\fR on the given file and add it to the current index\\. Used one\\-step creating new files\\.\n.\n.SH \"OPTIONS\"\n<filename>\n.\n.P\nFile to be touched\\.\n.\n.SH \"EXAMPLES\"\n$ git touch Makefile\n.\n.SH \"AUTHOR\"\nWritten by Alex McHale <\\fIalexmchale@gmail\\.com\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-touch.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-touch(1) - Touch and add file to the index</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-touch(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-touch(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-touch</code> - <span class=\"man-whatis\">Touch and add file to the index</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-touch</code> &lt;filename&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Call <code>touch</code> on the given file and add it to the current index. Used one-step creating new files.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  &lt;filename&gt;</p>\n\n<p>  File to be touched.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  $ git touch Makefile</p>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Alex McHale &lt;<a href=\"&#109;&#x61;&#105;&#x6c;&#116;&#111;&#58;&#x61;&#x6c;&#x65;&#x78;&#109;&#x63;&#104;&#x61;&#x6c;&#101;&#x40;&#103;&#109;&#97;&#x69;&#x6c;&#x2e;&#x63;&#x6f;&#109;\" data-bare-link=\"true\">&#97;&#108;&#x65;&#x78;&#109;&#99;&#x68;&#x61;&#x6c;&#101;&#x40;&#103;&#x6d;&#97;&#x69;&#108;&#46;&#99;&#x6f;&#x6d;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>October 2017</li>\n    <li class='tr'>git-touch(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-touch.md",
    "content": "git-touch(1) -- Touch and add file to the index\n===============================================\n\n## SYNOPSIS\n\n`git-touch` &lt;filename&gt;\n\n## DESCRIPTION\n\n  Call `touch` on the given file and add it to the current index. Used one-step creating new files.\n\n## OPTIONS\n\n  &lt;filename&gt;\n\n  File to be touched.\n\n## EXAMPLES\n\n  $ git touch Makefile\n\n## AUTHOR\n\nWritten by Alex McHale &lt;<alexmchale@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-undo.1",
    "content": ".\\\" generated with Ronn/v0.7.3\n.\\\" http://github.com/rtomayko/ronn/tree/0.7.3\n.\n.TH \"GIT\\-UNDO\" \"1\" \"June 2018\" \"\" \"Git Extras\"\n.\n.SH \"NAME\"\n\\fBgit\\-undo\\fR \\- Remove latest commits\n.\n.SH \"SYNOPSIS\"\n\\fBgit\\-undo\\fR [\\-s, \\-\\-soft, \\-h, \\-\\-hard] [<commitcount>]\n.\n.SH \"DESCRIPTION\"\nRemoves the latest commits\\.\n.\n.SH \"OPTIONS\"\n\\-\\-soft or \\-s\n.\n.P\nRolls back the commit(s) but leaves the changes in the staging area\\.\n.\n.P\n\\-\\-hard or \\-h\n.\n.P\nThis option wipes your commit(s), so that your changes cannot be recovered\\. Use with care\\. To avoid being confused with \\fB\\-\\-help\\fR, there will be a confirmation when \\fB\\-h\\fR is specified\\.\n.\n.P\n<commitcount>\n.\n.P\nNumber of commits to remove\\. Defaults to \\fI1\\fR, thus remove the latest commit\\.\n.\n.SH \"EXAMPLES\"\nRemoves the latest commit\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git undo\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nRemoves the latest commit, restoring the staging area\\.\n.\n.IP \"\" 4\n.\n.nf\n\n$ git undo \\-s\n.\n.fi\n.\n.IP \"\" 0\n.\n.P\nRemove the latest 3 commits:\n.\n.IP \"\" 4\n.\n.nf\n\n$ git undo 3\n.\n.fi\n.\n.IP \"\" 0\n.\n.SH \"AUTHOR\"\nWritten by Kenneth Reitz <\\fIme@kennethreitz\\.com\\fR> and Nick Lombard <\\fIgithub@jigsoft\\.co\\.za\\fR>\n.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-undo.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' value='text/html;charset=utf8'>\n  <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>\n  <title>git-undo(1) - Remove latest commits</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-undo(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-undo(1)</li>\n  </ol>\n\n  <h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-undo</code> - <span class=\"man-whatis\">Remove latest commits</span>\n</p>\n\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-undo</code> [-s, --soft, -h, --hard] [&lt;commitcount&gt;]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>  Removes the latest commits.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>  --soft or -s</p>\n\n<p>  Rolls back the commit(s) but leaves the changes in the staging area.</p>\n\n<p>  --hard or -h</p>\n\n<p>  This option wipes your commit(s), so that your changes cannot be recovered. Use with care.\n  To avoid being confused with <code>--help</code>, there will be a confirmation when <code>-h</code> is specified.</p>\n\n<p>  &lt;commitcount&gt;</p>\n\n<p>  Number of commits to remove. Defaults to <em>1</em>, thus remove the latest commit.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>  Removes the latest commit.</p>\n\n<pre><code>$ git undo\n</code></pre>\n\n<p>  Removes the latest commit, restoring the staging area.</p>\n\n<pre><code>$ git undo -s\n</code></pre>\n\n<p>  Remove the latest 3 commits:</p>\n\n<pre><code>$ git undo 3\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Kenneth Reitz &lt;<a href=\"&#109;&#97;&#105;&#108;&#116;&#111;&#x3a;&#x6d;&#x65;&#64;&#107;&#101;&#x6e;&#x6e;&#101;&#116;&#104;&#114;&#101;&#105;&#116;&#x7a;&#x2e;&#x63;&#111;&#109;\" data-bare-link=\"true\">&#x6d;&#x65;&#x40;&#x6b;&#101;&#110;&#x6e;&#101;&#116;&#x68;&#x72;&#101;&#105;&#116;&#122;&#46;&#99;&#x6f;&#109;</a>&gt; and Nick Lombard &lt;<a href=\"&#109;&#x61;&#105;&#108;&#x74;&#111;&#x3a;&#x67;&#x69;&#116;&#x68;&#x75;&#x62;&#64;&#x6a;&#105;&#x67;&#x73;&#111;&#x66;&#x74;&#x2e;&#99;&#x6f;&#46;&#122;&#x61;\" data-bare-link=\"true\">&#103;&#105;&#x74;&#104;&#117;&#98;&#64;&#x6a;&#105;&#103;&#115;&#x6f;&#102;&#116;&#46;&#x63;&#x6f;&#46;&#122;&#97;</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>June 2018</li>\n    <li class='tr'>git-undo(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-undo.md",
    "content": "git-undo(1) -- Remove latest commits\n====================================\n\n## SYNOPSIS\n\n`git-undo` [-s, --soft, -h, --hard] [&lt;commitcount&gt;]\n\n## DESCRIPTION\n\n  Removes the latest commits.\n\n## OPTIONS\n\n  --soft or -s\n\n  Rolls back the commit(s) but leaves the changes in the staging area.\n\n  --hard or -h\n\n  This option wipes your commit(s), so that your changes cannot be recovered. Use with care.\n  To avoid being confused with `--help`, there will be a confirmation when `-h` is specified.\n\n  &lt;commitcount&gt;\n\n  Number of commits to remove. Defaults to *1*, thus remove the latest commit.\n\n## EXAMPLES\n\n  Removes the latest commit.\n\n    $ git undo\n\n  Removes the latest commit, restoring the staging area.\n\n    $ git undo -s\n\n  Remove the latest 3 commits:\n\n    $ git undo 3\n\n## AUTHOR\n\nWritten by Kenneth Reitz &lt;<me@kennethreitz.com>&gt; and Nick Lombard &lt;<github@jigsoft.co.za>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-unlock.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-UNLOCK\" \"1\" \"December 2021\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-unlock\\fR \\- Unlock a file excluded from version control\n.SH \"SYNOPSIS\"\n\\fBgit\\-unlock\\fR <filename>\n.SH \"DESCRIPTION\"\nUnlock local files from version control\\.\n.SH \"OPTIONS\"\n<filename>\n.P\nThe name of the filename\\.\n.SH \"EXAMPLES\"\n.nf\n$ git unlock config/database\\.yml\n.fi\n.SH \"AUTHOR\"\nWritten by Julio Napuri <\\fIjulionc@gmail\\.com\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-unlock.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-unlock(1) - Unlock a file excluded from version control</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-unlock(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-unlock(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-unlock</code> - <span class=\"man-whatis\">Unlock a file excluded from version control</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-unlock</code> &lt;filename&gt;</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Unlock local files from version control.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>&lt;filename&gt;</p>\n\n<p>The name of the filename.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<pre><code>$ git unlock config/database.yml\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Julio Napuri &lt;<a href=\"mailto:julionc@gmail.com\" data-bare-link=\"true\">julionc@gmail.com</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>December 2021</li>\n    <li class='tr'>git-unlock(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-unlock.md",
    "content": "git-unlock(1) -- Unlock a file excluded from version control\n============================================================\n\n## SYNOPSIS\n\n`git-unlock` &lt;filename&gt;\n\n## DESCRIPTION\n\n  Unlock local files from version control.\n\n## OPTIONS\n\n  &lt;filename&gt;\n\n  The name of the filename.\n\n## EXAMPLES\n\n    $ git unlock config/database.yml\n\n## AUTHOR\n\nWritten by Julio Napuri &lt;<julionc@gmail.com>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-unwip.1",
    "content": ".\\\" generated with Ronn-NG/v0.10.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.10.1\n.TH \"GIT\\-UNWIP\" \"1\" \"May 2025\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-unwip\\fR \\- Undo a Work In Progress commit\n.SH \"SYNOPSIS\"\n\\fBgit\\-unwip\\fR\n.SH \"DESCRIPTION\"\nUndo a Work In Progress commit\\.\n.SH \"OPTIONS\"\nNone\n.SH \"EXAMPLES\"\nCreate a WIP commit which stores all changes in the working directory\\.\n.IP \"\" 4\n.nf\n$ git wip\n.fi\n.IP \"\" 0\n.P\nLater on, undo the commit and continue making changes\\.\n.IP \"\" 4\n.nf\n$ git unwip\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Andrew Sullivan Cant <\\fImail@andrewsullivancant\\.ca\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-unwip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\n  <title>git-unwip(1) - Undo a Work In Progress commit</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-unwip(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-unwip(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-unwip</code> - <span class=\"man-whatis\">Undo a Work In Progress commit</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-unwip</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Undo a Work In Progress commit.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>None</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Create a WIP commit which stores all changes in the working directory.</p>\n\n<pre><code>$ git wip\n</code></pre>\n\n<p>Later on, undo the commit and continue making changes.</p>\n\n<pre><code>$ git unwip\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Andrew Sullivan Cant &lt;<a href=\"mailto:mail@andrewsullivancant.ca\" data-bare-link=\"true\">mail@andrewsullivancant.ca</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2025</li>\n    <li class='tr'>git-unwip(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-unwip.md",
    "content": "git-unwip(1) -- Undo a Work In Progress commit\n================================\n\n## SYNOPSIS\n\n`git-unwip`\n\n## DESCRIPTION\n\n  Undo a Work In Progress commit.\n\n## OPTIONS\n\n  None\n\n## EXAMPLES\n\n  Create a WIP commit which stores all changes in the working directory.\n\n    $ git wip\n\n  Later on, undo the commit and continue making changes.\n\n    $ git unwip\n\n## AUTHOR\n\nWritten by Andrew Sullivan Cant &lt;<mail@andrewsullivancant.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-utimes.1",
    "content": ".\\\" generated with Ronn-NG/v0.9.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.9.1\n.TH \"GIT\\-UTIMES\" \"1\" \"May 2022\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-utimes\\fR \\- Change files modification time to their last commit date\n.SH \"SYNOPSIS\"\n\\fBgit\\-utimes\\fR [\\-\\-newer]\n.SH \"DESCRIPTION\"\nChange files modification time to their last commit date\\. Does not touch files that are in the working tree or index\\.\n.SH \"OPTIONS\"\n\\-\\-newer\n.P\nPreserves the original modification time of files that were committed from the local repo, by only touching files that are newer than their last commit date\\.\n.SH \"EXAMPLES\"\nUpdate all files' modification time to their last commit date, except those in working tree or index:\n.IP \"\" 4\n.nf\n$ git utimes\n.fi\n.IP \"\" 0\n.P\nAs above, but preserve original modification time of files that were committed from local repo:\n.IP \"\" 4\n.nf\n$ git utimes \\-\\-newer\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Vitaly Chikunov <\\fIvt@altlinux\\.org\\fR>, inspired by Stackexchange comments\\. Updated by Bill Wood <\\fIwpwoodjr@gmail\\.com\\fR> to add \\fB\\-\\-newer\\fR flag and ignore files in the working tree or index\\.\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-utimes.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf8'>\n  <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'>\n  <title>git-utimes(1) - Change files modification time to their last commit date</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-utimes(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-utimes(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-utimes</code> - <span class=\"man-whatis\">Change files modification time to their last commit date</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-utimes</code> [--newer]</p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Change files modification time to their last commit date. Does not touch files that are in the working tree or index.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>--newer</p>\n\n<p>Preserves the original modification time of files that were committed from the local repo, by only touching files that are newer than their last commit date.</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Update all files' modification time to their last commit date, except those in working tree or index:</p>\n\n<pre><code>$ git utimes\n</code></pre>\n\n<p>As above, but preserve original modification time of files that were committed from local repo:</p>\n\n<pre><code>$ git utimes --newer\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Vitaly Chikunov &lt;<a href=\"mailto:vt@altlinux.org\" data-bare-link=\"true\">vt@altlinux.org</a>&gt;, inspired by Stackexchange comments. Updated by Bill Wood &lt;<a href=\"mailto:wpwoodjr@gmail.com\" data-bare-link=\"true\">wpwoodjr@gmail.com</a>&gt; to add <code>--newer</code> flag and ignore files in the working tree or index.</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2022</li>\n    <li class='tr'>git-utimes(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-utimes.md",
    "content": "git-utimes(1) -- Change files modification time to their last commit date\n=========================================================================\n\n## SYNOPSIS\n\n`git-utimes` [--newer]\n\n## DESCRIPTION\n\n  Change files modification time to their last commit date. Does not touch files that are in the working tree or index.\n\n## OPTIONS\n\n  --newer\n\n  Preserves the original modification time of files that were committed from the local repo, by only touching files that are newer than their last commit date.\n\n## EXAMPLES\n\nUpdate all files' modification time to their last commit date, except those in working tree or index:\n\n    $ git utimes\n\nAs above, but preserve original modification time of files that were committed from local repo:\n\n    $ git utimes --newer\n\n## AUTHOR\n\nWritten by Vitaly Chikunov &lt;<vt@altlinux.org>&gt;, inspired by Stackexchange comments. Updated by Bill Wood &lt;<wpwoodjr@gmail.com>&gt; to add `--newer` flag and ignore files in the working tree or index.\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/git-wip.1",
    "content": ".\\\" generated with Ronn-NG/v0.10.1\n.\\\" http://github.com/apjanke/ronn-ng/tree/0.10.1\n.TH \"GIT\\-WIP\" \"1\" \"May 2025\" \"\" \"Git Extras\"\n.SH \"NAME\"\n\\fBgit\\-wip\\fR \\- Create a Work In Progress commit\n.SH \"SYNOPSIS\"\n\\fBgit\\-wip\\fR\n.SH \"DESCRIPTION\"\nCreate a Work In Progress commit, include all files in the working directory\\.\n.SH \"OPTIONS\"\nNone\n.SH \"EXAMPLES\"\nCreate a WIP commit which stores all changes in the working directory\\.\n.IP \"\" 4\n.nf\n$ git wip\n.fi\n.IP \"\" 0\n.P\nLater on, undo the commit and continue making changes\\.\n.IP \"\" 4\n.nf\n$ git unwip\n.fi\n.IP \"\" 0\n.SH \"AUTHOR\"\nWritten by Andrew Sullivan Cant <\\fImail@andrewsullivancant\\.ca\\fR>\n.SH \"REPORTING BUGS\"\n<\\fIhttps://github\\.com/tj/git\\-extras/issues\\fR>\n.SH \"SEE ALSO\"\n<\\fIhttps://github\\.com/tj/git\\-extras\\fR>\n"
  },
  {
    "path": "man/git-wip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta http-equiv='content-type' content='text/html;charset=utf-8'>\n  <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'>\n  <title>git-wip(1) - Create a Work In Progress commit</title>\n  <style type='text/css' media='all'>\n  /* style: man */\n  body#manpage {margin:0}\n  .mp {max-width:100ex;padding:0 9ex 1ex 4ex}\n  .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}\n  .mp h2 {margin:10px 0 0 0}\n  .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}\n  .mp h3 {margin:0 0 0 4ex}\n  .mp dt {margin:0;clear:left}\n  .mp dt.flush {float:left;width:8ex}\n  .mp dd {margin:0 0 0 9ex}\n  .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}\n  .mp pre {margin-bottom:20px}\n  .mp pre+h2,.mp pre+h3 {margin-top:22px}\n  .mp h2+pre,.mp h3+pre {margin-top:5px}\n  .mp img {display:block;margin:auto}\n  .mp h1.man-title {display:none}\n  .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}\n  .mp h2 {font-size:16px;line-height:1.25}\n  .mp h1 {font-size:20px;line-height:2}\n  .mp {text-align:justify;background:#fff}\n  .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}\n  .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}\n  .mp u {text-decoration:underline}\n  .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}\n  .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}\n  .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}\n  .mp b.man-ref {font-weight:normal;color:#434241}\n  .mp pre {padding:0 4ex}\n  .mp pre code {font-weight:normal;color:#434241}\n  .mp h2+pre,h3+pre {padding-left:0}\n  ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}\n  ol.man-decor {width:100%}\n  ol.man-decor li.tl {text-align:left}\n  ol.man-decor li.tc {text-align:center;letter-spacing:4px}\n  ol.man-decor li.tr {text-align:right;float:right}\n  </style>\n</head>\n<!--\n  The following styles are deprecated and will be removed at some point:\n  div#man, div#man ol.man, div#man ol.head, div#man ol.man.\n\n  The .man-page, .man-decor, .man-head, .man-foot, .man-title, and\n  .man-navigation should be used instead.\n-->\n<body id='manpage'>\n  <div class='mp' id='man'>\n\n  <div class='man-navigation' style='display:none'>\n    <a href=\"#NAME\">NAME</a>\n    <a href=\"#SYNOPSIS\">SYNOPSIS</a>\n    <a href=\"#DESCRIPTION\">DESCRIPTION</a>\n    <a href=\"#OPTIONS\">OPTIONS</a>\n    <a href=\"#EXAMPLES\">EXAMPLES</a>\n    <a href=\"#AUTHOR\">AUTHOR</a>\n    <a href=\"#REPORTING-BUGS\">REPORTING BUGS</a>\n    <a href=\"#SEE-ALSO\">SEE ALSO</a>\n  </div>\n\n  <ol class='man-decor man-head man head'>\n    <li class='tl'>git-wip(1)</li>\n    <li class='tc'>Git Extras</li>\n    <li class='tr'>git-wip(1)</li>\n  </ol>\n\n  \n\n<h2 id=\"NAME\">NAME</h2>\n<p class=\"man-name\">\n  <code>git-wip</code> - <span class=\"man-whatis\">Create a Work In Progress commit</span>\n</p>\n<h2 id=\"SYNOPSIS\">SYNOPSIS</h2>\n\n<p><code>git-wip</code></p>\n\n<h2 id=\"DESCRIPTION\">DESCRIPTION</h2>\n\n<p>Create a Work In Progress commit, include all files in the working directory.</p>\n\n<h2 id=\"OPTIONS\">OPTIONS</h2>\n\n<p>None</p>\n\n<h2 id=\"EXAMPLES\">EXAMPLES</h2>\n\n<p>Create a WIP commit which stores all changes in the working directory.</p>\n\n<pre><code>$ git wip\n</code></pre>\n\n<p>Later on, undo the commit and continue making changes.</p>\n\n<pre><code>$ git unwip\n</code></pre>\n\n<h2 id=\"AUTHOR\">AUTHOR</h2>\n\n<p>Written by Andrew Sullivan Cant &lt;<a href=\"mailto:mail@andrewsullivancant.ca\" data-bare-link=\"true\">mail@andrewsullivancant.ca</a>&gt;</p>\n\n<h2 id=\"REPORTING-BUGS\">REPORTING BUGS</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras/issues\" data-bare-link=\"true\">https://github.com/tj/git-extras/issues</a>&gt;</p>\n\n<h2 id=\"SEE-ALSO\">SEE ALSO</h2>\n\n<p>&lt;<a href=\"https://github.com/tj/git-extras\" data-bare-link=\"true\">https://github.com/tj/git-extras</a>&gt;</p>\n\n  <ol class='man-decor man-foot man foot'>\n    <li class='tl'></li>\n    <li class='tc'>May 2025</li>\n    <li class='tr'>git-wip(1)</li>\n  </ol>\n\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "man/git-wip.md",
    "content": "git-wip(1) -- Create a Work In Progress commit\n================================\n\n## SYNOPSIS\n\n`git-wip`\n\n## DESCRIPTION\n\n  Create a Work In Progress commit, include all files in the working directory.\n\n## OPTIONS\n\n  None\n\n## EXAMPLES\n\n  Create a WIP commit which stores all changes in the working directory.\n\n    $ git wip\n\n  Later on, undo the commit and continue making changes.\n\n    $ git unwip\n\n## AUTHOR\n\nWritten by Andrew Sullivan Cant &lt;<mail@andrewsullivancant.ca>&gt;\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "man/index.txt",
    "content": "# manuals\ngit-abort(1) git-abort\ngit-alias(1) git-alias\ngit-archive-file(1) git-archive-file\ngit-authors(1) git-authors\ngit-browse-ci(1) git-browse-ci\ngit-browse(1) git-browse\ngit-brv(1) git-brv\ngit-bulk(1) git-bulk\ngit-changelog(1) git-changelog\ngit-clear-soft(1) git-clear-soft\ngit-clear(1) git-clear\ngit-coauthor(1) git-coauthor\ngit-commits-since(1) git-commits-since\ngit-continue(1) git-continue\ngit-contrib(1) git-contrib\ngit-count(1) git-count\ngit-cp(1) git-cp\ngit-create-branch(1) git-create-branch\ngit-delete-branch(1) git-delete-branch\ngit-delete-merged-branches(1) git-delete-merged-branches\ngit-delete-squashed-branches(1) git-delete-squashed-branches\ngit-delete-submodule(1) git-delete-submodule\ngit-delete-tag(1) git-delete-tag\ngit-delta(1) git-delta\ngit-effort(1) git-effort\ngit-extras(1) git-extras\ngit-feature(1) git-feature\ngit-force-clone(1) git-force-clone\ngit-fork(1) git-fork\ngit-fresh-branch(1) git-fresh-branch\ngit-get(1) git-get\ngit-gh-pages(1) git-gh-pages\ngit-graft(1) git-graft\ngit-guilt(1) git-guilt\ngit-ignore-io(1) git-ignore-io\ngit-ignore(1) git-ignore\ngit-info(1) git-info\ngit-local-commits(1) git-local-commits\ngit-lock(1) git-lock\ngit-locked(1) git-locked\ngit-magic(1) git-magic\ngit-merge-into(1) git-merge-into\ngit-merge-repo(1) git-merge-repo\ngit-missing(1) git-missing\ngit-mr(1) git-mr\ngit-obliterate(1) git-obliterate\ngit-paste(1) git-paste\ngit-pr(1) git-pr\ngit-psykorebase(1) git-psykorebase\ngit-pull-request(1) git-pull-request\ngit-reauthor(1) git-reauthor\ngit-rebase-patch(1) git-rebase-patch\ngit-release(1) git-release\ngit-rename-branch(1) git-rename-branch\ngit-rename-file(1) git-rename-file\ngit-rename-remote(1) git-rename-remote\ngit-rename-tag(1) git-rename-tag\ngit-repl(1) git-repl\ngit-reset-file(1) git-reset-file\ngit-root(1) git-root\ngit-scp(1) git-scp\ngit-sed(1) git-sed\ngit-setup(1) git-setup\ngit-show-merged-branches(1) git-show-merged-branches\ngit-show-tree(1) git-show-tree\ngit-show-unmerged-branches(1) git-show-unmerged-branches\ngit-squash(1) git-squash\ngit-stamp(1) git-stamp\ngit-standup(1) git-standup\ngit-summary(1) git-summary\ngit-sync(1) git-sync\ngit-touch(1) git-touch\ngit-undo(1) git-undo\ngit-unlock(1) git-unlock\ngit-unwip(1) git-unwip\ngit-utimes(1) git-utimes\ngit-wip(1) git-wip\n"
  },
  {
    "path": "man/man-template.md",
    "content": "<NAME>(1) -- <short description>\n================================\n\n## SYNOPSIS\n\n`<NAME>` [OPTIONS]\n\n## DESCRIPTION\n\n## OPTIONS\n\n## EXAMPLES\n\n## AUTHOR\n\nWritten by <AUTHOR> <EMAIL> [and <SECOND_AUTHOR> <EMAIL>]\n\n## REPORTING BUGS\n\n&lt;<https://github.com/tj/git-extras/issues>&gt;\n\n## SEE ALSO\n\n&lt;<https://github.com/tj/git-extras>&gt;\n"
  },
  {
    "path": "need_git_commit",
    "content": "# A list of the commands in alphabetical order that require has_git_commit(),\n# and should have it included in the \"built\" version of the command\ngit-authors\ngit-changelog\ngit-commits-since\ngit-count\ngit-effort\ngit-local-commits\ngit-reauthor\ngit-stamp\ngit-summary\ngit-undo\n"
  },
  {
    "path": "not_need_git_repo",
    "content": "# A list of the commands in alphabetical order that do not use is_git_repo(),\n# and should not have it included in the \"built\" version of the command\ngit-alias\ngit-bulk\ngit-extras\ngit-force-clone\ngit-fork\ngit-get\ngit-ignore\ngit-setup\ngit-standup\n"
  },
  {
    "path": "scripts/checkstyle.py",
    "content": "#!/usr/bin/env python3\nimport re\nimport os\nimport argparse\nfrom pathlib import Path\nfrom typing import Callable, List, Dict, Any # compat\n\n# This file checks Bash and Shell scripts for violations not found with\n# shellcheck or existing methods. You can use it in several ways:\n#\n# Lint all .bash, .sh, .bats files along with 'bin/asdf' and print out violations:\n# $ ./scripts/checkstyle.py\n#\n# The former, but also fix all violations. This must be ran until there\n# are zero violations since any line can have more than one violation:\n# $ ./scripts/checkstyle.py --fix\n#\n# Lint a particular file:\n# $ ./scripts/checkstyle.py ./lib/functions/installs.bash\n#\n# Check to ensure all regular expressions are working as intended:\n# $ ./scripts/checkstyle.py --internal-test-regex\n\nRule = Dict[str, Any]\n\nclass c:\n    RED = '\\033[91m'\n    GREEN = '\\033[92m'\n    YELLOW = '\\033[93m'\n    BLUE = '\\033[94m'\n    MAGENTA = '\\033[95m'\n    CYAN = '\\033[96m'\n    RESET = '\\033[0m'\n    BOLD = '\\033[1m'\n    UNDERLINE = '\\033[4m'\n    LINK: Callable[[str, str], str] = lambda href, text: f'\\033]8;;{href}\\a{text}\\033]8;;\\a'\n\ndef utilGetStrs(line: Any, m: Any):\n    return (\n        line[0:m.start('match')],\n        line[m.start('match'):m.end('match')],\n        line[m.end('match'):]\n    )\n\n# Before: printf '%s\\\\n' '^w^'\n# After: printf '%s\\n' '^w^'\ndef noDoubleBackslashFixer(line: str, m: Any) -> str:\n    prestr, midstr, poststr = utilGetStrs(line, m)\n\n    return f'{prestr}{midstr[1:]}{poststr}'\n\n# Before: $(pwd)\n# After: $PWD\ndef noPwdCaptureFixer(line: str, m: Any) -> str:\n    prestr, _, poststr = utilGetStrs(line, m)\n\n    return f'{prestr}$PWD{poststr}'\n\n# Before: [ a == b ]\n# After: [ a = b ]\ndef noTestDoubleEqualsFixer(line: str, m: Any) -> str:\n    prestr, _, poststr = utilGetStrs(line, m)\n\n    return f'{prestr}={poststr}'\n\n# Before: function fn() { ...\n# After: fn() { ...\n# ---\n# Before: function fn { ...\n# After fn() { ...\ndef noFunctionKeywordFixer(line: str, m: Any) -> str:\n    prestr, midstr, poststr = utilGetStrs(line, m)\n\n    midstr = midstr.strip()\n    midstr = midstr[len('function'):]\n    midstr = midstr.strip()\n\n    parenIdx = midstr.find('(')\n    if parenIdx != -1:\n        midstr = midstr[:parenIdx]\n\n    return f'{prestr}{midstr}() {poststr}'\n\n# Before: >/dev/null 2>&1\n# After: &>/dev/null\n# ---\n# Before: 2>/dev/null 1>&2\n# After: &>/dev/null\ndef noVerboseRedirectionFixer(line: str, m: Any) -> str:\n    prestr, _, poststr = utilGetStrs(line, m)\n\n    return f'{prestr}&>/dev/null{poststr}'\n\ndef lintfile(file: Path, rules: List[Rule], options: Dict[str, Any]):\n    content_arr = file.read_text().split('\\n')\n\n    for line_i, line in enumerate(content_arr):\n        if 'checkstyle-ignore' in line:\n            continue\n\n        for rule in rules:\n            should_run = False\n            if 'sh' in rule['fileTypes']:\n                if file.name.endswith('.sh'):\n                    should_run = True\n            if 'bash' in rule['fileTypes']:\n                if file.name.endswith('.bash') or file.name.endswith('.bats') or file.name.startswith('git-'):\n                    should_run = True\n\n            if options['verbose']:\n                print(f'{str(file)}: {should_run}')\n\n            if not should_run:\n                continue\n\n            m = re.search(rule['regex'], line)\n            if m is not None and m.group('match') is not None:\n                dir = os.path.relpath(file.resolve(), Path.cwd())\n                prestr = line[0:m.start('match')]\n                midstr = line[m.start('match'):m.end('match')]\n                poststr = line[m.end('match'):]\n\n                print(f'{c.CYAN}{dir}{c.RESET}:{line_i + 1}')\n                print(f'{c.MAGENTA}{rule[\"name\"]}{c.RESET}: {rule[\"reason\"]}')\n                print(f'{prestr}{c.RED}{midstr}{c.RESET}{poststr}')\n                print()\n\n                if options['fix']:\n                    content_arr[line_i] = rule['fixerFn'](line, m)\n\n                rule['found'] += 1\n\n    if options['fix']:\n        file.write_text('\\n'.join(content_arr))\n\ndef main():\n    rules: List[Rule] = [\n        {\n            'name': 'no-pwd-capture',\n            'regex': '(?P<match>\\\\$\\\\(pwd\\\\))',\n            'reason': '$PWD is essentially equivalent to $(pwd) without the overhead of a subshell',\n            'fileTypes': ['bash', 'sh'],\n            'fixerFn': noPwdCaptureFixer,\n            'testPositiveMatches': [\n                '$(pwd)'\n            ],\n            'testNegativeMatches': [\n                '$PWD'\n            ],\n        },\n        {\n            'name': 'no-test-double-equals',\n            'regex': '(?<!\\\\[)\\\\[ (?:[^]]|](?=}))*?(?P<match>==).*?]',\n            'reason': 'Disallow double equals in places where they are not necessary for consistency',\n            'fileTypes': ['bash', 'sh'],\n            'fixerFn': noTestDoubleEqualsFixer,\n            'testPositiveMatches': [\n                '[ a == b ]',\n                '[ \"${lines[0]}\" == blah ]',\n            ],\n            'testNegativeMatches': [\n                '[ a = b ]',\n                '[[ a = b ]]',\n                '[[ a == b ]]',\n                '[ a = b ] || [[ a == b ]]',\n                '[[ a = b ]] || [[ a == b ]]',\n                '[[ \"${lines[0]}\" == \\'usage: \\'* ]]',\n                '[ \"${lines[0]}\" = blah ]',\n            ],\n        },\n        {\n            'name': 'no-function-keyword',\n            'regex': '^[ \\\\t]*(?P<match>function .*?(?:\\\\([ \\\\t]*\\\\))?[ \\\\t]*){',\n            'reason': 'Only allow functions declared like `fn_name() {{ :; }}` for consistency (see ' + c.LINK('https://www.shellcheck.net/wiki/SC2113', 'ShellCheck SC2113') + ')',\n            'fileTypes': ['bash', 'sh'],\n            'fixerFn': noFunctionKeywordFixer,\n            'testPositiveMatches': [\n                'function fn() { :; }',\n                'function fn { :; }',\n            ],\n            'testNegativeMatches': [\n                'fn() { :; }',\n            ],\n        },\n        {\n            'name': 'no-verbose-redirection',\n            'regex': '(?P<match>(>/dev/null 2>&1|2>/dev/null 1>&2))',\n            'reason': 'Use `&>/dev/null` instead of `>/dev/null 2>&1` or `2>/dev/null 1>&2` for consistency',\n            'fileTypes': ['bash'],\n            'fixerFn': noVerboseRedirectionFixer,\n            'testPositiveMatches': [\n                'echo woof >/dev/null 2>&1',\n                'echo woof 2>/dev/null 1>&2',\n            ],\n            'testNegativeMatches': [\n                'echo woof &>/dev/null',\n                'echo woof >&/dev/null',\n            ],\n        },\n    ]\n    [rule.update({ 'found': 0 }) for rule in rules]\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('files', metavar='FILES', nargs='*')\n    parser.add_argument('--fix', action='store_true')\n    parser.add_argument('--verbose', action='store_true')\n    parser.add_argument('--internal-test-regex', action='store_true')\n    args = parser.parse_args()\n\n    if args.internal_test_regex:\n        for rule in rules:\n            for positiveMatch in rule['testPositiveMatches']:\n                m: Any = re.search(rule['regex'], positiveMatch)\n                if m is None or m.group('match') is None:\n                    print(f'{c.MAGENTA}{rule[\"name\"]}{c.RESET}: Failed {c.CYAN}positive{c.RESET} test:')\n                    print(f'=> {positiveMatch}')\n                    print()\n\n            for negativeMatch in rule['testNegativeMatches']:\n                m: Any = re.search(rule['regex'], negativeMatch)\n                if m is not None and m.group('match') is not None:\n                    print(f'{c.MAGENTA}{rule[\"name\"]}{c.RESET}: Failed {c.YELLOW}negative{c.RESET} test:')\n                    print(f'=> {negativeMatch}')\n                    print()\n        print('Done.')\n        return\n\n    options = {\n        'fix': args.fix,\n        'verbose': args.verbose,\n    }\n\n    # parse files and print matched lints\n    if len(args.files) > 0:\n        for file in args.files:\n            p = Path(file)\n            if p.is_file():\n                lintfile(p, rules, options)\n    else:\n        for file in Path.cwd().glob('**/*'):\n            if '.git' in str(file.absolute()):\n                continue\n\n            if file.is_file():\n                lintfile(file, rules, options)\n\n    # print final results\n    print(f'{c.UNDERLINE}TOTAL ISSUES{c.RESET}')\n    for rule in rules:\n        print(f'{c.MAGENTA}{rule[\"name\"]}{c.RESET}: {rule[\"found\"]}')\n\n    grand_total = sum([rule['found'] for rule in rules])\n    print(f'GRAND TOTAL: {grand_total}')\n    print(f'{c.BOLD}{c.YELLOW}NOTE:{c.RESET} Run \"./scripts/checkstyle.py --fix\" to automatically fix all issues (may need to run multiple times)')\n\n    # exit\n    if grand_total == 0:\n        exit(0)\n    else:\n        exit(2)\n\nmain()\n"
  },
  {
    "path": "tests/README.md",
    "content": "# Testing\n\nOriginally, the tests were written in pytest. However, tests are in the process of being converted to Bats so coverage can be calculated.\n\n## Bats Testing\n\nWe require a somewhat recent version of Bats. Version v1.8.1 is tested in CI. Once it is installed, the tests can be executed like so:\n\n```sh\nbats ./tests\n```\n\nWe highly recommend adding tests for new features and fixes.\n\n### Code Coverage\n\nCoverage can be calculated with [bashcov](https://github.com/infertux/bashcov) like so:\n\n```sh\nbashcov -- bats ./tests\n```\n\nBy default, the report will be generated in `./coverage/index.html`.\n\n## Python Testing\n\nThe test part depends on:\n\n* python >= 3.11\n* poetry >= 1.8.0\n* pytest >= 8.1.2\n* gitpython >= 3.1.43\n\nSo the versions are higher than above is recommended.\n\n### How to run the tests\n\n1. Install `poetry`\n2. Install the dependencies via `poetry install`\n3. Run `poetry run pytest`\n\nIt is done or go without `poetry`,\n\n1. Install python >= 3.11\n2. Install pytest >= 8.1.2\n3. Install gitpython >= 3.1.43\n4. Install testpath >= 0.6.0\n5. Run `pytest`\n\nThe second way maybe blocked the some missing dependencies at someday, so the first one is recommended.\n\n### What and how to create a unit test\n\nOne command has a unit test, because one `git-*` command is just do one thing, so we can eat a piece of `git-*` command in one time.\n\nFor example,\n\n1. The `git-alias` should have a test suite, so create `test_git_alias.py` in the directory `test`\n2. Create a test class `TestGitAlias` in the `test_git_alias.py`\n3. Create a test case `test_init`, and some test fixtures can be used, `temp_repo`, `named_temp_repo` etc.\n    * `temp_repo` is module scoped fixture which create a temporary directory and available in the test suite `test_git_alias.py`.\n    * `named_temp_repo` is just same as `temp_repo` except the custom directory renaming.\n4. Loop the third step until the 100% coverage of the function of the `git-alias`\n\n### References\n\n* [poetry](https://github.com/python-poetry/poetry)\n* [pytest](https://github.com/pytest-dev/pytest/)\n* [git python](https://github.com/gitpython-developers/GitPython)\n"
  },
  {
    "path": "tests/bin/open",
    "content": "#!/usr/bin/env bash\nprintf '%s\\n' \"open $*\"\n"
  },
  {
    "path": "tests/bin/start",
    "content": "#!/usr/bin/env bash\nprintf '%s\\n' \"start $*\"\n"
  },
  {
    "path": "tests/bin/xdg-open",
    "content": "#!/usr/bin/env bash\nprintf '%s\\n' \"xdg-open $*\"\n"
  },
  {
    "path": "tests/conftest.py",
    "content": "# Sharing fixtures\n# Ref: https://docs.pytest.org/en/6.2.x/fixture.html#scope-sharing-fixtures-across-classes-modules-packages-or-session\n\nimport pytest\nfrom helper import TempRepository\n\n\ndef create_repo(dirname=None):\n    repo = TempRepository(dirname)\n    repo.create_tmp_file()  # tmp_file_a\n    repo.create_tmp_file()  # tmp_file_b\n    repo.switch_cwd_under_repo()\n    return repo\n\n\ndef init_repo_git_status(repo):\n    git = repo.get_repo_git()\n    git.add(\".\")\n    git.config(\"--local\", \"user.name\", \"test\")\n    git.config(\"--local\", \"user.email\", \"test@git-extras.com\")\n    git.commit(\"-m\", \"chore: initial commit\")\n\n\n@pytest.fixture(scope=\"module\")\ndef temp_repo():\n    repo = create_repo()\n    init_repo_git_status(repo)\n    return repo\n\n\n@pytest.fixture(scope=\"module\")\ndef named_temp_repo(request):\n    dirname = request.param\n    repo = create_repo(dirname)\n    init_repo_git_status(repo)\n    yield repo\n    repo.teardown()\n\n\n@pytest.fixture(scope=\"function\")\ndef temp_repo_clean():\n    \"\"\"Create a temporary repository that is reset for each function call.\"\"\"\n    repo = create_repo()\n    init_repo_git_status(repo)\n    return repo\n"
  },
  {
    "path": "tests/git-abort.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\tgit commit --allow-empty -m \"Initial commit\"\n\tgit branch A\n\tgit branch B\n\tgit checkout A\n\tprintf '%s\\n' 'a' > tmpfile\n\tgit add .\n\tgit commit -m A\n\tgit checkout B\n\tprintf '%s\\n' 'b' > tmpfile\n\tgit add .\n\tgit commit -m B\n\tgit status\n}\n\n@test \"works with cherry pick\" {\n\trun git cherry-pick A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'You are currently cherry-picking commit'\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\trun git abort\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with merge\" {\n\trun git merge A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'You have unmerged paths'\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\trun git abort\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with rebase\" {\n\trun git rebase A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'You are currently rebasing branch'\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\trun git abort\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with revert\" {\n\trun git revert A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'You are currently reverting commit'\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\trun git abort\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n"
  },
  {
    "path": "tests/git-alias.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\tgit config --global alias.globalalias status\n\tgit config --global alias.x status\n\tgit config --local alias.localalias status\n\tgit config --local alias.y status\n}\n\n@test \"list all works\" {\n\trun git alias\n\tassert_output - <<-'EOF'\n\tglobalalias = status\n\tlocalalias = status\n\tx = status\n\ty = status\nEOF\n\tassert_success\n}\n\n@test \"list all globally works\" {\n\trun git alias --global\n\tassert_output - <<-'EOF'\n\tglobalalias = status\n\tx = status\nEOF\n\tassert_success\n}\n\n@test \"list all locally works\" {\n\trun git alias --local\n\tassert_output - <<-'EOF'\n\tlocalalias = status\n\ty = status\nEOF\n\tassert_success\n}\n\n@test \"search globally works\" {\n\trun git alias --global global\n\tassert_output - <<-'EOF'\n\tglobalalias = status\nEOF\n\tassert_success\n\n\trun git alias --global local\n\tassert_output ''\n\tassert_failure\n}\n\n@test \"search locally works\" {\n\trun git alias --local local\n\tassert_output - <<-'EOF'\n\tlocalalias = status\nEOF\n\tassert_success\n\n\trun git alias --local global\n\tassert_output ''\n\tassert_failure\n}\n\n@test \"get alias globally and defaultly\" {\n\trun git alias globalalias\n\tassert_output - <<-'EOF'\n\tglobalalias = status\nEOF\n\tassert_success\n}\n\n@test \"set alias globally and defaultly\" {\n\tgit alias globalalias diff\n\trun git alias diff\n\tassert_output - <<-'EOF'\n\tglobalalias = diff\nEOF\n\tassert_success\n}\n\n@test \"get alias locally\" {\n\trun git alias --local localalias\n\tassert_output - <<-'EOF'\n\tlocalalias = status\nEOF\n\tassert_success\n}\n\n@test \"set alias locally\" {\n\tgit alias --local localalias diff\n\trun git alias\n\tassert_output - <<-'EOF'\n\tglobalalias = status\n\tlocalalias = diff\n\tx = status\n\ty = status\nEOF\n}\n"
  },
  {
    "path": "tests/git-archive-file.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\tprintf '%s\\n' 'data' > tmpfile\n\tgit add .\n\tgit commit -m 'test: add data'\n\tgit tag 0.1.0 -m 'bump: 0.1.0'\n}\n\n@test \"archive file on tags branch\" {\n\tgit checkout -b tags0.1.0\n\trun git archive-file\n\tassert_success\n\n\tlocal describe_output=\n\tdescribe_output=$(git describe)\n\tassert_file_exists \"${PWD##*/}.$describe_output.zip\"\n}\n\n@test \"archive file on any not tags branch without default branch\" {\n\tgit checkout -b not-tags-branch\n\trun git archive-file\n\tassert_success\n\n\tlocal describe_output=\n\tdescribe_output=$(git describe --always --long)\n\tassert_file_exists \"${PWD##*/}.$describe_output.not-tags-branch.zip\"\n}\n\n@test \"archive file on any not tags branch with default branch\" {\n\tskip \"Not working as expected\"\n\n\trun git archive-file\n\tassert_success\n\n\tlocal describe_output=\n\tdescribe_output=$(git describe --always --long)\n\tassert_file_exists \"${PWD##*/}.$describe_output.zip\"\n}\n\n@test \"archive file on branch name has slash\" {\n\tgit checkout -b feature/slash\n\trun git archive-file\n\tassert_success\n\n\tlocal describe_output=\n\tdescribe_output=$(git describe --always --long)\n\tassert_file_exists \"${PWD##*/}.$describe_output.feature-slash.zip\"\n}\n\n@test \"archive file on dirname has backslash\" {\n\tskip\n}\n\n@test \"archive file on tag name has slash\" {\n\tskip\n}\n"
  },
  {
    "path": "tests/git-authors.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\n\nsetup_file() {\n\ttest_util.setup_file\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\n\tgit config user.name 'test'\n\tgit config user.email 'test@example.com'\n\tprintf '%s\\n' 'A' > tmpfile\n\tgit add .\n\tgit commit -m 'test: add data A'\n\n\tgit config user.name 'testagain'\n\tgit config user.email 'testagain@example.com'\n\tprintf '%s\\n' 'B' > tmpfile\n\tgit add .\n\tgit commit -m 'test: add data B'\n\n\t# git config unset user.name\n\t# git config unset user.email\n}\n\n@test \"output authors has email without any parameter\" {\n\trun git authors\n\tassert_success\n\n\tlocal content=$(<AUTHORS)\n\tassert_equal \"$content\" $'test <test@example.com>\\ntestagain <testagain@example.com>'\n}\n\n@test \"list authors has email defaultly\" {\n\trun git authors --list\n\tassert_output $'test <test@example.com>\\ntestagain <testagain@example.com>'\n\tassert_success\n\n\trun git authors -l\n\tassert_output $'test <test@example.com>\\ntestagain <testagain@example.com>'\n\tassert_success\n}\n\n@test \"list authors has no email\" {\n\trun git authors --list --no-email\n\tassert_output $'test\\ntestagain'\n\tassert_success\n\n\trun git authors -l --no-email\n\tassert_output $'test\\ntestagain'\n\tassert_success\n}\n"
  },
  {
    "path": "tests/git-browse-ci.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n\n\tPATH=\"$BATS_TEST_DIRNAME/bin:$PATH\"\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n}\n\nget_ci_uri() {\n\tlocal mode=$1\n\n\tif [ \"$mode\" = 'github' ]; then\n\t\tREPLY=\"https://github.com/tj/git-extras/actions\"\n\telif [ \"$mode\" = 'gitlab' ]; then\n\t\tREPLY=\"https://gitlab.com/tj/git-extras/-/pipelines\"\n\telif [ \"$mode\" = 'bitbucket' ]; then\n\t\tREPLY=\"https://bitbucket.org/tj/git-extras/addon/pipelines/home\"\n\tfi\n}\n\n@test \"works with mac and github\" {\n\tget_ci_uri 'github'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=darwin run git browse-ci upstream\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with mac and gitlab\" {\n\tget_ci_uri 'gitlab'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=darwin run git browse-ci upstream\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with mac and bitbucket\" {\n\tget_ci_uri 'bitbucket'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=darwin run git browse-ci upstream\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and github\" {\n\tget_ci_uri 'github'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=msys run git browse-ci upstream\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and gitlab\" {\n\tget_ci_uri 'gitlab'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=msys run git browse-ci upstream\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and bitbucket\" {\n\tget_ci_uri 'bitbucket'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=msys run git browse-ci upstream\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and github\" {\n\tget_ci_uri 'github'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=linux-gnu run git browse-ci upstream\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and gitlab\" {\n\tget_ci_uri 'gitlab'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=linux-gnu run git browse-ci upstream\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and bitbucket\" {\n\tget_ci_uri 'bitbucket'\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=linux-gnu run git browse-ci upstream\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n"
  },
  {
    "path": "tests/git-browse.bats",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n\n\tPATH=\"$BATS_TEST_DIRNAME/bin:$PATH\"\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\ttouch ./browse_this\n\tgit add ./browse_this\n\tgit commit -m 'Add test file'\n}\n\nget_file_uri() {\n\tlocal mode=$1\n\tlocal filename=$2\n\n\tlocal commit_hash=\n\tcommit_hash=$(git rev-parse HEAD)\n\tif [ \"$mode\" = 'github' ]; then\n\t\tREPLY=\"https://github.com/tj/git-extras/blob/$commit_hash/${filename}\"\n\telif [ \"$mode\" = 'gitlab' ]; then\n\t\tREPLY=\"https://gitlab.com/tj/git-extras/-/blob/${commit_hash}/${filename}\"\n\telif [ \"$mode\" = 'bitbucket' ]; then\n\t\tREPLY=\"https://bitbucket.org/tj/git-extras/src/${commit_hash}/${filename}\"\n\tfi\n}\n\n@test \"works with mac and github\" {\n\tget_file_uri github ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=darwin run git browse upstream ./browse_this\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with mac and gitlab\" {\n\tget_file_uri gitlab ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=darwin run git browse upstream ./browse_this\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with mac and bitbucket\" {\n\tget_file_uri bitbucket ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=darwin run git browse upstream ./browse_this\n\tassert_output \"open $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and github\" {\n\tget_file_uri github ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=msys run git browse upstream ./browse_this\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and gitlab\" {\n\tget_file_uri gitlab ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=msys run git browse upstream ./browse_this\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with windows and bitbucket\" {\n\tget_file_uri bitbucket ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=msys run git browse upstream ./browse_this\n\tassert_output \"start $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and github\" {\n\tget_file_uri github ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://github.com/tj/git-extras\n\tOSTYPE=linux-gnu run git browse upstream ./browse_this\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and gitlab\" {\n\tget_file_uri gitlab ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://gitlab.com/tj/git-extras\n\tOSTYPE=linux-gnu run git browse upstream ./browse_this\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n\n@test \"works with linux and bitbucket\" {\n\tget_file_uri bitbucket ./browse_this\n\tlocal expected_url=$REPLY\n\n\tgit remote add upstream https://bitbucket.org/tj/git-extras\n\tOSTYPE=linux-gnu run git browse upstream ./browse_this\n\tassert_output \"xdg-open $expected_url\"\n\tassert_success\n}\n"
  },
  {
    "path": "tests/git-continue.bats",
    "content": "#!/usr/bin/env bats\n\nsource \"$BATS_TEST_DIRNAME/test_util.sh\"\n\nsetup_file() {\n\ttest_util.setup_file\n}\n\nsetup() {\n\ttest_util.cd_test\n\n\ttest_util.git_init\n\tgit commit -m 'Initial commit' --allow-empty\n\n\tgit switch -c A main\n\tprintf '%s\\n' 'a' >> ./tmp_file\n\tgit add ./tmp_file\n\tgit commit -m 'A'\n\n\tgit switch -c B main\n\tprintf '%s\\n' 'b' >> ./tmp_file\n\tgit add ./tmp_file\n\tgit commit -m 'B'\n}\n\n@test \"works with cherry pick\" {\n\trun git cherry-pick A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\tgit add .\n\tGIT_EDITOR=cat run git continue\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with merge\" {\n\trun git merge A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\tgit add .\n\tGIT_EDITOR=cat run git continue\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with rebase\" {\n\trun git rebase A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\tgit add .\n\tGIT_EDITOR=cat run git continue\n\tassert_success\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n\n@test \"works with revert\" {\n\trun git revert A\n\tassert_failure\n\n\trun git status\n\tassert_line -p 'Unmerged paths:'\n\tassert_success\n\n\tgit add .\n\tGIT_EDITOR=cat run git continue\n\tassert_failure # TODO: Git seems to do nothing and error out?\n\n\trun git status\n\tassert_line -p 'nothing to commit, working tree clean'\n\tassert_success\n}\n"
  },
  {
    "path": "tests/helper.py",
    "content": "import os\nimport subprocess\nimport shutil\nimport tempfile\nfrom git import Repo, GitCommandError\n\nCURRENT_DIR = os.path.dirname(os.path.abspath(__file__))\nGIT_EXTRAS_BIN = os.path.abspath(os.path.join(CURRENT_DIR, \"..\", \"bin\"))\nGIT_EXTRAS_HELPER = os.path.abspath(os.path.join(CURRENT_DIR, \"..\", \"helper\"))\n\nGITHUB_ORIGIN = \"https://github.com/tj/git-extras.git\"\nGITLAB_ORIGIN = \"https://gitlab.com/tj/git-extras.git\"\nBITBUCKET_ORIGIN = \"https://bitbucket.org/tj/git-extras.git\"\n\n\nclass TempRepository:\n    def __init__(self, repo_work_dir=None):\n        self._system_tmpdir = tempfile.gettempdir()\n        if repo_work_dir is None:\n            repo_work_dir = tempfile.mkdtemp()\n        else:\n            repo_work_dir = os.path.join(self._system_tmpdir, repo_work_dir)\n        self._cwd = repo_work_dir\n        self._tempdirname = self._cwd[len(self._system_tmpdir) + 1 :]\n        self._git_repo = Repo.init(repo_work_dir, b=\"default\")\n        self._files = []\n        self.change_origin_to_github()\n\n    def switch_cwd_under_repo(self):\n        os.chdir(self._cwd)\n        print(f\"The current work directory has switched to {self._cwd}\")\n\n    def get_cwd(self):\n        return self._cwd\n\n    def get_repo_dirname(self):\n        return self._tempdirname\n\n    def get_repo_git(self):\n        return self._git_repo.git\n\n    def get_file(self, index):\n        return self._files[index]\n\n    def get_filename(self, index):\n        file = self._files[index]\n        return file[1:]\n\n    def get_files(self):\n        return self._files\n\n    def create_tmp_dir(self):\n        tmp_dir = tempfile.mkdtemp()\n        return tmp_dir\n\n    def create_tmp_file(self, temp_dir=None):\n        if temp_dir is None:\n            temp_dir = self._cwd\n\n        tmp_file = tempfile.mkstemp(dir=temp_dir)\n        self._files.append(tmp_file[1])\n        return tmp_file\n\n    def remove_tmp_file(self, file_path):\n        os.remove(file_path)\n        print(f\"File {file_path} has been removed\")\n\n    def writefile(self, temp_file, data):\n        if data is None:\n            return\n\n        with open(temp_file, \"w\", encoding=\"utf-8\") as f:\n            f.write(data)\n\n    def teardown(self):\n        shutil.rmtree(self._cwd, ignore_errors=True)\n        print(f\"The temp directory {self._cwd} has been removed\")\n\n    def invoke_extras_command(self, name, *params):\n        command_name = \"git-\" + name\n        print(f\"Invoke the git-extras command - {command_name} at {self._cwd}\")\n        script = [os.path.join(GIT_EXTRAS_BIN, command_name), *list(params)]\n        print(f\"Run the script \\\"{' '.join(script)}\\\"\")\n        return subprocess.run(script, capture_output=True)\n\n    def invoke_installed_extras_command(self, name, *params):\n        command_name = \"git-\" + name\n        print(f\"Invoke the git-extras command - {command_name} at {self._cwd}\")\n        origin_extras_command = os.path.join(GIT_EXTRAS_BIN, command_name)\n        temp_extras_command = os.path.join(self._cwd, command_name)\n        helpers = [\n            os.path.join(GIT_EXTRAS_HELPER, \"git-extra-utility\"),\n            os.path.join(GIT_EXTRAS_HELPER, \"is-git-repo\"),\n        ]\n\n        if not os.path.exists(temp_extras_command):\n            whole = []\n            with open(temp_extras_command, \"w\") as t:\n                for helper in helpers:\n                    with open(helper) as h:\n                        content = h.read()\n                        whole.extend(content.splitlines())\n                with open(origin_extras_command) as o:\n                    content = o.read()\n                    first, *rest = content.splitlines()\n                    whole.extend(rest)\n                    whole.insert(0, first)\n                t.write(\"\\n\".join(whole))\n                print(f\"Update file {temp_extras_command}\")\n            os.chmod(temp_extras_command, 0o775)\n\n        script = [temp_extras_command, *params]\n        print(f'Run the script \"{script}\"')\n        return subprocess.run(script, capture_output=True)\n\n    def change_origin(self, origin_url):\n        try:\n            self._git_repo.git.remote(\"add\", \"origin\", origin_url)\n        except GitCommandError as err:\n            print(err)\n        self._git_repo.git.remote(\"set-url\", \"origin\", origin_url)\n\n    def change_origin_to_github(self):\n        self.change_origin(GITHUB_ORIGIN)\n\n    def change_origin_to_gitlab(self):\n        self.change_origin(GITLAB_ORIGIN)\n\n    def change_origin_to_bitbucket(self):\n        self.change_origin(BITBUCKET_ORIGIN)\n"
  },
  {
    "path": "tests/pyproject.toml",
    "content": "[tool.poetry]\nname = \"git-extras-tests\"\nversion = \"0.1.0\"\ndescription = \"tests for git extras\"\npackage-mode = false\nauthors = [\"vanpipy <vanpipy@gmail.com>\"]\nlicense = \"MIT\"\nreadme = \"README.md\"\n\n[tool.poetry.dependencies]\npython = \"^3.12\"\n\n[tool.poetry.group.test.dependencies]\npytest = \"8.1.2\"\ngitpython = \"3.1.43\"\ntestpath = \"0.6.0\"\n\n[tool.poetry.group.dev.dependencies]\ncodespell = \"2.4\"\n\n[tool.pytest.ini_options]\nminversion = \"7.4\"\naddopts = \"-ra -q\"\ntestpaths = [\".\"]\n\n[build-system]\nrequires = [\"poetry-core\"]\nbuild-backend = \"poetry.core.masonry.api\"\n\n[tool.ruff]\n# Exclude a variety of commonly ignored directories.\nexclude = [\n    \".bzr\",\n    \".direnv\",\n    \".eggs\",\n    \".git\",\n    \".git-rewrite\",\n    \".hg\",\n    \".ipynb_checkpoints\",\n    \".mypy_cache\",\n    \".nox\",\n    \".pants.d\",\n    \".pyenv\",\n    \".pytest_cache\",\n    \".pytype\",\n    \".ruff_cache\",\n    \".svn\",\n    \".tox\",\n    \".venv\",\n    \".vscode\",\n    \"__pypackages__\",\n    \"_build\",\n    \"buck-out\",\n    \"build\",\n    \"dist\",\n    \"node_modules\",\n    \"site-packages\",\n    \"venv\",\n]\n\n# Same as Black.\nline-length = 88\nindent-width = 4\n\n# Assume Python 3.9\ntarget-version = \"py39\"\n\n[tool.ruff.lint]\n# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`)  codes by default.\nselect = [\"E4\", \"E7\", \"E9\", \"F\"]\nignore = []\n\n# Allow fix for all enabled rules (when `--fix`) is provided.\nfixable = [\"ALL\"]\nunfixable = []\n\n# Allow unused variables when underscore-prefixed.\ndummy-variable-rgx = \"^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$\"\n\n[tool.ruff.format]\n# Like Black, use double quotes for strings.\nquote-style = \"double\"\n\n# Like Black, indent with spaces, rather than tabs.\nindent-style = \"space\"\n\n# Like Black, respect magic trailing commas.\nskip-magic-trailing-comma = false\n\n# Like Black, automatically detect the appropriate line ending.\nline-ending = \"auto\"\n"
  },
  {
    "path": "tests/test_git_abort.py",
    "content": "from git import GitCommandError\n\n\nclass TestGitAbort:\n    def test_init(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        tmp_file = temp_repo.get_file(0)\n        git.branch(\"A\")\n        git.branch(\"B\")\n        git.checkout(\"A\")\n        temp_repo.writefile(tmp_file, \"a\")\n        git.add(\".\")\n        git.commit(\"-m\", \"A\")\n        git.checkout(\"B\")\n        temp_repo.writefile(tmp_file, \"b\")\n        git.add(\".\")\n        git.commit(\"-m\", \"B\")\n        git.status()\n\n    def test_cherry_pick(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        try:\n            git.cherry_pick(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        temp_repo.invoke_extras_command(\"abort\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_merge(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        try:\n            git.merge(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        temp_repo.invoke_extras_command(\"abort\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_rebase(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        try:\n            git.rebase(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        temp_repo.invoke_extras_command(\"abort\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_revert(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        try:\n            git.revert(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        temp_repo.invoke_extras_command(\"abort\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n"
  },
  {
    "path": "tests/test_git_alias.py",
    "content": "class TestGitAlias:\n    def test_init(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        git.config(\"--global\", \"alias.globalalias\", \"status\")\n        git.config(\"--global\", \"alias.x\", \"status\")\n        git.config(\"--local\", \"alias.localalias\", \"status\")\n        git.config(\"--local\", \"alias.y\", \"status\")\n\n    def test_list_all(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\")\n        actual = actual.stdout.decode()\n        assert \"globalalias = status\" in actual\n        assert \"x = status\" in actual\n        assert \"localalias = status\" in actual\n        assert \"y = status\" in actual\n\n    def test_list_all_globally(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--global\")\n        actual = actual.stdout.decode()\n        assert \"globalalias = status\" in actual\n\n    def test_list_all_locally(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--local\")\n        actual = actual.stdout.decode()\n        assert \"localalias = status\" in actual\n\n    def test_search_globally(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--global\", \"global\")\n        actual = actual.stdout.decode()\n        assert \"globalalias = status\" in actual\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--global\", \"local\")\n        actual = actual.stdout.decode()\n        assert \"\" == actual\n\n    def test_search_locally(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--local\", \"local\")\n        actual = actual.stdout.decode()\n        assert \"localalias = status\" in actual\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--local\", \"global\")\n        actual = actual.stdout.decode()\n        assert \"\" == actual\n\n    def test_get_alias_globally_and_defaultly(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"globalalias\")\n        actual = actual.stdout.decode()\n        assert \"globalalias = status\" in actual\n\n    def test_set_alias_globally_and_defaultly(self, temp_repo):\n        temp_repo.invoke_extras_command(\"alias\", \"globalalias\", \"diff\")\n        actual = temp_repo.invoke_extras_command(\"alias\")\n        actual = actual.stdout.decode()\n        assert \"globalalias = diff\" in actual\n\n    def test_get_alias_locally(self, temp_repo):\n        actual = temp_repo.invoke_extras_command(\"alias\", \"--local\", \"localalias\")\n        actual = actual.stdout.decode()\n        assert \"localalias = status\" in actual\n\n    def test_set_alias_locally(self, temp_repo):\n        temp_repo.invoke_extras_command(\"alias\", \"--local\", \"localalias\", \"diff\")\n        actual = temp_repo.invoke_extras_command(\"alias\")\n        actual = actual.stdout.decode()\n        assert \"localalias = diff\" in actual\n\n    def test_teardown(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        git.config(\"--global\", \"--unset\", \"alias.globalalias\")\n        git.config(\"--global\", \"--unset\", \"alias.x\")\n        git.config(\"--local\", \"--unset\", \"alias.localalias\")\n        git.config(\"--local\", \"--unset\", \"alias.y\")\n"
  },
  {
    "path": "tests/test_git_archive_file.py",
    "content": "import os\nimport pytest\n\n\nclass TestGitArchiveFile:\n    def test_init(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        tmp_file = temp_repo.get_file(0)\n        temp_repo.writefile(tmp_file, \"data\")\n        git.add(\".\")\n        git.commit(\"-m\", \"test: add data\")\n        git.tag(\"0.1.0\", \"-m\", \"bump: 0.1.0\")\n\n    def test_archive_file_on_tags_branch(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        git.checkout(\"-b\", \"tags0.1.0\")\n        temp_repo.invoke_installed_extras_command(\"archive-file\")\n        filename = \"{0}.{1}.zip\".format(temp_repo.get_repo_dirname(), git.describe())\n        assert filename in os.listdir()\n\n    def test_archive_file_on_any_not_tags_branch_without_default_branch(\n        self, temp_repo\n    ):\n        git = temp_repo.get_repo_git()\n        git.checkout(\"-b\", \"not-tags-branch\")\n        temp_repo.invoke_installed_extras_command(\"archive-file\")\n        filename = \"{0}.{1}.{2}.zip\".format(\n            temp_repo.get_repo_dirname(),\n            git.describe(\"--always\", \"--long\"),\n            \"not-tags-branch\",\n        )\n        assert filename in os.listdir()\n\n    def test_archive_file_on_any_not_tags_branch_with_default_branch(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        git.checkout(\"default\")\n        git.config(\"git-extras.default-branch\", \"default\")\n        temp_repo.invoke_installed_extras_command(\"archive-file\")\n        filename = \"{0}.{1}.zip\".format(\n            temp_repo.get_repo_dirname(), git.describe(\"--always\", \"--long\")\n        )\n        assert filename in os.listdir()\n\n    def test_archive_file_on_branch_name_has_slash(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        git.checkout(\"-b\", \"feature/slash\")\n        temp_repo.invoke_installed_extras_command(\"archive-file\")\n        filename = \"{0}.{1}.{2}.zip\".format(\n            temp_repo.get_repo_dirname(),\n            git.describe(\"--always\", \"--long\"),\n            \"feature-slash\",\n        )\n        assert filename in os.listdir()\n\n    @pytest.mark.parametrize(\"named_temp_repo\", [\"backslash\\\\dir\"], indirect=True)\n    def test_archive_file_on_dirname_has_backslash(self, named_temp_repo):\n        named_temp_repo.invoke_installed_extras_command(\"archive-file\")\n        git = named_temp_repo.get_repo_git()\n        filename = \"{0}.{1}.{2}.zip\".format(\n            \"backslash-dir\", git.describe(\"--always\", \"--long\"), \"default\"\n        )\n        assert filename in os.listdir()\n\n    def test_archive_file_on_tag_name_has_slash(self, temp_repo):\n        temp_repo.switch_cwd_under_repo()\n        git = temp_repo.get_repo_git()\n        git.checkout(\"default\")\n        git.tag(\"--delete\", \"0.1.0\")\n        git.tag(\"0.1.0/slash\", \"-m\", \"bump: 0.1.0\")\n        temp_repo.invoke_installed_extras_command(\"archive-file\")\n        description_include_version = git.describe(\"--always\", \"--long\")\n        filename = \"{0}.{1}.zip\".format(\n            temp_repo.get_repo_dirname(), description_include_version.replace(\"/\", \"-\")\n        )\n        assert filename in os.listdir()\n"
  },
  {
    "path": "tests/test_git_authors.py",
    "content": "expected_authors_list = (\n    \"test <test@git-extras.com>\\ntestagain <testagain@git-extras.com>\\n\"\n)\nexpected_authors_list_without_email = \"test\\ntestagain\\n\"\nauthors_file = \"AUTHORS\"\n\n\nclass TestGitAuthors:\n    def test_init(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        tmp_file = temp_repo.get_file(0)\n        temp_repo.writefile(tmp_file, \"A\")\n        git.add(\".\")\n        git.commit(\"-m\", \"test: add data A\")\n        git.config(\"--local\", \"user.name\", \"testagain\")\n        git.config(\"--local\", \"user.email\", \"testagain@git-extras.com\")\n        temp_repo.writefile(tmp_file, \"B\")\n        git.add(\".\")\n        git.commit(\"-m\", \"test: add data B\")\n\n    def test_output_authors_has_email_without_any_parameter(self, temp_repo):\n        temp_repo.get_repo_git()\n        temp_repo.invoke_extras_command(\"authors\")\n        with open(authors_file) as f:\n            content = f.read()\n            print(content)\n            print(expected_authors_list)\n            assert content == expected_authors_list\n\n    def test_list_authors_has_email_defaultly(self, temp_repo):\n        temp_repo.get_repo_git()\n        actual = temp_repo.invoke_extras_command(\"authors\", \"--list\")\n        actual = actual.stdout.decode()\n        assert actual == expected_authors_list\n        actual = temp_repo.invoke_extras_command(\"authors\", \"-l\")\n        actual = actual.stdout.decode()\n        assert actual == expected_authors_list\n\n    def test_list_authors_has_not_email(self, temp_repo):\n        temp_repo.get_repo_git()\n        actual = temp_repo.invoke_extras_command(\"authors\", \"--list\", \"--no-email\")\n        actual = actual.stdout.decode()\n        assert actual == expected_authors_list_without_email\n        actual = temp_repo.invoke_extras_command(\"authors\", \"-l\", \"--no-email\")\n        actual = actual.stdout.decode()\n        assert actual == expected_authors_list_without_email\n"
  },
  {
    "path": "tests/test_git_browse.py",
    "content": "from testpath import MockCommand, modified_env\n\nUNKNOWN_SITE_ORIGIN = \"https://unknown-site.com/tj/git-extras.git\"\n\n\ndef get_file_uri(mode, filename, git):\n    commit_hash = git.rev_parse(\"HEAD\")\n    if mode == \"github\":\n        return \"https://github.com/tj/git-extras/blob/\" + commit_hash + \"/\" + filename\n    if mode == \"gitlab\":\n        return \"https://gitlab.com/tj/git-extras/-/blob/\" + commit_hash + \"/\" + filename\n    if mode == \"bitbucket\":\n        return \"https://bitbucket.org/tj/git-extras/src/\" + commit_hash + \"/\" + filename\n\n\nclass TestGitBrowse:\n    def test_browse_github_file_on_mac(self, temp_repo):\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_file_on_mac(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_file_on_mac(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_file_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_file_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_file_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_file_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_gitlab_file_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_bitbucket_file_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_github_file_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_file_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_file_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_file_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_file_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_file_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename)\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_file_with_line_number(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename, \"10\", \"20\")\n            expected_url = get_file_uri(\"github\", filename, git)\n            openCommand.assert_called([expected_url + \"#L10-L20\"])\n\n    def test_browse_gitlab_file_with_line_number(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename, \"10\", \"20\")\n            expected_url = get_file_uri(\"gitlab\", filename, git)\n            openCommand.assert_called([expected_url + \"#L10-20\"])\n\n    def test_browse_bitbucket_file_with_line_number(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        git = temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename, \"10\", \"20\")\n            expected_url = get_file_uri(\"bitbucket\", filename, git)\n            openCommand.assert_called([expected_url + \"#lines-10:20\"])\n\n    def test_browse_unknown_site_file(self, temp_repo):\n        temp_repo.change_origin(UNKNOWN_SITE_ORIGIN)\n        temp_repo.get_repo_git()\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\")\n            openCommand.assert_called([UNKNOWN_SITE_ORIGIN[0:-4]])\n\n    def test_browse_unknown_site_file_with_line_number(self, temp_repo):\n        temp_repo.get_repo_git()\n        filename = temp_repo.get_filename(0)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse\", \"origin\", filename, \"10\", \"20\")\n            openCommand.assert_called([UNKNOWN_SITE_ORIGIN[0:-4]])\n"
  },
  {
    "path": "tests/test_git_browse_ci.py",
    "content": "from testpath import MockCommand, modified_env\n\nUNKNOWN_SITE_ORIGIN = \"https://unknown-site.com/tj/git-extras.git\"\n\n\ndef get_ci_uri_by_domain(mode):\n    if mode == \"github\":\n        return \"https://github.com/tj/git-extras/actions\"\n    if mode == \"gitlab\":\n        return \"https://gitlab.com/tj/git-extras/-/pipelines\"\n    if mode == \"bitbucket\":\n        return \"https://bitbucket.org/tj/git-extras/addon/pipelines/home\"\n\n\nclass TestGitBrowse:\n    def test_browse_github_ci_on_mac(self, temp_repo):\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"github\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_ci_on_mac(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"gitlab\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_ci_on_mac(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        with modified_env({\"OSTYPE\": \"darwin\"}), MockCommand(\"open\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"bitbucket\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_ci_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"github\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_ci_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"gitlab\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_ci_on_git_bash_on_window(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        with modified_env({\"OSTYPE\": \"msys\"}), MockCommand(\"start\") as openCommand:\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"bitbucket\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_ci_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"github\")\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_gitlab_ci_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"gitlab\")\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_bitbucket_ci_on_WSL_with_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"microsoft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"powershell.exe\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"bitbucket\")\n            openCommand.assert_called([\"-NoProfile\", \"start\", expected_url])\n\n    def test_browse_github_ci_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"github\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_ci_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"gitlab\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_ci_on_WSL_without_microsoft_key(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        with (\n            modified_env({\"OSTYPE\": \"linux\"}),\n            MockCommand.fixed_output(\"uname\", \"no-micro-soft\"),\n            MockCommand.fixed_output(\"command\", \"/powershell.exe\"),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"bitbucket\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_github_ci_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_github()\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"github\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_gitlab_ci_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_gitlab()\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"gitlab\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_bitbucket_ci_not_mac_or_msys_or_linux(self, temp_repo):\n        temp_repo.change_origin_to_bitbucket()\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            expected_url = get_ci_uri_by_domain(\"bitbucket\")\n            openCommand.assert_called([expected_url])\n\n    def test_browse_unknown_site_file(self, temp_repo):\n        temp_repo.change_origin(UNKNOWN_SITE_ORIGIN)\n        with (\n            modified_env({\"OSTYPE\": \"unique-system\"}),\n            MockCommand(\"xdg-open\") as openCommand,\n        ):\n            temp_repo.invoke_extras_command(\"browse-ci\", \"origin\")\n            openCommand.assert_called([\"\"])\n"
  },
  {
    "path": "tests/test_git_continue.py",
    "content": "from git import GitCommandError\n\n\nclass TestGitContinue:\n\n    @classmethod\n    def _init_repo(cls, repo):\n        git = repo.get_repo_git()\n        tmp_file = repo.get_file(0)\n        git.branch(\"A\")\n        git.branch(\"B\")\n        git.branch(\"C\")\n        git.checkout(\"A\")\n        repo.writefile(tmp_file, \"a\")\n        git.add(\".\")\n        git.commit(\"-m\", \"A\")\n        git.checkout(\"B\")\n        repo.writefile(tmp_file, \"b\")\n        git.add(\".\")\n        git.commit(\"-m\", \"B\")\n\n    def test_init(self, temp_repo_clean):\n        TestGitContinue._init_repo(temp_repo_clean)\n        git = temp_repo_clean.get_repo_git()\n        git.status()\n\n    def test_cherry_pick(self, temp_repo_clean):\n        TestGitContinue._init_repo(temp_repo_clean)\n        git = temp_repo_clean.get_repo_git()\n        try:\n            git.cherry_pick(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        git.add(\".\")\n        temp_repo_clean.invoke_extras_command(\"continue\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_merge(self, temp_repo_clean):\n        TestGitContinue._init_repo(temp_repo_clean)\n        git = temp_repo_clean.get_repo_git()\n        try:\n            git.merge(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        git.add(\".\")\n        git.commit(\"-m\", \"resolve conflict\")\n        temp_repo_clean.invoke_extras_command(\"continue\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_rebase(self, temp_repo_clean):\n        TestGitContinue._init_repo(temp_repo_clean)\n        git = temp_repo_clean.get_repo_git()\n        try:\n            git.rebase(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        git.add(\".\")\n        git.commit(\"-m\", \"resolve conflict\")\n        temp_repo_clean.invoke_extras_command(\"continue\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n\n    def test_revert(self, temp_repo_clean):\n        TestGitContinue._init_repo(temp_repo_clean)\n        git = temp_repo_clean.get_repo_git()\n        try:\n            git.revert(\"A\")\n        except GitCommandError as err:\n            print(err)\n        result = git.status()\n        assert \"Unmerged path\" in result\n        git.add(\".\")\n        git.commit(\"-m\", \"resolve conflict\")\n        temp_repo_clean.invoke_extras_command(\"continue\")\n        result = git.status()\n        assert \"nothing to commit, working tree clean\" in result\n"
  },
  {
    "path": "tests/test_util.sh",
    "content": "# shellcheck shell=bash\n\nsource \"$BATS_TEST_DIRNAME/../vendor/bats-all/load.bash\"\n\ntest_util.setup_file() {\n\tcd \"$BATS_FILE_TMPDIR\"\n\n\texport GIT_CONFIG_NOSYSTEM=1\n\texport GIT_CONFIG_GLOBAL=\"$PWD/git_config\"\n\n\t# Append to path so that we can access all commands included from git-extras\n\t# TODO: This currently breaks with commands that are included in \"not_needed_git_repo\" etc.\n\tPATH=\"$BATS_TEST_DIRNAME/../bin:$PATH\"\n}\n\ntest_util.cd_test() {\n\tcd \"$BATS_TEST_TMPDIR\"\n}\n\ntest_util.git_init() {\n\tgit init --initial-branch main\n\tgit config user.name  'Name'\n\tgit config user.email 'name@example.com'\n}\n"
  }
]