Git Command Reference
Use a command reference to answer a precise question about state, paths and references. Short commands still need a clear target and environment.
How it works
This compact read-only example identifies the branch, tracked files and current commit subject, then checks repository object connectivity. status, diff, log and show answer different questions; switch and merge change state. Operations such as reset, restore and clean need extra care because their effects depend on arguments and current work. git clean is not executed by these labs.
Run the disposable lab
Use Windows PowerShell 5.1 or later and Git 2.28 or later. The reviewed CLI is Git for Windows 2.53.0.windows.2. These are PowerShell examples, not Git Bash commands. Save the download as reference-guide.ps1 in a separate empty learning folder and run it in a separate process: powershell -NoProfile -ExecutionPolicy Bypass -File .\reference-guide.ps1. The execution-policy option applies to that process, not your machine policy.
The script creates bhylu-git-reference-guide and refuses an existing folder. It supplies two fictional seed files and repository-local settings, then runs the lesson commands. The literal separator is quoted as '--' so PowerShell passes it through the guard. A guard function named git calls the real CLI and stops on unexpected failures; Expect-GitFailure checks deliberately refused operations. Child-process configuration isolates your personal Git settings. File transports are allowed only for owned local remotes; internet transports are disabled in this lab. No hosting account, Apache or MySQL service is required. There is no Git playground. Leave the generated folder for inspection; choose another empty parent to run again.
Example
# Bhylu Git lab: Command Reference
# Run in a separate PowerShell process, in an empty learning folder.
# Existing lab folders are refused; nothing is pushed to an internet host.
$ErrorActionPreference = 'Stop'
$script:GitExe = (Get-Command git -CommandType Application | Select-Object -First 1).Source
$script:LabRoot = Join-Path (Get-Location) 'bhylu-git-reference-guide'
if (Test-Path -LiteralPath $script:LabRoot) { throw 'Lab folder already exists. Choose another empty parent folder.' }
New-Item -ItemType Directory -Path $script:LabRoot | Out-Null
$env:GIT_CONFIG_NOSYSTEM = '1'
$env:GIT_CONFIG_GLOBAL = Join-Path $script:LabRoot 'empty-global-config'
[IO.File]::WriteAllText($env:GIT_CONFIG_GLOBAL, '')
$env:GIT_TERMINAL_PROMPT = '0'
$env:GIT_EDITOR = 'true'
$env:GIT_SEQUENCE_EDITOR = 'true'
$env:GIT_AUTHOR_DATE = '2026-01-10T10:00:00+00:00'
$env:GIT_COMMITTER_DATE = $env:GIT_AUTHOR_DATE
function git {
& $script:GitExe -c protocol.allow=never -c protocol.file.allow=always @args
if ($LASTEXITCODE -ne 0) { throw "Git exited with code $LASTEXITCODE" }
}
function Expect-GitFailure {
& $script:GitExe -c protocol.allow=never -c protocol.file.allow=always @args
if ($LASTEXITCODE -eq 0) { throw 'Expected Git to refuse this operation' }
}
function Assert-Equal($Actual, $Expected) {
if ((($Actual | Out-String).Trim()) -cne (($Expected | Out-String).Trim())) { throw "Expected [$Expected], got [$Actual]" }
}
function Write-LabFile([string]$Name, [string]$Text) {
$target = [IO.Path]::GetFullPath((Join-Path (Get-Location) $Name))
if (!$target.StartsWith($script:LabRoot + [IO.Path]::DirectorySeparatorChar, [StringComparison]::OrdinalIgnoreCase)) { throw 'Path outside lab' }
[IO.Directory]::CreateDirectory([IO.Path]::GetDirectoryName($target)) | Out-Null
[IO.File]::WriteAllText($target, ($Text.Replace('\n', "`n") + "`n"), (New-Object Text.UTF8Encoding($false)))
}
function New-LabRepo([string]$Name) {
New-Item -ItemType Directory -Path $Name | Out-Null
Push-Location $Name
try {
git init --initial-branch=main
git config --local user.name 'Repair Lab'
git config --local user.email 'repair@example.invalid'
git config --local core.autocrlf false
git config --local commit.gpgSign false
git config --local tag.gpgSign false
git config --local core.hooksPath (Join-Path $script:LabRoot 'empty-hooks')
Write-LabFile 'notes.md' 'Inspect hinge'
Write-LabFile 'tasks.txt' 'desk=open'
git add '--' notes.md tasks.txt
git commit -m 'Record initial repair plan'
} finally { Pop-Location }
}
Push-Location $script:LabRoot
try {
New-LabRepo 'desk'
Set-Location desk
Assert-Equal (git branch --show-current) @('main')
Assert-Equal (git ls-files '--' notes.md tasks.txt) @('notes.md','tasks.txt')
Assert-Equal (git log -1 --format=%s) @('Record initial repair plan')
git fsck --connectivity-only
Write-Output 'Verified: reference-guide'
} finally { Pop-Location }
Focus on the lesson commands
This excerpt omits the seed repository and guard helpers. Use the complete download to run it.
Assert-Equal (git branch --show-current) @('main')
Assert-Equal (git ls-files '--' notes.md tasks.txt) @('notes.md','tasks.txt')
Assert-Equal (git log -1 --format=%s) @('Record initial repair plan')
git fsck --connectivity-only
Expected result
The branch is main, the two seed files are tracked and connectivity checking succeeds.
The complete script ends with Verified: reference-guide only after its checks pass. Object IDs, temporary paths and progress output can differ.
Connectivity checking verifies relationships among available objects under its documented checks. It does not validate the application, restore missing untracked files or audit the contents for secrets. Use versioned official help when a command’s defaults or available options matter.
Git glossary
- Repository
- The object database, references and configuration that record a project’s version history. A normal local repository also has a working tree.
- Working tree
- The checked-out files you edit. Their current content can differ from both the index and the last commit.
- Index
- The proposed next snapshot, also called the staging area. Adding a file updates its staged content at that moment.
- Commit
- A recorded tree plus metadata and parent links. Changing its recorded data creates another commit object.
- Branch
- A named reference that normally advances as commits are made on that line of work. It is not a separate copy of every file.
- HEAD
- The reference describing the current checkout. It normally points through a branch name, but it can identify a commit directly in detached state.
- Remote-tracking reference
- A local reference, such as origin/main, updated by configured fetch operations. It is not a live connection to another computer.
- Merge base
- A best shared ancestor used when comparing or combining histories. Complex graphs can have more than one best common ancestor.
- Object ID
- An identifier derived from an object’s content and type under the repository’s object format. Do not assume every repository uses the same hash format or abbreviated length.
- Upstream
- A configured branch relationship used by certain default operations. A remote named upstream is a separate naming convention.
- Pull request
- A hosted review and integration proposal. It is not a Git commit object or the same operation as git pull.
- Reflog
- A local record of reference movements, subject to expiration and object availability. It does not record every unsaved editor change.