Lewati ke konten

Referensi CLI

Pitmaster menyertakan CLI yang mencerminkan sebagian perintah git. Ini beroperasi pada repositori di direktori kerja saat ini.

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

Dari instalasi Composer, skripnya adalah ./vendor/bin/pitmaster; sejak 0.2.11, skrip ini menemukan autoloader proyek di sana. Di checkout repositori Pitmaster itu sendiri, jalankan ./bin/pitmaster setelah composer install. Contoh di bawah menggunakan pitmaster untuk kedua jalur. Menjalankannya tanpa argumen akan mencetak daftar perintah.

Revisi ditentukan seperti Repository::resolve(): HEAD, nama branch dan tag, nama ref lengkap, hash lengkap, serta ekspresi ~N / ^N. Hash singkat tidak diterima. Clone, fetch, dan push hanya tersedia melalui PHP API.

Perintah

log

Tampilkan riwayat commit, dari yang terbaru.

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

Ejaan batas git (-n N, -nN, --max-count N, --max-count=N, -N) ditambahkan di 0.2.11. Angka tanpa awalan adalah singkatan Pitmaster sendiri untuk batas. Argumen lain pertama menjadi filter jalur; semua argumen setelah -- dianggap sebagai jalur. Argumen lain apa pun yang dimulai dengan - akan mencetak fatal: unrecognized argument: <arg> dan keluar dengan 128.

