gitbasher 4.1.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +101 -0
- package/README.md +111 -37
- package/dist/gitb +2856 -843
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,107 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to gitbasher are generated automatically by [semantic-release](https://github.com/semantic-release/semantic-release) from [Conventional Commits](https://www.conventionalcommits.org/) on `main`. The project follows [Semantic Versioning](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [5.0.1](https://github.com/maxbolgarin/gitbasher/compare/v5.0.0...v5.0.1) (2026-07-03)
|
|
6
|
+
|
|
7
|
+
### 🐛 Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **base:** render embedded colors in the main help instead of literal escapes ([95ffbc6](https://github.com/maxbolgarin/gitbasher/commit/95ffbc62fab836ea97f9de2bd3c542b5ae659f9a))
|
|
10
|
+
* **push:** widen the transfer quiet window so ordinary pushes stay silent ([fcccb6b](https://github.com/maxbolgarin/gitbasher/commit/fcccb6b8cd941c9e721d9c392d45f351ca4aa924))
|
|
11
|
+
|
|
12
|
+
### 🛠 Build System
|
|
13
|
+
|
|
14
|
+
* **deps:** pin conventional-changelog-conventionalcommits to v8 ([b9163f8](https://github.com/maxbolgarin/gitbasher/commit/b9163f8c859e1cb35bbb08a57ce69a374005d3ea))
|
|
15
|
+
|
|
16
|
+
## [5.0.0](https://github.com/maxbolgarin/gitbasher/compare/v4.1.0...v5.0.0) (2026-07-03)
|
|
17
|
+
|
|
18
|
+
### ⚠ BREAKING CHANGES
|
|
19
|
+
|
|
20
|
+
* unknown commands and unknown modes now exit non-zero
|
|
21
|
+
(previously 0). Destructive prompts (force-delete, drop, remove, undo,
|
|
22
|
+
reset, delete-all, accept-theirs/ours, squash apply) require an
|
|
23
|
+
explicit "y": Enter declines and closed stdin aborts instead of
|
|
24
|
+
auto-confirming. Piped or redirected `gitb log` prints the plain log
|
|
25
|
+
instead of interactive browser pages, and all output is uncolored when
|
|
26
|
+
stdout is not a terminal (NO_COLOR is honored). jq is required for AI
|
|
27
|
+
features. Path inputs containing control characters are rejected
|
|
28
|
+
instead of silently rewritten, and `../` in worktree/clone paths is
|
|
29
|
+
honored instead of stripped.
|
|
30
|
+
|
|
31
|
+
### 🚀 Features
|
|
32
|
+
|
|
33
|
+
* **log:** add ai mode summarizing commit ranges ([469d7c1](https://github.com/maxbolgarin/gitbasher/commit/469d7c16274e31bab9959c3802f12847871a41aa))
|
|
34
|
+
* **completion:** add all, dump and ai modes to log completion ([e7435e3](https://github.com/maxbolgarin/gitbasher/commit/e7435e3b37b656ea87b22afff4c6fa5871192ec8))
|
|
35
|
+
* **log:** add commit list renderer with decorations, truncation and unpushed markers ([783cb8e](https://github.com/maxbolgarin/gitbasher/commit/783cb8e15291669a0d41f01b13092f9978e9501d))
|
|
36
|
+
* add diff command and AI-powered feature grouping for commits ([c725be6](https://github.com/maxbolgarin/gitbasher/commit/c725be642515e58045e38896535fa7a979a0c8e3))
|
|
37
|
+
* **ai:** add ollama host configuration, model id validation, and provider smoke check functionality ([b7c4e20](https://github.com/maxbolgarin/gitbasher/commit/b7c4e2085268eda01aa8cbc7a3d6c795ef2b8c79))
|
|
38
|
+
* **merge:** add push modifier to merge command for automatic post-merge pushing ([ceb38c6](https://github.com/maxbolgarin/gitbasher/commit/ceb38c6fd798c5335598fdf7f2cbba3cdf7ef9d1))
|
|
39
|
+
* **rebase:** add push modifier to rebase command for post-rebase force-pushing ([1a4fa38](https://github.com/maxbolgarin/gitbasher/commit/1a4fa38662806fa6b936e78b248db031799f1a11))
|
|
40
|
+
* **completion:** add push options to merge and rebase commands ([37d6df5](https://github.com/maxbolgarin/gitbasher/commit/37d6df5d33f587513d30037e9ffcab86c0f9e38c))
|
|
41
|
+
* **fetch:** add top-level fetch command with prune mode ([7f981ef](https://github.com/maxbolgarin/gitbasher/commit/7f981ef77ca5a9cc9bfe7b567b8ed60972130139))
|
|
42
|
+
* **log:** make an interactive commit browser the default log view ([c033bac](https://github.com/maxbolgarin/gitbasher/commit/c033bac2c29d2994228eb60997136fc87000782b))
|
|
43
|
+
* **branch:** offer to push new branches to the remote ([e74cfdb](https://github.com/maxbolgarin/gitbasher/commit/e74cfdb86c952b1cea66ca395601227ae62552e8))
|
|
44
|
+
* **commit:** order split commits by scope dependency ([96f7518](https://github.com/maxbolgarin/gitbasher/commit/96f7518d9af2a9451fd11cb11be8db655f78fe88))
|
|
45
|
+
* reliability overhaul - safe prompts, honest exit codes, true bash 3.2 support ([645970f](https://github.com/maxbolgarin/gitbasher/commit/645970fdc75bb7a8a6d917d1653c0a977ad2572e))
|
|
46
|
+
* **status:** show upstream, stash, in-progress state and grouped changes ([e3f23b3](https://github.com/maxbolgarin/gitbasher/commit/e3f23b33e73b051db7eaaf647870e363a5d12dd9))
|
|
47
|
+
* **push:** stream live progress and warn before large pushes ([a1f3f33](https://github.com/maxbolgarin/gitbasher/commit/a1f3f33a0074badd07633a1ed61338bdc31724e9))
|
|
48
|
+
* **log:** support smart positional arguments (count, path, ref, message search) ([be9f1ee](https://github.com/maxbolgarin/gitbasher/commit/be9f1eed3e3efa64bdd60c6b446b1fdc476e75fc))
|
|
49
|
+
|
|
50
|
+
### 🐛 Bug Fixes
|
|
51
|
+
|
|
52
|
+
* **common:** assemble multi-byte keys correctly under bash 3.2 ([0b65802](https://github.com/maxbolgarin/gitbasher/commit/0b65802130da7335b98fb4c8752c570564827472))
|
|
53
|
+
* **branch:** exact-name list filtering and plumbing-based cleanup parsers ([9c6b2b0](https://github.com/maxbolgarin/gitbasher/commit/9c6b2b05f039f9b4d6d8a3f17867805fe754e361))
|
|
54
|
+
* **common:** exit non-zero on error paths instead of status 0 ([f2b6330](https://github.com/maxbolgarin/gitbasher/commit/f2b6330db148eacce6b5ecf4c9bdc84c32704031))
|
|
55
|
+
* **install): working --help and fish advice; test(infra:** honest harness ([4f1bbe8](https://github.com/maxbolgarin/gitbasher/commit/4f1bbe8acc64f939d7d32c845677a0b09aeb695e))
|
|
56
|
+
* **worktree:** honest path handling and a usable path mode ([7a9ea79](https://github.com/maxbolgarin/gitbasher/commit/7a9ea7920f9caa1ff4a2f6b0c1bdea1c60d5662b))
|
|
57
|
+
* **tag:** honest remote deletes, robust delete-all, clean tag drafts ([98f4ec0](https://github.com/maxbolgarin/gitbasher/commit/98f4ec01041b0fa5ee96ef04bc520d4d79af5ae0))
|
|
58
|
+
* **stash): pathspec-based select; fix(undo): honest guards; fix(cherry:** live state detection ([52d27fb](https://github.com/maxbolgarin/gitbasher/commit/52d27fbf1e08703d51b5df16137145ec9c9ad4ca))
|
|
59
|
+
* **init:** make environment probes locale-proof and respect user config ([1ecee30](https://github.com/maxbolgarin/gitbasher/commit/1ecee30aaae2e7c8b08a4aaf90584d0f6ba13811))
|
|
60
|
+
* **commit:** make the atomic-split flow safe with real-world repos ([19b52d3](https://github.com/maxbolgarin/gitbasher/commit/19b52d37e1fb08ff1f92b058a6e092e958cedd1c))
|
|
61
|
+
* **common:** never auto-confirm prompts on EOF; kill input spin loops ([f46fed6](https://github.com/maxbolgarin/gitbasher/commit/f46fed63b6560932a3ed24cd1c959162e40a1d3d))
|
|
62
|
+
* **wip:** never destroy WIP on restore failure; safer discovery ([be8674e](https://github.com/maxbolgarin/gitbasher/commit/be8674ea4e105fa8d410eb0cd272dfac6b3a3fce))
|
|
63
|
+
* **base:** pass all arguments to merge and rebase scripts ([91a40b6](https://github.com/maxbolgarin/gitbasher/commit/91a40b6a3e7ece803b1c5c0d6c641568db8ada3e))
|
|
64
|
+
* **base:** quote dispatch args, clean --version, document init/version ([d2b57ee](https://github.com/maxbolgarin/gitbasher/commit/d2b57ee7337b7d23f15bca7093898c7c311a7368))
|
|
65
|
+
* **completion:** re-sync all three shells with the real dispatch surface ([e7fb34b](https://github.com/maxbolgarin/gitbasher/commit/e7fb34bc6ba2da539548704992461da1a91fd532))
|
|
66
|
+
* real bash 3.2 runtime gaps in colors and read timeouts ([78f2eb2](https://github.com/maxbolgarin/gitbasher/commit/78f2eb20c717139a0bf53207fcbf6925a27844af))
|
|
67
|
+
* **merge:** reconcile divergent branches in pre-merge/rebase pull ([5f98352](https://github.com/maxbolgarin/gitbasher/commit/5f9835241e4a26514f6ed2ab9a14d8b51ef1720b))
|
|
68
|
+
* **build:** released bundle emits byte-identical artifacts to dev runs ([85aa24e](https://github.com/maxbolgarin/gitbasher/commit/85aa24e48813510c9707970bc37deed6fa11529d))
|
|
69
|
+
* **hook:** resolve hooks like git does; working templates and honest modes ([a889c1d](https://github.com/maxbolgarin/gitbasher/commit/a889c1d08e2706de20557c92d7d6bc6deb2f59c5))
|
|
70
|
+
* **rebase:** restore exact pre-pull state on abort; safer conflict loop ([65e9b4b](https://github.com/maxbolgarin/gitbasher/commit/65e9b4b529872db7a430160ee15a459afbeb33ac))
|
|
71
|
+
* **push:** show transfer progress only when a push or fetch runs long ([74a3d0c](https://github.com/maxbolgarin/gitbasher/commit/74a3d0c33ebef36b7ef4d27c32f8295defa709f9))
|
|
72
|
+
* **log:** stop dropping rows on macOS, guard non-TTY use, sanitize output ([d61e5cd](https://github.com/maxbolgarin/gitbasher/commit/d61e5cd0467b036b31e5b8b74917ee1cfe024d0c))
|
|
73
|
+
* **commit:** strip model reasoning preamble from AI commit messages ([0d61206](https://github.com/maxbolgarin/gitbasher/commit/0d61206a9738d4ca3c657cc156778a2ff772bb92))
|
|
74
|
+
* **ai:** trap safety, honest error handling, robust proxy/key management ([5bf3b1c](https://github.com/maxbolgarin/gitbasher/commit/5bf3b1cf3e24e925bb9fbfb59fadb6bed3bdc31d))
|
|
75
|
+
* **commit:** treat Enter as No at atomic-split (y/N) prompt ([e86bd0b](https://github.com/maxbolgarin/gitbasher/commit/e86bd0b19b9b907f5dfe748d64fd3228ee96a6f8))
|
|
76
|
+
* **merge:** unblock conflict resolution, stop arg shifts, honest checks ([5871ce3](https://github.com/maxbolgarin/gitbasher/commit/5871ce3202c4ff572f64f8ddfc8fb53d41037dbb))
|
|
77
|
+
* **squash:** work on bash 3.2, refuse merge ranges before the AI call ([1ce4ad2](https://github.com/maxbolgarin/gitbasher/commit/1ce4ad225a5c8cdfe7f076fdaa8ebe1d66d38436))
|
|
78
|
+
* **config:** working delete menu, safe writes, honest validation ([14ef2b8](https://github.com/maxbolgarin/gitbasher/commit/14ef2b86573930a407f88502f0099438e1909273))
|
|
79
|
+
|
|
80
|
+
### 📚 Documentation
|
|
81
|
+
|
|
82
|
+
* align README/FAQ/ARCHITECTURE with actual behavior ([9670681](https://github.com/maxbolgarin/gitbasher/commit/9670681b020c4c9ae252d4f2c26bdd3f00f29fa6))
|
|
83
|
+
* **log:** document the interactive browser, smart args and ai summary ([28c7957](https://github.com/maxbolgarin/gitbasher/commit/28c7957b2613a70456bc105fbd935e741faff588))
|
|
84
|
+
* **faq:** explain undo operation semantics and undo vs reset ([88dc9e4](https://github.com/maxbolgarin/gitbasher/commit/88dc9e46841f6592434e4eeeb27fb5897ec991c3))
|
|
85
|
+
* fix accuracy drift across README, FAQ, ARCHITECTURE, site and comments ([7f00931](https://github.com/maxbolgarin/gitbasher/commit/7f0093181812e9a2d9749368f941e47e6bb89560))
|
|
86
|
+
* use v5.0.0 in version-pin examples ([89d980c](https://github.com/maxbolgarin/gitbasher/commit/89d980cdfa34912b5ef8a95d49273ff3ac77a5ce))
|
|
87
|
+
|
|
88
|
+
### 📦 Code Refactoring
|
|
89
|
+
|
|
90
|
+
* make gitbasher run on bash 3.2 ([f575b05](https://github.com/maxbolgarin/gitbasher/commit/f575b055ed0813a965fd9d2b104d80f13ec142b6))
|
|
91
|
+
* make merged scope-dependency ordering bash 3.2 compatible ([746b9cd](https://github.com/maxbolgarin/gitbasher/commit/746b9cd96a74cb29394bfa41ad7671c4faf9c9c8))
|
|
92
|
+
* **diff:** move print_ai_summary to common.sh for cross-command reuse ([e1153e3](https://github.com/maxbolgarin/gitbasher/commit/e1153e39033e5fd9a526b90df6dab015e8132d4b))
|
|
93
|
+
|
|
94
|
+
### 🚨 Tests
|
|
95
|
+
|
|
96
|
+
* add 6 test suites for clone, commit splitting, and validation logic ([ec91278](https://github.com/maxbolgarin/gitbasher/commit/ec912787a8088a10fb07b76e0280c63ad567af98))
|
|
97
|
+
* add tests for ollama AI configuration and merge/rebase push modifiers ([4e35b3a](https://github.com/maxbolgarin/gitbasher/commit/4e35b3adbcfb0df8df4fcc694d377c4539415ddf))
|
|
98
|
+
* keep [@test](https://github.com/test) descriptions ASCII for bash 3.2 (bats name mangling) ([2ef48a7](https://github.com/maxbolgarin/gitbasher/commit/2ef48a79ef43f9dfb3b7b3ae65cb8d0736a9a031))
|
|
99
|
+
* make test code bash 3.2 compatible ([b7b81fa](https://github.com/maxbolgarin/gitbasher/commit/b7b81fab2b38cf0eb31a3d1906abab9c87a99beb))
|
|
100
|
+
* replace non-ASCII dash in test name that breaks bats under bash 3.2 ([6ac525b](https://github.com/maxbolgarin/gitbasher/commit/6ac525b2c788bac35fd9c941e714a14efec0482e))
|
|
101
|
+
|
|
102
|
+
### ⚙️ Continuous Integration
|
|
103
|
+
|
|
104
|
+
* add Docker bash:3.2 syntax + shim self-test job ([e6ec1e2](https://github.com/maxbolgarin/gitbasher/commit/e6ec1e273110b150244a4df375bb654b86f51dec))
|
|
105
|
+
|
|
5
106
|
## [4.1.0](https://github.com/maxbolgarin/gitbasher/compare/v4.0.0...v4.1.0) (2026-05-29)
|
|
6
107
|
|
|
7
108
|
### 🚀 Features
|
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ Every command has a short alias (`gitb c`, `gitb p`, `gitb pu`, `gitb b`, `gitb
|
|
|
111
111
|
- **AI commit messages** — `gitb c ai` writes the message from your diff. OpenRouter (Gemini/Claude/GPT/…), OpenAI direct, or **fully local via Ollama** — no key, no network, no data leaves your machine.
|
|
112
112
|
- **Safer git** — push/pull detect conflicts up front, `undo` rolls back commit/amend/merge/rebase/stash, `reset` is interactive with a preview.
|
|
113
113
|
- **Whole workflows, not just commands** — `sync`, `wip`, `branch newd`, `merge to-main`, `squash` chain the steps you'd otherwise do by hand.
|
|
114
|
-
- **One file, no deps** — pure bash
|
|
114
|
+
- **One file, no deps** — pure bash for every git operation; only the AI features need `jq` and `curl`. Drop the binary anywhere on `PATH` and go. **870+ BATS tests** cover sanitization, git ops, and branch logic.
|
|
115
115
|
|
|
116
116
|
<p align="center">
|
|
117
117
|
<img src=".github/push.gif" width="640" alt="gitb push demo" />
|
|
@@ -124,19 +124,19 @@ Every command has a short alias (`gitb c`, `gitb p`, `gitb pu`, `gitb b`, `gitb
|
|
|
124
124
|
| Group | Commands | What you get |
|
|
125
125
|
|-------|----------|--------------|
|
|
126
126
|
| **Commit** | `commit` (`c`), `edit` (`ed`) | Interactive conventional commits, fast-mode, AI messages, atomic split, fixup, amend, revert; `gitb edit` reworks the last commit message, picks any commit to reword, or renames the current branch |
|
|
127
|
-
| **Sync remote** | `push` (`p`), `pull` (`pu`), `sync` (`sy`) | Safe push (with force/list), smart pull (rebase / merge / ff), one-shot rebase-on-main with optional force-push |
|
|
127
|
+
| **Sync remote** | `push` (`p`), `pull` (`pu`), `fetch` (`fe`), `sync` (`sy`) | Safe push (with force/list), smart pull (rebase / merge / ff), fetch-only with prune, one-shot rebase-on-main with optional force-push |
|
|
128
128
|
| **Branches** | `branch` (`b`), `prev` (`-`) | List / switch / create-from-current / create-from-updated-main / delete (orphaned, merged, gone) / recent / previous / checkout-tag |
|
|
129
129
|
| **Integration** | `merge` (`m`), `rebase` (`r`), `squash` (`sq`), `cherry` (`ch`) | Merge into current / into main / from remote · rebase onto main / interactive / autosquash / fastautosquash / pull-commits · AI-driven squash of branch commits into changelog-ready history · cherry-pick by hash, range, or interactive |
|
|
130
130
|
| **Tags & releases** | `tag` (`t`) | Lightweight, annotated, from-commit, push, push-all, delete, delete-all, list, fetch-remote |
|
|
131
131
|
| **Save & rollback** | `wip` (`up`/`down`), `undo` (`un`), `reset` (`res`), `stash` (`st`) | Save WIP via stash / branch / worktree (auto-detected on restore) · undo last commit/amend/merge/rebase/stash · interactive reset · full stash menu |
|
|
132
132
|
| **Worktrees** | `worktree` (`wt`) | Add / list / remove / move / lock / prune git worktrees, with new branch from current/main or from existing/remote branches |
|
|
133
|
-
| **Inspect** | `status` (`s`), `log` (`l`), `reflog` (`rl`), `last-commit` (`lc`), `last-ref` (`lr`) | Pretty repo status, multi-mode log + search, reflog viewer, quick last-commit / last-ref summary |
|
|
133
|
+
| **Inspect** | `status` (`s`), `diff` (`d`), `log` (`l`), `reflog` (`rl`), `last-commit` (`lc`), `last-ref` (`lr`) | Pretty repo status, overview-first diffs with a file picker + AI summary, multi-mode log + search, reflog viewer, quick last-commit / last-ref summary |
|
|
134
134
|
| **Hooks** | `hook` (`ho`) | List / create from templates / edit / toggle / remove / test / show — for every git hook |
|
|
135
135
|
| **Repo setup** | `init` (`i`), `origin` (`or`, `o`, `remote`) | `git init` from gitbasher · add/change/rename/remove the remote origin |
|
|
136
136
|
| **Config** | `config` (`cfg`) | User, default branch, separator, editor, ticket prefix, scopes, AI provider/key/model, proxy, completion |
|
|
137
137
|
| **Lifecycle** | `update` (`up`), `uninstall` (`uns`) | Self-update from latest GitHub release · one-shot uninstall (config + binary) |
|
|
138
138
|
|
|
139
|
-
Total: **
|
|
139
|
+
Total: **31 top-level commands**, **60+ aliases**, **100+ modes**.
|
|
140
140
|
|
|
141
141
|
---
|
|
142
142
|
|
|
@@ -168,9 +168,9 @@ gitb sync merge # use merge instead of rebase
|
|
|
168
168
|
### Save WIP across machines / branches
|
|
169
169
|
```bash
|
|
170
170
|
gitb wip up # stash changes + push backup to origin/wip/<branch>
|
|
171
|
-
# … on another machine …
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
# … on another machine: fetch the backup branch and restore it manually …
|
|
172
|
+
git fetch origin wip/<branch>
|
|
173
|
+
git merge --squash --no-commit origin/wip/<branch>
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
### Hotfix
|
|
@@ -311,6 +311,7 @@ git config gitbasher.ai-base-url http://my-gateway:4000/v1/chat/completions
|
|
|
311
311
|
| [`edit`](#gitb-edit) | `ed` `ee` | Rewrite the last commit message, reword an older commit, or rename the current branch |
|
|
312
312
|
| [`push`](#gitb-push) | `p` `ps` `pus` | Push with conflict handling, force, or list-only |
|
|
313
313
|
| [`pull`](#gitb-pull) | `pu` `pl` `pul` | Smart pull: rebase / merge / ff / fetch-only / interactive / dry-run |
|
|
314
|
+
| [`fetch`](#gitb-fetch) | `fe` | Fetch without merging: current branch, all remotes, or prune |
|
|
314
315
|
| [`branch`](#gitb-branch) | `b` `br` `bran` | Switch / list / create / delete / recent / gone / checkout-tag |
|
|
315
316
|
| [`tag`](#gitb-tag) | `t` `tg` | Create, push, list, delete tags (lightweight & annotated) |
|
|
316
317
|
| [`merge`](#gitb-merge) | `m` `me` | Merge into current, into main, or from remote |
|
|
@@ -326,9 +327,13 @@ git config gitbasher.ai-base-url http://my-gateway:4000/v1/chat/completions
|
|
|
326
327
|
| [`hook`](#gitb-hook) | `ho` `hk` | Manage git hooks: list, create, edit, toggle, remove, test, show |
|
|
327
328
|
| [`origin`](#gitb-origin) | `or` `o` `remote` | Add, change, rename, or remove the remote origin |
|
|
328
329
|
| [`init`](#gitb-init) | `i` | `git init` + optional origin setup prompt |
|
|
330
|
+
| `clone` | `cl` `clo` | Clone a repository and set up gitbasher in it |
|
|
331
|
+
| `update` | `up` `upd` | Self-update gitb to the latest release |
|
|
332
|
+
| [`uninstall`](#uninstall) | `uns` `uni` | Remove the binary and `gitbasher.*` config keys |
|
|
329
333
|
| [`config`](#gitb-config) | `cf` `cfg` `conf` | Configure user, branch, AI, scopes, ticket prefix, etc. |
|
|
330
|
-
| [`log`](#gitb-log) | `l` `lg` |
|
|
334
|
+
| [`log`](#gitb-log) | `l` `lg` | Interactive commit browser; also branch, compare, search, and full-dump modes |
|
|
331
335
|
| [`status`](#info-commands) | `s` | Repo status and changed files |
|
|
336
|
+
| [`diff`](#gitb-diff) | `d` `di` | Overview-first diffs: staged, all, branch, commit, AI summary |
|
|
332
337
|
| [`reflog`](#info-commands) | `rl` `rlg` | Pretty reflog |
|
|
333
338
|
| [`last-commit`](#info-commands) | `lc` `lastc` | Show the last commit |
|
|
334
339
|
| [`last-ref`](#info-commands) | `lr` `lastr` | Show the last reference |
|
|
@@ -355,6 +360,7 @@ gitb commit <combined> # compact form: ff, aifp, fastsp, ...
|
|
|
355
360
|
| `amend` | `a` `am` | Add changes into the last commit (no message edit) |
|
|
356
361
|
| `revert` | `rev` | Revert a commit (`git revert --no-edit`) |
|
|
357
362
|
| `ff` | | Ultrafast: `ai + split + fast` with no prompts (use `ffp` to also push) |
|
|
363
|
+
| `sff` | `ffst` | Like `ff` but on already-staged files (no `git add .`); use `sffp` to also push |
|
|
358
364
|
| `help` | `h` `--help` `-h` | Show inline help |
|
|
359
365
|
|
|
360
366
|
**Modifiers** — stack with an action, any order.
|
|
@@ -378,10 +384,11 @@ gitb commit <combined> # compact form: ff, aifp, fastsp, ...
|
|
|
378
384
|
| `gitb commit fast` | `git add .` then enter a message |
|
|
379
385
|
| `gitb commit ai fast push` | AI message + add all + commit + push |
|
|
380
386
|
| `gitb commit aifp` | Same as above (compact form) |
|
|
381
|
-
| `gitb commit ai split push` | AI groups staged files into commits, then push |
|
|
387
|
+
| `gitb commit ai split push` | AI groups staged files into commits by feature, then push |
|
|
382
388
|
| `gitb commit fixup push` | Pick an older commit, fixup it, then push |
|
|
383
389
|
| `gitb commit amend fast` | Add all current changes into the last commit |
|
|
384
390
|
| `gitb commit ff` | Full auto: AI splits and writes everything |
|
|
391
|
+
| `gitb commit sffp` | Full auto on already-staged files: AI splits, writes, pushes |
|
|
385
392
|
|
|
386
393
|
**How modes combine**
|
|
387
394
|
- Word order doesn't matter: `ai fast push` == `push fast ai` == `aifp`.
|
|
@@ -429,10 +436,12 @@ Notes:
|
|
|
429
436
|
| `<empty>` | | Show commits, push with conflict handling |
|
|
430
437
|
| `yes` | `y` | Push without confirmation |
|
|
431
438
|
| `force` | `f` | Force push (use after rebase/amend) |
|
|
432
|
-
| `list` | `log` `l` | List unpushed commits
|
|
439
|
+
| `list` | `log` `l` | List unpushed commits + estimated push size and large-file warnings |
|
|
433
440
|
|
|
434
441
|
</details>
|
|
435
442
|
|
|
443
|
+
Quick pushes stay clean — git's live progress bar appears only when a transfer runs long (same for `pull`/`fetch`). gitbasher also estimates the transfer size first, warning you before you push a stray non-code object (e.g. a build artifact or dataset). Tune the threshold with `gitb cfg push-size` (default 50 MB, `0` disables).
|
|
444
|
+
|
|
436
445
|
### `gitb pull`
|
|
437
446
|
|
|
438
447
|
<details>
|
|
@@ -443,7 +452,7 @@ Notes:
|
|
|
443
452
|
| `<empty>` | | Smart pull (strategy picker) |
|
|
444
453
|
| `fetch` | `fe` | Fetch only |
|
|
445
454
|
| `all` | `fa` | Fetch all branches |
|
|
446
|
-
| `upd` | `u` | Update remote refs
|
|
455
|
+
| `upd` | `u` | Update remote refs (`git remote update`) |
|
|
447
456
|
| `ffonly` | `ff` | Fast-forward only |
|
|
448
457
|
| `merge` | `m` | Always create merge commit |
|
|
449
458
|
| `rebase` | `r` | Rebase current onto remote |
|
|
@@ -452,6 +461,19 @@ Notes:
|
|
|
452
461
|
|
|
453
462
|
</details>
|
|
454
463
|
|
|
464
|
+
### `gitb fetch`
|
|
465
|
+
|
|
466
|
+
<details>
|
|
467
|
+
<summary>All fetch modes</summary>
|
|
468
|
+
|
|
469
|
+
| Mode | Aliases | Description |
|
|
470
|
+
|------|---------|-------------|
|
|
471
|
+
| `<empty>` | | Fetch the current branch without merging |
|
|
472
|
+
| `all` | `a` `fa` | Fetch every remote branch without merging |
|
|
473
|
+
| `prune` | `p` `pr` | Fetch and drop branches deleted on the remote |
|
|
474
|
+
|
|
475
|
+
</details>
|
|
476
|
+
|
|
455
477
|
### `gitb branch`
|
|
456
478
|
|
|
457
479
|
<details>
|
|
@@ -464,8 +486,8 @@ Notes:
|
|
|
464
486
|
| `remote` | `re` `r` | Fetch and switch to a remote branch |
|
|
465
487
|
| `main` | `def` `m` | Quick-switch to default branch |
|
|
466
488
|
| `tag` | `t` | Checkout to a specific tag |
|
|
467
|
-
| `new` | `n` `c` | Create branch from current |
|
|
468
|
-
| `newd` | `nd` `cd` | Switch to main, pull, branch off |
|
|
489
|
+
| `new` | `n` `c` | Create branch from current (offers to push it to the remote) |
|
|
490
|
+
| `newd` | `nd` `cd` | Switch to main, pull, branch off (offers to push it to the remote) |
|
|
469
491
|
| `delete` | `del` `d` | Delete branches (orphaned, merged, or selected) |
|
|
470
492
|
| `prev` | `p` `-` | Switch to previous branch (`cd -`) |
|
|
471
493
|
| `recent` | `rc` | Pick from recently checked-out branches |
|
|
@@ -504,6 +526,7 @@ Notes:
|
|
|
504
526
|
| `main` | `master` `m` | Merge default branch into current |
|
|
505
527
|
| `to-main` | `to-master` `tm` | Switch to main, merge current branch in |
|
|
506
528
|
| `remote` | `r` | Fetch + select a remote branch to merge |
|
|
529
|
+
| `push` | `p` | Push the branch after a successful merge (combine with any mode) |
|
|
507
530
|
|
|
508
531
|
</details>
|
|
509
532
|
|
|
@@ -520,6 +543,7 @@ Notes:
|
|
|
520
543
|
| `autosquash` | `a` `s` `ia` | Interactive rebase with `--autosquash` |
|
|
521
544
|
| `fastautosquash` | `fast` `sf` `f` | Autosquash without interaction |
|
|
522
545
|
| `pull` | `p` | Take commits from selected branch into current |
|
|
546
|
+
| `push` | | Force-push the branch after a successful rebase (combine with any mode) |
|
|
523
547
|
|
|
524
548
|
</details>
|
|
525
549
|
|
|
@@ -677,7 +701,7 @@ long-running reviews, or comparing branches side-by-side.
|
|
|
677
701
|
| `<empty>` | | Show existing worktrees + interactive menu |
|
|
678
702
|
| `list` | `l` `ls` | List all worktrees with branch and lock state |
|
|
679
703
|
| `add` | `a` `new` `n` `c` | Create worktree with a new branch from current `HEAD` |
|
|
680
|
-
| `addd` | `ad` `nd`
|
|
704
|
+
| `addd` | `ad` `nd` | Fetch, then create worktree with new branch from default branch |
|
|
681
705
|
| `addb` | `ab` `from` `b` | Create worktree from an existing local branch |
|
|
682
706
|
| `addr` | `ar` `remote` `r` | Fetch + create worktree tracking a remote branch |
|
|
683
707
|
| `remove` | `rm` `del` `d` | Pick a worktree to remove (force-prompt on dirty trees) |
|
|
@@ -685,7 +709,9 @@ long-running reviews, or comparing branches side-by-side.
|
|
|
685
709
|
| `lock` | | Lock a worktree (with optional reason) |
|
|
686
710
|
| `unlock` | `ul` | Unlock a worktree |
|
|
687
711
|
| `prune` | `pr` `p` | Clean up stale worktree records (dry-run preview first) |
|
|
688
|
-
| `
|
|
712
|
+
| `manage` | `m` | Pick a worktree, then move / lock / unlock / delete it |
|
|
713
|
+
| `goto` | `go` `g` `cd` `switch` | Open a subshell inside a chosen worktree |
|
|
714
|
+
| `path` | `sw` | Print the path to a chosen worktree (use with `cd $(...)`) |
|
|
689
715
|
|
|
690
716
|
</details>
|
|
691
717
|
|
|
@@ -697,8 +723,8 @@ gitb wt remove # interactive removal (with force prompt if dirty)
|
|
|
697
723
|
cd "$(gitb wt path)" # cd into a chosen worktree
|
|
698
724
|
```
|
|
699
725
|
|
|
700
|
-
By default new worktrees are created at
|
|
701
|
-
|
|
726
|
+
By default new worktrees are created at `<repo_root>/.worktree/<branch>` (slashes
|
|
727
|
+
in the branch name become dashes). Override the base directory globally or per-repo:
|
|
702
728
|
|
|
703
729
|
```bash
|
|
704
730
|
git config --global gitbasher.worktreebase ~/code/worktrees
|
|
@@ -713,9 +739,11 @@ git config --global gitbasher.worktreebase ~/code/worktrees
|
|
|
713
739
|
|------|---------|-------------|
|
|
714
740
|
| `<empty>` | | Interactive action menu |
|
|
715
741
|
| `list` | `l` | All hooks with status |
|
|
742
|
+
| `select` | `sel` | Browse hook types with descriptions |
|
|
716
743
|
| `create` | `new` `c` | New hook from templates |
|
|
717
744
|
| `edit` | `e` | Edit existing hook |
|
|
718
|
-
| `toggle` | `t` | Enable/disable hook |
|
|
745
|
+
| `toggle` | `t` | Enable/disable hook (`enable` / `disable` force that state) |
|
|
746
|
+
| `install` | `samples` | Install all available sample hooks |
|
|
719
747
|
| `remove` | `rm` `r` | Delete hook(s) |
|
|
720
748
|
| `test` | `run` `check` | Test hook execution |
|
|
721
749
|
| `show` | `cat` `view` `s` | Display hook contents |
|
|
@@ -754,8 +782,8 @@ without a remote, rename the repo on GitHub/GitLab, or move it to a new host.
|
|
|
754
782
|
|
|
755
783
|
</details>
|
|
756
784
|
|
|
757
|
-
|
|
758
|
-
the interactive prompt:
|
|
785
|
+
The `set`, `change`, and `rename` modes accept an optional URL/name as a second
|
|
786
|
+
argument to skip the interactive prompt:
|
|
759
787
|
|
|
760
788
|
```bash
|
|
761
789
|
gitb origin # show remotes
|
|
@@ -775,7 +803,7 @@ gitb origin remove # delete the remote
|
|
|
775
803
|
| `<empty>` | | Show current configuration |
|
|
776
804
|
| `user` | `u` `name` `email` | Set name and email |
|
|
777
805
|
| `default` | `def` `d` `b` `main` | Set default branch |
|
|
778
|
-
| `separator` | `sep`
|
|
806
|
+
| `separator` | `sep` | Branch-name separator |
|
|
779
807
|
| `editor` | `ed` `e` | Commit-message editor |
|
|
780
808
|
| `ticket` | `ti` `t` `jira` | Ticket prefix for commits/branches |
|
|
781
809
|
| `scopes` | `sc` `s` | Common scopes |
|
|
@@ -783,6 +811,9 @@ gitb origin remove # delete the remote
|
|
|
783
811
|
| `provider` | `prov` | AI provider (openrouter, openai, ollama) |
|
|
784
812
|
| `model` | `m` | Default AI model |
|
|
785
813
|
| `proxy` | `prx` `p` | HTTP proxy for AI calls |
|
|
814
|
+
| `history` | `hist` | How many recent commits to include in AI prompts |
|
|
815
|
+
| `diff` | `payload` | AI diff payload size (line and character caps) |
|
|
816
|
+
| `push-size` | `ps` `pushsize` | Warn before pushing more than N MB (0 disables) |
|
|
786
817
|
| `completion` | `comp` | Install / uninstall bash & zsh tab completion |
|
|
787
818
|
| `delete` | `unset` `del` | Remove global config |
|
|
788
819
|
|
|
@@ -790,20 +821,50 @@ gitb origin remove # delete the remote
|
|
|
790
821
|
|
|
791
822
|
### `gitb log`
|
|
792
823
|
|
|
793
|
-
|
|
794
|
-
<summary>All log modes</summary>
|
|
824
|
+
An interactive commit browser instead of a wall of text. Bare `gitb log` shows a paginated, numbered commit list (with branch/tag decorations and `↑` on unpushed commits) — pick a number to open the commit and act on it: view the diff or stat, copy the hash, revert, cherry-pick, fix up staged changes into it, or restore a single file from it.
|
|
795
825
|
|
|
796
826
|
| Mode | Aliases | Description |
|
|
797
827
|
|------|---------|-------------|
|
|
798
|
-
|
|
|
828
|
+
| _(none)_ | | Interactive commit browser for the current branch |
|
|
829
|
+
| `all` | `dump` | Classic full log dump through the pager |
|
|
799
830
|
| `branch` | `b` | Pick a branch to log |
|
|
800
831
|
| `compare` | `comp` `c` | Compare two branches |
|
|
801
832
|
| `search` | `s` | Search commits |
|
|
833
|
+
| `ai` | | Summarize a commit range in plain English (needs `gitb cfg ai`) |
|
|
834
|
+
| `help` | `h` | Show inline help |
|
|
835
|
+
|
|
836
|
+
Anything else after `gitb log` is resolved automatically:
|
|
837
|
+
|
|
838
|
+
```bash
|
|
839
|
+
gitb log 20 # browse the last 20 commits
|
|
840
|
+
gitb log scripts/gitb.sh # browse one file's history (follows renames)
|
|
841
|
+
gitb log main..feature # browse a range (plain refs work too)
|
|
842
|
+
gitb log broken teapot # search commit messages for the phrase
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
`gitb log ai` summarizes what happened since the last tag; `gitb log ai 30`, `gitb log ai unpushed` and `gitb log ai main..feature` narrow the range. Page size is configurable: `git config gitbasher.log-count 30`.
|
|
846
|
+
|
|
847
|
+
<details>
|
|
848
|
+
<summary>Search sub-modes</summary>
|
|
802
849
|
|
|
803
850
|
**Search sub-modes:** `message`/`msg`/`m`, `author`/`a`, `file`/`f`, `content`/`pickaxe`/`p`, `date`/`d`, `hash`/`commit`/`h`.
|
|
804
851
|
|
|
805
852
|
</details>
|
|
806
853
|
|
|
854
|
+
### `gitb diff`
|
|
855
|
+
|
|
856
|
+
Overview-first diffs built for the gitbasher workflow — no flag memorization. Bare `gitb diff` shows a colorized stat of your uncommitted changes, then lets you pick a file to view its full patch.
|
|
857
|
+
|
|
858
|
+
| Mode | Aliases | Description |
|
|
859
|
+
|------|---------|-------------|
|
|
860
|
+
| _(none)_ | | Stat overview of uncommitted changes, then pick a file to view its full patch |
|
|
861
|
+
| `staged` | `s` `cached` | Show staged changes (`git diff --cached`) |
|
|
862
|
+
| `all` | `a` | Show all uncommitted changes — staged **and** unstaged (`git diff HEAD`) |
|
|
863
|
+
| `branch` | `b` | Compare the current branch against another, chosen interactively |
|
|
864
|
+
| `commit` | `c` | Show a chosen commit's diff, chosen interactively |
|
|
865
|
+
| `ai` | | Summarize uncommitted changes in plain English (needs `gitb cfg ai`) |
|
|
866
|
+
| `help` | `h` | Show inline help |
|
|
867
|
+
|
|
807
868
|
### Info commands
|
|
808
869
|
|
|
809
870
|
| Command | Aliases | Description |
|
|
@@ -824,15 +885,26 @@ gitb origin remove # delete the remote
|
|
|
824
885
|
| `user.name` / `user.email` | `gitb cfg user` | Your identity |
|
|
825
886
|
| `gitbasher.branch` | `gitb cfg default` | Default branch (`main`, `master`, …) |
|
|
826
887
|
| `gitbasher.sep` | `gitb cfg separator` | Branch-name separator (`/`, `-`, …) |
|
|
827
|
-
| `
|
|
888
|
+
| `core.editor` | `gitb cfg editor` | Editor for messages |
|
|
828
889
|
| `gitbasher.ticket` | `gitb cfg ticket` | Ticket prefix (`PROJ-`) |
|
|
829
890
|
| `gitbasher.scopes` | `gitb cfg scopes` | Suggested commit scopes |
|
|
830
|
-
| `gitbasher.ai-api-key
|
|
891
|
+
| `gitbasher.ai-api-key-<provider>` | `gitb cfg ai` | Per-provider AI API key (or `GITB_AI_API_KEY_<PROVIDER>` env); legacy `gitbasher.ai-api-key` is read as a fallback |
|
|
831
892
|
| `gitbasher.ai-provider` | `gitb cfg provider` | `openrouter` (default), `openai`, or `ollama` |
|
|
832
893
|
| `gitbasher.ai-base-url` | `git config` | Custom OpenAI-compatible endpoint (LiteLLM, vLLM, remote Ollama) |
|
|
833
894
|
| `gitbasher.ai-model[-task]` | `gitb cfg model` | AI model overrides (per provider) |
|
|
834
|
-
| `gitbasher.proxy` | `gitb cfg proxy` | HTTP proxy for AI calls |
|
|
835
|
-
| `gitbasher.
|
|
895
|
+
| `gitbasher.ai-proxy` | `gitb cfg proxy` | HTTP proxy for AI calls |
|
|
896
|
+
| `gitbasher.ai-ollama-host` | `git config gitbasher.ai-ollama-host <url>` | Ollama server URL (default `http://localhost:11434`) |
|
|
897
|
+
| `gitbasher.ai-timeout` | `git config gitbasher.ai-timeout <seconds>` | AI request timeout in seconds (default `60`, `300` for ollama) |
|
|
898
|
+
| `gitbasher.ai-diff-limit` | `gitb cfg diff` | Diff lines sent to AI (default `300`) |
|
|
899
|
+
| `gitbasher.ai-diff-max-chars` | `gitb cfg diff` | Character cap on the diff sent to AI (default `20000`) |
|
|
900
|
+
| `gitbasher.ai-commit-history-limit` | `gitb cfg history` | Recent commits included in AI prompts (default `10`) |
|
|
901
|
+
| `gitbasher.push-warn-size` | `gitb cfg push-size` | Warn before pushing more than N MB (default `50`, `0` disables) |
|
|
902
|
+
| `gitbasher.worktreebase` | `git config gitbasher.worktreebase <dir>` | Base directory for new worktrees (default `.worktree` under the repo root) |
|
|
903
|
+
| `gitbasher.commit-auto-split` | `git config gitbasher.commit-auto-split <ask\|always\|never>` | Offer to split a commit per scope (default `ask`) |
|
|
904
|
+
| `gitbasher.commit-max-split-groups` | `git config gitbasher.commit-max-split-groups <2..20>` | Cap on split commits per run (default `7`) |
|
|
905
|
+
| `gitbasher.commit-split-order` | `git config gitbasher.commit-split-order <auto\|alpha>` | Order split commits by dependency (`auto`, default) or alphabetically (`alpha`) |
|
|
906
|
+
| `gitbasher.commit-ai-grouping` | `git config gitbasher.commit-ai-grouping <never\|auto\|always>` | AI feature grouping for commit splits (default `auto`) |
|
|
907
|
+
| `gitbasher.log-count` | `git config gitbasher.log-count <n>` | Commits per page in the `gitb log` browser (default `20`) |
|
|
836
908
|
|
|
837
909
|
**Clear gitbasher config** (per-repo settings live with the repo and disappear with it):
|
|
838
910
|
```bash
|
|
@@ -868,7 +940,7 @@ GITB_DIR=/opt/bin curl -fsSL https://raw.githubusercontent.com/maxbolgarin/gitba
|
|
|
868
940
|
|
|
869
941
|
### Pin a release
|
|
870
942
|
```bash
|
|
871
|
-
GITB_VERSION=
|
|
943
|
+
GITB_VERSION=v5.0.0 curl -fsSL https://raw.githubusercontent.com/maxbolgarin/gitbasher/main/install.sh | bash
|
|
872
944
|
```
|
|
873
945
|
|
|
874
946
|
## Uninstall
|
|
@@ -925,9 +997,10 @@ gitb cfg proxy # in restricted regions
|
|
|
925
997
|
|
|
926
998
|
If `gitb commit ai` hangs, returns `connection refused`, or times out:
|
|
927
999
|
|
|
1000
|
+
- **jq missing** — all AI features require `jq` (check with `command -v jq`; install via `brew install jq` / `apt install jq`). Without it every AI command aborts with an install hint.
|
|
928
1001
|
- **Network reachability** — test the provider directly: `curl -fsSL https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"` (or the equivalent for OpenRouter/Ollama). If that fails, gitbasher will too.
|
|
929
1002
|
- **Corporate proxy / restricted region** — `gitb cfg proxy` accepts `host:port` or `protocol://host:port`. Verify with `curl -x "$proxy" https://api.openai.com`.
|
|
930
|
-
- **Local Ollama** — confirm the daemon is running (`curl http://localhost:11434/api/tags`). The default model must be pulled first (`ollama pull
|
|
1003
|
+
- **Local Ollama** — confirm the daemon is running (`curl http://localhost:11434/api/tags`). The default model must be pulled first (`ollama pull qwen3:8b`).
|
|
931
1004
|
- **Stale or rotated key** — `gitb cfg ai` re-prompts; prefer the env-var path (`export GITB_AI_API_KEY_OPENAI=...`) over `git config` so a leaked repo doesn't carry the secret.
|
|
932
1005
|
</details>
|
|
933
1006
|
|
|
@@ -949,9 +1022,9 @@ Per-repo settings live in `.git/config` and need write access to that file (`chm
|
|
|
949
1022
|
<details>
|
|
950
1023
|
<summary><b>"Bad substitution" or bash errors</b></summary>
|
|
951
1024
|
|
|
952
|
-
`bash --version` must be
|
|
1025
|
+
`bash --version` must be 3.2+ — the version macOS ships as `/bin/bash` — so this is rare.
|
|
953
1026
|
|
|
954
|
-
- macOS:
|
|
1027
|
+
- macOS: already ships bash 3.2; gitbasher runs on it natively (a newer bash via `brew install bash` only improves in-place line editing of prefilled prompts)
|
|
955
1028
|
- Ubuntu/Debian: `sudo apt update && sudo apt install --only-upgrade bash`
|
|
956
1029
|
</details>
|
|
957
1030
|
|
|
@@ -960,9 +1033,11 @@ Per-repo settings live in `.git/config` and need write access to that file (`chm
|
|
|
960
1033
|
|
|
961
1034
|
| OS | Bash | Git | Install |
|
|
962
1035
|
|----|------|-----|---------|
|
|
963
|
-
| Linux |
|
|
964
|
-
| macOS |
|
|
1036
|
+
| Linux | 3.2+ | 2.23+ | `apt install bash git` |
|
|
1037
|
+
| macOS | 3.2+ (system) | 2.23+ | `brew install git` |
|
|
965
1038
|
| Windows | WSL | WSL | `wsl --install` then Linux steps |
|
|
1039
|
+
|
|
1040
|
+
AI features additionally require `jq` (`brew install jq` / `apt install jq`); core git commands don't.
|
|
966
1041
|
</details>
|
|
967
1042
|
|
|
968
1043
|
<details>
|
|
@@ -979,7 +1054,7 @@ Per-repo settings live in `.git/config` and need write access to that file (`chm
|
|
|
979
1054
|
| `Another git process seems to be running ... index.lock` | gitbasher detects this at startup and prompts to remove the stale lock |
|
|
980
1055
|
| `error: pathspec '<branch>' did not match any file(s) known to git` | `gitb pull` to fetch, or `gitb b new <branch>` to create a fresh branch with a conventional name |
|
|
981
1056
|
| `fatal: detached HEAD` after checkout | gitbasher warns before destructive ops in detached HEAD; use `gitb b` to switch to a real branch first |
|
|
982
|
-
| `gpg: signing failed` on commit | export `GPG_TTY=$(tty)` or run `
|
|
1057
|
+
| `gpg: signing failed` on commit | export `GPG_TTY=$(tty)` or run `git config commit.gpgsign false` to disable signing per-repo |
|
|
983
1058
|
|
|
984
1059
|
If you hit a confusing git error not listed here, run the same flow with `git` directly first — gitbasher passes git's stderr through unchanged, so the underlying message is the source of truth.
|
|
985
1060
|
</details>
|
|
@@ -991,7 +1066,6 @@ If you hit a confusing git error not listed here, run the same flow with `git` d
|
|
|
991
1066
|
npm uninstall -g gitbasher # if installed via npm
|
|
992
1067
|
sudo rm /usr/local/bin/gitb # if installed system-wide
|
|
993
1068
|
rm -f ~/.local/bin/gitb # if installed per-user
|
|
994
|
-
rm -rf ~/.gitbasher # remove config (optional)
|
|
995
1069
|
```
|
|
996
1070
|
</details>
|
|
997
1071
|
|
|
@@ -1005,7 +1079,7 @@ PRs welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) for the dev setup, BATS te
|
|
|
1005
1079
|
|
|
1006
1080
|
```bash
|
|
1007
1081
|
make build # rebuild dist/gitb
|
|
1008
|
-
make test # run all
|
|
1082
|
+
make test # run all 870+ tests
|
|
1009
1083
|
make test-file FILE=test_sanitization.bats
|
|
1010
1084
|
```
|
|
1011
1085
|
|