Homebrew upgrades move installed formulae and casks from the versions already on disk to newer versions available in Homebrew metadata. A deliberate upgrade pass matters when command-line tools, desktop apps, and shared dependencies live in the same prefix and a broad update could change more than the one package that needs attention.
A controlled routine refreshes metadata, inspects the outdated package list, previews the upgrade plan, and upgrades the intended package first. Homebrew skips pinned packages during normal upgrades, and a targeted upgrade can still include dependent formulae when they are outdated or have broken linkage.
Use a named package for a narrow change window and reserve a name-free brew upgrade for maintenance periods where every unpinned outdated package is acceptable. The final checks compare Homebrew's installed version and run the upgraded package itself, because disappearing from brew outdated only proves the package is no longer behind according to Homebrew metadata.
Related: How to check for outdated Homebrew packages
Related: How to pin a Homebrew package
Related: How to unpin a Homebrew package
$ brew update Already up-to-date.
brew update fetches current Homebrew and tap metadata without upgrading installed packages.
Related: How to update Homebrew package metadata
$ brew outdated --verbose jq jq (1.8.1) < 1.8.2
No output means Homebrew does not currently mark that package as outdated. Omit the package name to review the full outdated set before a broad upgrade.
$ brew list --pinned jq
No output means jq is not pinned. If the package name is printed, unpin it only after the hold is no longer needed.
$ brew upgrade --dry-run jq ==> Would upgrade 1 outdated package jq 1.8.1 -> 1.8.2 (441KB)
--dry-run prints what Homebrew would upgrade without changing installed packages. For a cask token, use brew upgrade --cask visual-studio-code --dry-run.
$ brew upgrade jq ==> Upgrading 1 outdated package: jq 1.8.1 -> 1.8.2 ==> Fetching downloads for: jq ==> Upgrading jq 1.8.1 -> 1.8.2 ##### snipped #####
Read any confirmation prompt before continuing. If Homebrew lists unexpected dependents or casks, stop and review the dry-run output again.
$ brew list --versions jq jq 1.8.2
$ brew outdated --verbose jq
No output means the package is no longer outdated according to the current Homebrew metadata.
$ jq --version jq-1.8.2
Replace jq --version with the normal command, app launch, service check, or plugin check for the package that was upgraded.