
# CLI viide

Pitmaster sisaldab git-käskude alamhulka jäljendavat CLI. See töötab praeguse töökataloogi hoidlas.

```bash
./vendor/bin/pitmaster <command> [args...]
```

Composer paigalduse korral on skript asukohas `./vendor/bin/pitmaster`; alates versioonist 0.2.11 leiab see sealt projekti autolaaduri. Pitmaster hoidla väljavõttes käivita `./bin/pitmaster` pärast `composer install`. Alltoodud näidetes kasutatakse mõlema tee jaoks `pitmaster`. Argumentideta käivitamisel kuvatakse käskude loend.

Versioone lahendatakse nagu `Repository::resolve()` puhul: `HEAD`, haru- ja sildinimed, täielikud viitenimed, täielikud räsid ning avaldised `~N` / `^N`. Lühendatud räsi ei aktsepteerita. Kloonimine, toomine ja lükkamine on saadaval ainult PHP API kaudu.

## Käsud

### `log`

Kuva kinnistuste ajalugu, uusim eespool.

```bash
# Default: last 10 commits
pitmaster log

# Limit the number of commits
pitmaster log 25
pitmaster log -n 3
pitmaster log -n3
pitmaster log --max-count 3
pitmaster log --max-count=3
pitmaster log -3

# Commits that touch one file
pitmaster log src/Repository.php
pitmaster log -- src/Repository.php

# Commits reachable from all refs, and one line per commit
pitmaster log --all
pitmaster log --oneline
```

git-i piirangu kirjapildid (`-n N`, `-nN`, `--max-count N`, `--max-count=N`, `-N`) lisati versioonis 0.2.11. Paljas arv on Pitmaster enda lühikirjapilt piirangu jaoks. Esimene muu argument on teefilter; kõike pärast `--` käsitletakse teena. Mis tahes muu argument, mis algab `-`-ga, kuvab `fatal: unrecognized argument: <arg>` ja väljub koodiga 128.

