Saltar al contenido

Referencia de CLI

Pitmaster incluye un CLI que replica un subconjunto de los comandos de git. Opera en el repositorio del directorio de trabajo actual.

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

En una instalación de Composer, el script es ./vendor/bin/pitmaster; desde 0.2.11 encuentra allí el cargador automático del proyecto. En una copia del propio repositorio de Pitmaster, ejecuta ./bin/pitmaster después de composer install. Los ejemplos siguientes usan pitmaster para cualquiera de las rutas. Si se ejecuta sin argumentos, muestra la lista de comandos.

Las revisiones se resuelven como en Repository::resolve(): HEAD, nombres de ramas y etiquetas, nombres de referencia completos, hashes completos y expresiones ~N / ^N. No se aceptan hashes abreviados. Clonar, obtener y enviar datos solo están disponibles mediante PHP API.

Comandos

log

Muestra el historial de commits, del más reciente al más antiguo.

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

Las formas de límite de git (-n N, -nN, --max-count N, --max-count=N, -N) se añadieron en 0.2.11. Un número sin más es la abreviatura propia de Pitmaster para el límite. El primer argumento restante es un filtro de ruta; todo lo que sigue a -- se trata como la ruta. Cualquier otro argumento que empiece por - muestra fatal: unrecognized argument: <arg> y termina con el código 128.

