Gå til indhold

CLI Reference

Pitmaster indeholder en CLI, der afspejler et udvalg af git-kommandoer. Den arbejder på repositoryet i den aktuelle arbejdsmappe.

Shell
./vendor/bin/pitmaster <command> [args...]

Ved en Composer-installation er scriptet ./vendor/bin/pitmaster; siden 0.2.11 finder det projektets autoloader dér. Kør ./bin/pitmaster efter composer install i en checkout af selve repositoryet Pitmaster. Eksemplerne nedenfor bruger pitmaster til begge stier. Hvis du kører det uden argumenter, vises kommandolisten.

Revisioner findes på samme måde som Repository::resolve(): HEAD, grene- og tagnavne, fulde ref-navne, fulde hasher samt udtrykkene ~N / ^N. Forkortede hasher accepteres ikke. Clone, fetch og push er kun tilgængelige via PHP API.

Kommandoer

log

Vis commithistorikken med de nyeste commits først.

Shell
# 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's stavemåder for grænser (-n N, -nN, --max-count N, --max-count=N, -N) blev tilføjet i 0.2.11. Et rent tal er Pitmasters egen kortform for grænsen. Det første øvrige argument er et stimfilter; alt efter -- behandles som stien. Ethvert andet argument, der begynder med -, viser fatal: unrecognized argument: <arg> og afslutter med 128.