Väljund sisaldab `commit <hash>` (kollane), liitmiskinnituste rida `Merge:`, töötlemata identiteediga kirjet `Author:` (nimi, e-post, ajatempel ja ajavöönd) ning taandega kinnituse sõnumit. `--oneline` kuvab `abc1234 Subject`. Teefilter sobib täpselt ühe failiteega ning vaatab läbi ainult piirangule vastava viie uusima kinnistuse ([#7](https://github.com/inline0/pitmaster/issues/7)).

### `show`

Kuva kinnistuse üksikasjad ja erinevus esimese eellasega.

```bash
# Show HEAD
pitmaster show

# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f
```

Kuvab kinnistuse metaandmed (koos reaga `Date:`), millele järgneb ühtne erinevuste kuvamine. Annoteeritud sildi korral kuvatakse esmalt sildi päis ja sõnum. Värve kasutatakse ainult siis, kui stdout on terminal. Liitmiskinnitusi kuvatakse erinevusteta.

### `cat-file`

Prindi git-objekti töötlemata sisu.

```bash
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
```

Võtab täieliku räsi. Prindib objekti salvestatud sisu: bloobid, kinnistused ja sildid tekstina, puud binaarsel kujul. Erinevalt käsust `git cat-file -p` ei kuvata puid ilusamalt vormindatuna.

### `status`

Kuva tööpuu olek.

```bash
pitmaster status
pitmaster status --porcelain=v2
```

Väljund:

```
On branch main

Changes to be committed:
	new file:   src/Feature.php

Changes not staged for commit:
	modified:   src/Existing.php

Untracked files:
	notes.txt
```

Lisatud failid kuvatakse rohelisena, lisamata, ühendamata ja jälgimata failid punasena. Konfliktse liitmise ajal kuvatakse jaotis `Unmerged paths:`. Eraldiseisev HEAD prindib `HEAD detached`, puhas puu aga `nothing to commit, working tree clean`. `--porcelain=v2` prindib käsu `Repository::statusPorcelainV2()` väljundi.

### `diff`

Kuva muudatused indeksi ja tööpuu vahel (lisamata muudatused).

```bash
# Unstaged changes
pitmaster diff

# Staged changes (index vs HEAD)
pitmaster diff --cached
pitmaster diff --staged

# Choose the algorithm
pitmaster diff --patience
pitmaster diff --histogram
pitmaster diff --minimal
```

Väljund on värviline ühtne erinevuste kuvamine ka siis, kui stdout pole terminal. Muudetud tekstifailide korral vastab see käsu `git diff` väljundile; uusi, kustutatud, binaarseid, ümbernimetatud ja režiimi muudetud faile vormindatakse teisiti (vt [Erinevused](https://pitmaster.inline0.dev/et/docs/operations/diff)). `diff --cached` ei prindi midagi enne esimest kinnitust ([#5](https://github.com/inline0/pitmaster/issues/5)).

### `add`

Lisa failid järgmise kinnituse jaoks alasse.

```bash
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md
```

Iga fail loetakse tööpuust, kirjutatakse bloobiobjektina ja indeksit uuendatakse. Argumendid on failiteed; katalooge ja `.` ei laiendata.

### `commit`

Loo lisatud failidest kinnistus.

```bash
pitmaster commit -m "Add new feature"
```

Väljund:

```
[main abc1234] Add new feature
```

`-m` on nõutav, välja arvatud peatatud liitmise, valikkorje, tagasipööramise või alustamise lõpetamisel, mil kasutatakse ettevalmistatud sõnumit. Autor ja kinnitaja leitakse keskkonnamuutujatest, konstantidest ning `.git/config` kaudu, nagu kirjeldatud juhendis [Alustamine](https://pitmaster.inline0.dev/et/docs/getting-started).

### `branch`

Loetle harusid või loo uus haru.

```bash
# List all branches (current marked with *)
pitmaster branch

# Create a new branch from HEAD
pitmaster branch feature/new-thing

# Delete a branch
pitmaster branch -d feature/old
pitmaster branch -D feature/old
```

Loendi väljund:

```
  bugfix/typo
  feature/login
* main
```

Loomisel prinditakse `Created branch <name>`, kustutamisel `Deleted branch <name>`. `-d` ja `-D` toimivad ühtemoodi: kumbki ei kontrolli, kas haru on liidetud, ning mõlemad keelduvad aktiivse haru kustutamisest.

### `tag`

Loetle silte või loo uus silt.

```bash
# List all tags
pitmaster tag

# Create a lightweight tag at HEAD
pitmaster tag v1.0.0

# Create an annotated tag at HEAD
pitmaster tag v2.0.0 -m "Release version 2.0.0"
```

Loomisel prinditakse `Created tag <name>`.

### `checkout`

Vaheta harusid või lahuta HEAD.

```bash
# Switch to a branch
pitmaster checkout feature/login

# Detach HEAD at a tag or commit
pitmaster checkout v1.0.0
pitmaster checkout HEAD~2
```

Uuendab HEAD-i, indeksit ja tööpuud nii, et need vastaksid sihtkohale, ning prindib `Switched to '<target>'`. Keeldub, kui kohalikke muudatusi või jälgimata faile on radadel, mis kahe puu vahel erinevad. Teistes jälgitavates failides olevad kinnitamata muudatused kirjutatakse sihtkoha sisuga üle; git jätaks need alles ([#2](https://github.com/inline0/pitmaster/issues/2)). Kinnita või pane need esmalt kõrvale.

### `merge`

Liida üks või mitu haru praeguse HEAD-iga või jätka/katkesta pooleliolev konfliktne liitmine.

```bash
# Start a merge
pitmaster merge feature/login

# Merge with a strategy
pitmaster merge -s ours feature/login

# Octopus merge of several branches
pitmaster merge feature/a feature/b

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster merge --continue

# Abort and restore the pre-merge state
pitmaster merge --abort
```

Eduka toimingu väljund:

```
Merge successful.
```

Konflikti korral väljastatav väljund (stderr, väljumiskood 1):

```
CONFLICT in: src/File.php, src/Other.php
```

`-s` aktsepteerib valikuid `ours`, `ort` ja `recursive`; `ort` ja `recursive` kasutavad mõlemad vaikimisi liitmist. Valikuga `-s` prindib CLI konfliktide tõttu peatunud liitmise korral `Merge successful.` ja väljub koodiga 0 ([#21](https://github.com/inline0/pitmaster/issues/21)), seega kontrolli pärast seda `status`. `merge --continue` ilma poolelioleva liitmiseta väljub koodiga 128. Juba liidetud haru liitmisel tekib veel üks liitmiskinnitus ([#6](https://github.com/inline0/pitmaster/issues/6)) ning jälgitavate failide kinnitamata muudatused kirjutatakse üle nagu käsuga `checkout`.

### `cherry-pick`

Rakenda kinnitus praeguse HEAD-i peale või jätka/katkesta pooleliolevat konflikti.

```bash
# Start a cherry-pick
pitmaster cherry-pick feature~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster cherry-pick --continue

# Abort and restore HEAD
pitmaster cherry-pick --abort
```

Eduka toimingu korral ei prindita midagi. `--continue` ja `--abort` väljuvad koodiga 128, kui valikkorje pole pooleli.

### `revert`

Loo tagasipööramise kinnitus või jätka/katkesta pooleliolevat konflikti.

```bash
# Start a revert
pitmaster revert HEAD~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster revert --continue

# Abort and restore HEAD
pitmaster revert --abort
```

Eduka toimingu korral ei prindita midagi. `--continue` ja `--abort` väljuvad koodiga 128, kui tagasipööramine pole pooleli.

### `rebase`

Sea praegune haru uue baasviite peale.

```bash
# Start a rebase
pitmaster rebase main

# Continue after resolving conflicts
pitmaster rebase --continue

# Skip the current commit
pitmaster rebase --skip

# Abort and restore the original branch tip
pitmaster rebase --abort
```

Eduka toimingu korral ei prindita midagi. `--continue`, `--skip` ja `--abort` prindivad ilma poolelioleva alustamiseta `fatal: no rebase in progress` ja väljuvad koodiga 128.

### `bisect`

Leia binaarotsinguga kinnistus, mis muutuse sisse tõi.

```bash
# Start with a bad and a good revision; checks out and prints the first candidate
pitmaster bisect start HEAD v1.0.0

# Mark the checked-out candidate (or a given revision)
pitmaster bisect good
pitmaster bisect bad
pitmaster bisect bad HEAD~3

# End the session and return to the starting branch
pitmaster bisect reset
```

`start`, `good` ja `bad` prindivad järgmise kandidaadi täieliku räsi ja lülituvad sellele. Kui alles jääb üks kahtlusalune, prinditakse sama räsi uuesti: see kinnistus on esimene vigane. Erinevalt git-ist ei prindita kokkuvõtet „is the first bad commit”.

### `stash`

Salvesta ja taasta töökausta muudatused.

```bash
# Save current changes (push)
pitmaster stash
pitmaster stash push
pitmaster stash push "Work in progress on login"
pitmaster stash save "Work in progress on login"

# Apply and remove the top stash entry
pitmaster stash pop

# Apply without removing
pitmaster stash apply

# List stash entries
pitmaster stash list

# Drop the top stash entry
pitmaster stash drop
```

Sõnum on argument pärast valikut `push` või `save`; valikut `-m` ei toetata ja see salvestataks sõnumina. `pop`, `apply` ja `drop` kasutavad alati valikut `stash@{0}`. Need prindivad `Saved working directory to stash abc1234`, `Applied and dropped stash`, `Applied stash` ja `Dropped stash`.

Kõrvale pandud muudatuste loendi väljund:

```
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature
```

Kui kirjeid on mitu, jätavad `drop` ja `pop` praegu kirje loendisse ([#10](https://github.com/inline0/pitmaster/issues/10)), ning `apply` kirjutab üle kinnitamata muudatused failides, mida kõrvale pandud muudatused ei puuduta ([#11](https://github.com/inline0/pitmaster/issues/11)).

### `blame`

Kuva faili ridade autorid HEAD-is.

```bash
pitmaster blame src/Repository.php
```

Väljund:

```
a1b2c3d4 (Jane Smith <jane@example.com> ) <?php
a1b2c3d4 (Jane Smith <jane@example.com> )
f5e6d7c8 (Ann Lee <ann@example.com> 1700) declare(strict_types=1);
```

Igal real kuvatakse kinnituse räsi esimesed 8 märki ja autori identiteedi esimesed 30 märki (`Name <email> timestamp timezone`), ilma täiteta.

### `grep`

Otsi failisisu praegusest HEAD-i puust.

```bash
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"
```

Väljund:

```
src/Repository.php:2257:    public function merge(string $branch, string $strategy = 'recursive'): MergeResult
src/Merge/ThreeWayMerge.php:23:    public static function merge(
```

Valikud peavad eelnema mustrile:

- `-i`, `--ignore-case`: tõstutundetu vasteotsing
- `-E`, `--extended-regexp`, `--regex`: käsitle mustrit PCRE regulaaravaldisena

Väljund on lihttekst `path:line:content` ilma värvideta.

### `reflog`

Kuva reflogi kirjed, uusim eespool.

```bash
# HEAD reflog (default: 10 entries)
pitmaster reflog

# Another ref, a custom limit, and a format
pitmaster reflog show refs/heads/main
pitmaster reflog -n 5
pitmaster reflog --format="%h %gs"
```

Vaikevorming on `%gd: %gs` (`HEAD@{0}: commit: Add feature`). Toetatud kohatäited: `%gd` ja `%gD` (valija), `%gs` (sõnum), `%H` ja `%h` (uus täielik ja lühike räsi). Piirangus aktsepteeritakse `-n N`, `-nN` ja `--max-count N`; `-n 0` prindib kõik kirjed.

`pitmaster init` loodud hoidlad ei salvesta refloge, kui `core.logallrefupdates` pole failis `.git/config` väärtuseks `true` määratud ([#8](https://github.com/inline0/pitmaster/issues/8)); seega ei prindi `reflog` seal enne selle seadmist midagi.

### `refs`

Loetle kõik viited koos nende räsiga.

```bash
pitmaster refs
```

Väljund:

```
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0
```

Räsid prinditakse täielikult.

### `reset`

Lähtesta HEAD kindlale kinnistusele.

```bash
# Mixed reset (HEAD + index, default)
pitmaster reset HEAD~1
pitmaster reset --mixed HEAD~1

# Soft reset (HEAD only)
pitmaster reset --soft HEAD~1

# Hard reset (HEAD + index + worktree)
pitmaster reset --hard HEAD~3
```

Versioon on nõutav. Väljund:

```
HEAD is now at abc1234
```

### `init`

Lähtesta uus hoidla. See on ainus käsk, mis ei vaja olemasolevat hoidlat.

```bash
# Initialize in the current directory
pitmaster init

# Initialize at a specific path
pitmaster init /path/to/new-project

# Create a SHA-256 repository
pitmaster init --object-format=sha256
pitmaster init /path/to/new-project --object-format=sha256
```

Väljund:

```
Initialized empty Pitmaster repository in /path/to/new-project/.git/
```

`--object-format` aktsepteerib valikuid `sha1` (vaikimisi) ja `sha256`.

## Väljumiskoodid

| Kood | Tähendus |
|------|---------|
| 0 | Edu |
| 1 | Käsuviga: kasutusviga, tundmatu käsk, ebaõnnestunud toiming (`error: <message>`) või konfliktide tõttu peatunud liitmine |
| 128 | Pole git-hoidla (`fatal: <message>`), tundmatu argument `log` või `--continue` / `--abort` / `--skip` ilma poolelioleva toiminguta |