La salida incluye commit <hash> (amarillo), una línea Merge: para los commits de fusión, Author: con la identidad sin procesar (nombre, correo, marca de tiempo y zona horaria), y el mensaje del commit con sangría. --oneline muestra abc1234 Subject. El filtro de ruta coincide con una ruta de archivo exacta y examina solo los cinco commits más recientes según el límite (#7).

show

Muestra los detalles del commit y las diferencias con respecto al primer padre.

Shell
# Show HEAD
pitmaster show

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

Muestra los metadatos del commit (con una línea Date:) seguidos de una diferencia unificada. Para una etiqueta anotada, primero muestra el encabezado y el mensaje de la etiqueta. Solo usa colores cuando stdout es una terminal. Los commits de fusión se muestran sin diferencias.

cat-file

Muestra el contenido sin procesar de un objeto de git.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Recibe un hash completo. Muestra el contenido almacenado del objeto: blobs, commits y etiquetas como texto; árboles en su forma binaria. A diferencia de git cat-file -p, los árboles no se muestran con formato legible.

status

Muestra el estado del árbol de trabajo.

Shell
pitmaster status
pitmaster status --porcelain=v2

Salida:

Código
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

Los archivos preparados se muestran en verde; los no preparados, sin fusionar y sin seguimiento, en rojo. Durante una fusión con conflictos aparece una sección Unmerged paths:. Un HEAD separado muestra HEAD detached y un árbol limpio muestra nothing to commit, working tree clean. --porcelain=v2 muestra la salida de Repository::statusPorcelainV2().

diff

Muestra los cambios entre el índice y el árbol de trabajo (cambios no preparados).

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

La salida es una diferencia unificada con colores, también cuando stdout no es una terminal. Para archivos de texto modificados, coincide con git diff; los archivos nuevos, eliminados, binarios, renombrados o con cambios de modo se muestran de otra forma (consulta Diferencias). diff --cached no muestra nada antes del primer commit (#5).

add

Prepara archivos para el siguiente commit.

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

Cada archivo se lee desde el árbol de trabajo, se escribe como un objeto blob y se actualiza el índice. Los argumentos son rutas de archivos; los directorios y . no se expanden.

commit

Crea un commit con los archivos preparados.

Shell
pitmaster commit -m "Add new feature"

Salida:

Código
[main abc1234] Add new feature

Se requiere -m, excepto al completar una fusión, selección de commit, reversión o cambio de base detenido, en cuyo caso se usa el mensaje preparado. El autor y el confirmador se determinan a partir de variables de entorno, constantes y .git/config, como se describe en Primeros pasos.

branch

Enumera las ramas o crea una nueva.

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

Salida al enumerar:

Código
  bugfix/typo
  feature/login
* main

Al crear, muestra Created branch <name>; al eliminar, muestra Deleted branch <name>. -d y -D funcionan igual: ninguno comprueba si la rama ya se fusionó y ambos se niegan a eliminar la rama activa.

tag

Enumera las etiquetas o crea una nueva.

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"

Al crear, muestra Created tag <name>.

checkout

Cambia de rama o separa 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

Actualiza HEAD, el índice y el árbol de trabajo para que coincidan con el destino y muestra Switched to '<target>'. Se niega a continuar si hay cambios locales o archivos sin seguimiento en rutas que difieren entre los dos árboles. Los cambios sin confirmar en otros archivos con seguimiento se sobrescriben con el contenido del destino, incluso donde git los conservaría (#2); confírmelos o guárdelos antes.

merge

Fusiona una o varias ramas en el HEAD actual, o continúa o cancela un conflicto de fusión en curso.

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

Salida si la operación tiene éxito:

Código
Merge successful.

Salida si hay conflictos (por stderr, código de salida 1):

Código
CONFLICT in: src/File.php, src/Other.php

-s acepta ours, ort y recursive; tanto ort como recursive usan la fusión predeterminada. Con -s, CLI muestra Merge successful. y termina con código 0 incluso si la fusión se detuvo por conflictos (#21), así que comprueba status después. merge --continue sin una fusión en curso termina con el código 128. Fusionar una rama ya fusionada crea otro commit de fusión (#6), y los cambios sin confirmar en archivos con seguimiento se sobrescriben igual que con checkout.

cherry-pick

Aplica un commit sobre el HEAD actual, o continúa o cancela un conflicto en curso.

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

Si tiene éxito, no muestra nada. --continue y --abort terminan con el código 128 si no hay una selección de commit en curso.

revert

Crea un commit de reversión, o continúa o cancela un conflicto en curso.

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

Si tiene éxito, no muestra nada. --continue y --abort terminan con el código 128 si no hay una reversión en curso.

rebase

Cambia la base de la rama actual a otra referencia.

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

Si tiene éxito, no muestra nada. --continue, --skip y --abort, si no hay un cambio de base en curso, muestran fatal: no rebase in progress y terminan con el código 128.

bisect

Busca mediante búsqueda binaria el commit que introdujo un cambio.

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 y bad muestran el hash completo del siguiente candidato, que se selecciona. Cuando queda un solo sospechoso, se vuelve a mostrar el mismo hash: ese commit es el primer commit incorrecto. A diferencia de git, no se muestra el resumen «is the first bad commit».

stash

Guarda y restaura los cambios del directorio de trabajo.

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

El mensaje es el argumento posterior a push o save; -m no es compatible y se guardaría como mensaje. pop, apply y drop siempre usan stash@{0}. Muestran Saved working directory to stash abc1234, Applied and dropped stash, Applied stash y Dropped stash.

Salida de la lista de guardados:

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

Con más de una entrada, drop y pop dejan actualmente la entrada en la lista (#10), y apply sobrescribe los cambios sin confirmar en archivos que el guardado no toca (#11).

blame

Muestra la autoría de cada línea de un archivo en HEAD.

Shell
pitmaster blame src/Repository.php

Salida:

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

Cada línea muestra los primeros 8 caracteres del hash del commit y los primeros 30 caracteres de la identidad del autor (Name <email> timestamp timezone), sin rellenar.

grep

Busca contenido de archivos en el árbol de HEAD actual.

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

Salida:

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

Las opciones deben ir antes del patrón:

  • -i, --ignore-case: búsqueda sin distinguir mayúsculas y minúsculas
  • -E, --extended-regexp, --regex: trata el patrón como una expresión regular PCRE

La salida es texto sin formato path:line:content, sin colores.

reflog

Muestra las entradas del reflog, de la más reciente a la más antigua.

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"

El formato predeterminado es %gd: %gs (HEAD@{0}: commit: Add feature). Marcadores admitidos: %gd y %gD (selector), %gs (mensaje), %H y %h (hash nuevo completo y abreviado). Los límites aceptan -n N, -nN y --max-count N; -n 0 muestra todas las entradas.

Los repositorios creados por pitmaster init no registran reflogs, salvo que core.logallrefupdates se establezca en true en .git/config (#8); por eso reflog no muestra nada allí hasta que se configure.

refs

Enumera todas las referencias con sus hashes.

Shell
pitmaster refs

Salida:

Código
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0

Los hashes se muestran completos.

reset

Restablece HEAD a un commit específico.

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

Se requiere una revisión. Salida:

Código
HEAD is now at abc1234

init

Inicializa un repositorio nuevo. Es el único comando que no requiere un repositorio existente.

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

Salida:

Código
Initialized empty Pitmaster repository in /path/to/new-project/.git/

--object-format acepta sha1 (predeterminado) y sha256.

Códigos de salida

Código Significado
0 Éxito
1 Error del comando: uso incorrecto, comando desconocido, operación fallida (error: <message>) o fusión detenida por conflictos
128 No es un repositorio de git (fatal: <message>), argumento log no reconocido o --continue / --abort / --skip sin una operación en curso