Outputtet indeholder commit <hash> (gul), en Merge:-linje for merge-commits, Author: med den rå identitet (navn, e-mail, tidsstempel og tidszone) samt commitmeddelelsen med indrykning. --oneline viser abc1234 Subject. Stimfilteret matcher én nøjagtig filsti og undersøger kun de nyeste fem gange grænseværdien commits (#7).

show

Vis commitdetaljer og diff i forhold til den første overordnede commit.

Shell
# Show HEAD
pitmaster show

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

Viser commitmetadata (med en Date:-linje) efterfulgt af en samlet diff. For et annoteret tag vises tagheaderen og meddelelsen først. Farver bruges kun, når stdout er en terminal. Merge-commits vises uden diff.

cat-file

Udskriv det rå indhold af et git-objekt.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Kræver en fuld hash. Udskriver objektets lagrede indhold: blobs, commits og tags som tekst, træer i binært format. I modsætning til git cat-file -p vises træer ikke i læsevenligt format.

status

Vis arbejdstræets status.

Shell
pitmaster status
pitmaster status --porcelain=v2

Output:

Kode
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

Filer i staging vises med grønt, mens filer, der ikke er i staging, ikke-flettede og ikke-sporede filer vises med rødt. En Unmerged paths:-sektion vises under en konfliktbehæftet merge. En frigjort HEAD viser HEAD detached, og et rent træ viser nothing to commit, working tree clean. --porcelain=v2 viser outputtet fra Repository::statusPorcelainV2().

diff

Vis ændringer mellem indekset og arbejdstræet (ændringer, der ikke er sat i staging).

Shell
# 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

Outputtet er en farvelagt samlet diff, også når stdout ikke er en terminal. Det svarer til git diff for ændrede tekstfiler; nye, slettede, binære, omdøbte filer og filer med ændret tilstand formateres anderledes (se Diff). diff --cached viser intet før det første commit (#5).

add

Sæt filer i staging til næste commit.

Shell
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md

Hver fil læses fra arbejdstræet, skrives som et blobobjekt, og indekset opdateres. Argumenterne er filstier; mapper og . udvides ikke.

commit

Opret et commit ud fra filerne i staging.

Shell
pitmaster commit -m "Add new feature"

Output:

Kode
[main abc1234] Add new feature

-m er påkrævet, undtagen når en stoppet merge, cherry-pick, revert eller rebase afsluttes; her bruges den forberedte meddelelse. Forfatter og committer findes ud fra miljøvariabler, konstanter og .git/config som beskrevet i Kom godt i gang.

branch

Vis grene, eller opret en ny.

Shell
# 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

Output ved visning af grene:

Kode
  bugfix/typo
  feature/login
* main

Oprettelse viser Created branch <name>, sletning viser Deleted branch <name>. -d og -D gør det samme: Ingen af dem kontrollerer, om grenen er flettet ind, og begge afviser at slette den gren, der er tjekket ud.

tag

Vis tags, eller opret et nyt.

Shell
# 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"

Oprettelse viser Created tag <name>.

checkout

Skift gren, eller frigør HEAD.

Shell
# Switch to a branch
pitmaster checkout feature/login

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

Opdaterer HEAD, indekset og arbejdstræet, så de svarer til målet, og viser Switched to '<target>'. Afviser handlingen, hvis lokale ændringer eller ikke-sporede filer ligger på stier, der er forskellige mellem de to træer. Ikke-committede ændringer i andre sporede filer overskrives med måltræets indhold, hvor git ville bevare dem (#2); commit eller stash dem først.

merge

Flet en eller flere grene ind i den aktuelle HEAD, eller fortsæt/afbryd en igangværende konflikt i en merge.

Shell
# 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

Output ved succes:

Kode
Merge successful.

Output ved konflikt (på stderr, afslutningskode 1):

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

-s accepterer ours, ort og recursive; ort og recursive bruger begge standardmergen. Med -s viser CLI Merge successful. og afslutter med 0, selv når mergingen er stoppet på grund af konflikter (#21), så kontrollér status bagefter. merge --continue uden en igangværende merge afslutter med 128. Fletning af en gren, der allerede er flettet ind, opretter endnu et merge-commit (#6), og ikke-committede ændringer i sporede filer overskrives som ved checkout.

cherry-pick

Anvend et commit oven på den aktuelle HEAD, eller fortsæt/afbryd en igangværende konflikt.

Shell
# 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

Viser intet ved succes. --continue og --abort afslutter med 128, hvis der ikke er en igangværende cherry-pick.

revert

Opret et revert-commit, eller fortsæt/afbryd en igangværende konflikt.

Shell
# 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

Viser intet ved succes. --continue og --abort afslutter med 128, hvis der ikke er en igangværende revert.

rebase

Rebase den aktuelle gren oven på en anden ref.

Shell
# 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

Viser intet ved succes. --continue, --skip og --abort viser fatal: no rebase in progress og afslutter med 128, hvis der ikke er en igangværende rebase.

bisect

Find det commit, der indførte en ændring, ved hjælp af binærsøgning.

Shell
# 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 og bad viser den fulde hash for den næste kandidat, som tjekkes ud. Når der kun er én mistænkt tilbage, vises den samme hash igen: Dette commit er det første dårlige commit. I modsætning til git vises der ikke en oversigt med "is the first bad commit".

stash

Gem og gendan ændringer i arbejdsbiblioteket.

Shell
# 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

Meddelelsen er argumentet efter push eller save; -m understøttes ikke og ville blive gemt som meddelelsen. pop, apply og drop bruger altid stash@{0}. De viser Saved working directory to stash abc1234, Applied and dropped stash, Applied stash og Dropped stash.

Output fra stash-listen:

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

Med mere end én post lader drop og pop i øjeblikket posten blive i listen (#10), og apply overskriver ikke-committede ændringer i filer, som stash ikke berører (#11).

blame

Vis, hvem der har skrevet hver linje i en fil ved HEAD.

Shell
pitmaster blame src/Repository.php

Output:

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

Hver linje viser de første 8 tegn af commit-hashen og de første 30 tegn af forfatteridentiteten (Name <email> timestamp timezone) uden udfyldning.

grep

Søg i filindhold i det aktuelle HEAD-træ.

Shell
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"

Output:

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

Valgmuligheder skal stå før mønsteret:

  • -i, --ignore-case: match uden forskel på store og små bogstaver
  • -E, --extended-regexp, --regex: behandl mønsteret som et regulært PCRE-udtryk

Output er ren path:line:content uden farver.

reflog

Vis reflog-poster med den nyeste først.

Shell
# 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"

Standardformatet er %gd: %gs (HEAD@{0}: commit: Add feature). Understøttede pladsholdere: %gd og %gD (vælger), %gs (meddelelse), %H og %h (ny hash i fuld og kort form). Grænser accepterer -n N, -nN og --max-count N; -n 0 udskriver alle poster.

Repositories oprettet af pitmaster init registrerer ikke reflogs, medmindre core.logallrefupdates er sat til true i .git/config (#8), så reflog ikke udskriver noget dér, før det er tilfældet.

refs

Vis alle refs med deres hasher.

Shell
pitmaster refs

Output:

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

Hasherne udskrives i fuld længde.

reset

Nulstil HEAD til en bestemt commit.

Shell
# 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

En revision er påkrævet. Output:

Kode
HEAD is now at abc1234

init

Initialiser et nyt repository. Dette er den eneste kommando, der ikke kræver et eksisterende repository.

Shell
# 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

Output:

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

--object-format accepterer sha1 (standard) og sha256.

Afslutningskoder

Kode Betydning
0 Succes
1 Kommandofejl: brugsfejl, ukendt kommando, mislykket handling (error: <message>) eller en merge, der blev stoppet på grund af konflikter
128 Ikke et git-repository (fatal: <message>), et argument til log, der ikke genkendes, eller --continue / --abort / --skip uden en igangværende handling