Output mencakup commit <hash> (kuning), baris Merge: untuk commit merge, Author: dengan identitas mentah (nama, email, cap waktu, dan zona waktu), serta pesan commit yang diindentasi. --oneline mencetak abc1234 Subject. Filter jalur mencocokkan satu jalur file persis dan hanya memeriksa lima kali jumlah batas commit terbaru (#7).

show

Tampilkan detail commit dan diff terhadap parent pertama.

Shell
# Show HEAD
pitmaster show

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

Menampilkan metadata commit (dengan baris Date:) diikuti diff terpadu. Untuk tag beranotasi, header dan pesan tag ditampilkan terlebih dahulu. Warna hanya digunakan saat stdout adalah terminal. Commit merge ditampilkan tanpa diff.

cat-file

Cetak konten mentah objek git.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Menerima hash lengkap. Mencetak konten tersimpan objek: blob, commit, dan tag sebagai teks, sedangkan tree dalam bentuk binernya. Berbeda dengan git cat-file -p, tree tidak dicetak dalam format yang mudah dibaca.

status

Tampilkan status working tree.

Shell
pitmaster status
pitmaster status --porcelain=v2

Keluaran:

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

File yang sudah di-stage ditampilkan dengan warna hijau, sedangkan file yang belum di-stage, belum digabungkan, dan tidak dilacak ditampilkan dengan warna merah. Bagian Unmerged paths: muncul saat terjadi konflik merge. HEAD yang terlepas mencetak HEAD detached, dan tree yang bersih mencetak nothing to commit, working tree clean. --porcelain=v2 mencetak output dari Repository::statusPorcelainV2().

diff

Tampilkan perubahan antara indeks dan working tree (perubahan yang belum di-stage).

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

Output berupa diff terpadu berwarna, termasuk saat stdout bukan terminal. Format ini cocok dengan git diff untuk file teks yang diubah; file baru, dihapus, biner, berganti nama, dan berubah mode diformat secara berbeda (lihat Diff). diff --cached tidak mencetak apa pun sebelum commit pertama (#5).

add

Stage file untuk commit berikutnya.

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

Setiap file dibaca dari working tree, ditulis sebagai objek blob, lalu indeks diperbarui. Argumen berupa jalur file; direktori dan . tidak diperluas.

commit

Buat commit dari file yang sudah di-stage.

Shell
pitmaster commit -m "Add new feature"

Keluaran:

Kode
[main abc1234] Add new feature

-m wajib diisi, kecuali saat menyelesaikan merge, cherry-pick, revert, atau rebase yang terhenti; dalam kasus tersebut, pesan yang sudah disiapkan akan digunakan. Author dan committer ditentukan dari variabel lingkungan, konstanta, dan .git/config, sesuai penjelasan di Memulai.

branch

Daftarkan branch atau buat branch baru.

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 untuk daftar:

Kode
  bugfix/typo
  feature/login
* main

Pembuatan mencetak Created branch <name>, penghapusan mencetak Deleted branch <name>. -d dan -D berperilaku sama: keduanya tidak memeriksa apakah branch sudah digabungkan, dan menolak menghapus branch yang sedang di-checkout.

tag

Daftarkan tag atau buat tag baru.

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"

Pembuatan mencetak Created tag <name>.

checkout

Beralih branch atau lepaskan 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

Memperbarui HEAD, indeks, dan working tree agar sesuai dengan target, lalu mencetak Switched to '<target>'. Operasi ditolak jika ada perubahan lokal atau file yang tidak dilacak pada jalur yang berbeda antara kedua tree. Perubahan yang belum di-commit pada file terlacak lainnya akan ditimpa dengan konten target, padahal git akan mempertahankannya (#2); commit atau stash perubahan tersebut terlebih dahulu.

merge

Gabungkan satu atau beberapa branch ke HEAD saat ini, atau lanjutkan/batalkan konflik merge yang sedang berlangsung.

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 jika berhasil:

Kode
Merge successful.

Output jika terjadi konflik (di stderr, kode keluar 1):

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

-s menerima ours, ort, dan recursive; ort dan recursive sama-sama menggunakan merge default. Dengan -s, CLI mencetak Merge successful. dan keluar dengan 0 meskipun merge berhenti karena konflik (#21), jadi periksa status sesudahnya. merge --continue tanpa merge yang sedang berlangsung akan keluar dengan 128. Menggabungkan branch yang sudah digabung akan membuat commit merge lain (#6), dan perubahan yang belum di-commit pada file terlacak akan ditimpa seperti pada checkout.

cherry-pick

Terapkan commit di atas HEAD saat ini, atau lanjutkan/batalkan konflik yang sedang berlangsung.

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

Tidak mencetak apa pun jika berhasil. --continue dan --abort tanpa cherry-pick yang sedang berlangsung akan keluar dengan 128.

revert

Buat commit revert, atau lanjutkan/batalkan konflik yang sedang berlangsung.

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

Tidak mencetak apa pun jika berhasil. --continue dan --abort tanpa revert yang sedang berlangsung akan keluar dengan 128.

rebase

Rebase branch saat ini ke ref lain.

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

Tidak mencetak apa pun jika berhasil. --continue, --skip, dan --abort tanpa rebase yang sedang berlangsung akan mencetak fatal: no rebase in progress dan keluar dengan 128.

bisect

Temukan commit yang memperkenalkan perubahan dengan pencarian biner.

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, dan bad mencetak hash lengkap kandidat berikutnya, yang kemudian di-checkout. Jika hanya tersisa satu kandidat yang dicurigai, hash yang sama dicetak lagi: commit itulah commit buruk pertama. Berbeda dari git, ringkasan "adalah commit buruk pertama" tidak dicetak.

stash

Simpan dan pulihkan perubahan direktori kerja.

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

Pesan adalah argumen setelah push atau save; -m tidak didukung dan akan disimpan sebagai pesan. pop, apply, dan drop selalu menggunakan stash@{0}. Ketiganya mencetak Saved working directory to stash abc1234, Applied and dropped stash, Applied stash, dan Dropped stash.

Output daftar stash:

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

Jika ada lebih dari satu entri, drop dan pop saat ini membiarkan entri tetap ada dalam daftar (#10), dan apply menimpa perubahan yang belum di-commit pada file yang tidak disentuh stash (#11).

blame

Tampilkan atribusi penulis per baris untuk file di HEAD.

Shell
pitmaster blame src/Repository.php

Keluaran:

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);

Setiap baris menampilkan 8 karakter pertama hash commit dan 30 karakter pertama identitas penulis (Name <email> timestamp timezone), tanpa padding.

grep

Cari isi file di pohon HEAD saat ini.

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

Keluaran:

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

Opsi harus ditulis sebelum pola:

  • -i, --ignore-case: pencocokan tanpa membedakan huruf besar dan kecil
  • -E, --extended-regexp, --regex: perlakukan pola sebagai ekspresi reguler PCRE

Output berupa path:line:content biasa tanpa warna.

reflog

Tampilkan entri reflog, yang terbaru lebih dulu.

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"

Format default adalah %gd: %gs (HEAD@{0}: commit: Add feature). Placeholder yang didukung: %gd dan %gD (pemilih), %gs (pesan), %H dan %h (hash baru lengkap dan pendek). Batas menerima -n N, -nN, dan --max-count N; -n 0 mencetak semua entri.

Repositori yang dibuat oleh pitmaster init tidak merekam reflog kecuali core.logallrefupdates diatur ke true dalam .git/config (#8), sehingga reflog tidak mencetak apa pun di sana sampai pengaturan itu diterapkan.

refs

Cantumkan semua ref beserta hash-nya.

Shell
pitmaster refs

Keluaran:

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

Hash dicetak secara lengkap.

reset

Atur ulang HEAD ke commit tertentu.

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

Revisi wajib diisi. Output:

Kode
HEAD is now at abc1234

init

Inisialisasi repositori baru. Hanya perintah ini yang tidak memerlukan repositori yang sudah ada.

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

Keluaran:

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

--object-format menerima sha1 (default) dan sha256.

Kode keluar

Kode Arti
0 Berhasil
1 Kesalahan perintah: kesalahan penggunaan, perintah tidak dikenal, operasi gagal (error: <message>), atau merge yang terhenti karena konflik
128 Bukan repositori git (fatal: <message>), argumen log tidak dikenal, atau --continue / --abort / --skip tanpa operasi yang sedang berlangsung