apt upgrade vs full-upgrade vs dist-upgrade

Which upgrades may install, and which may remove

Updated 2026-09-05

The three differ on one axis: how much apt is allowed to disturb to get you the newer versions. Two packages here have upgrades waiting. tips-tool 2.0 needs a package that is not installed; tips-app 2.0 needs one that cannot be installed while tips-legacy is present.

apt-get upgrade will not install a new package under any circumstances, so both stay where they are:

apt-get upgrade -s
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
The following packages have been kept back:
  tips-app tips-tool
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

"Kept back" is that refusal, and the troubleshooting page covers what to do about it when it happens on a real machine.

apt upgrade is not apt-get upgrade

The apt front end changed the rule. It installs new packages when an upgrade needs them, and still refuses to remove anything:

apt upgrade -s
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
Upgrading:
  tips-tool

Installing dependencies:
  tips-helper

Not upgrading:
  tips-app

Summary:
  Upgrading: 1, Installing: 1, Removing: 0, Not Upgrading: 1
Inst tips-helper (1.0-1 stable [all])
Inst tips-tool [1.0-1] (2.0-1 stable [all])
Conf tips-helper (1.0-1 stable [all])
Conf tips-tool (2.0-1 stable [all])

tips-tool upgraded and pulled tips-helper in with it. tips-app is still held, because reaching its new version means removing tips-legacy, and no upgrade of either kind removes a package.

So advice written for apt-get does not transfer. A guide from 2015 saying "upgrade never installs anything new" describes a command that is still on your system under a different name.

full-upgrade is allowed to remove

apt full-upgrade -s
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
Upgrading:
  tips-app  tips-tool

Installing dependencies:
  tips-helper  tips-lib

REMOVING:
  tips-legacy

Summary:
  Upgrading: 2, Installing: 2, Removing: 1, Not Upgrading: 0
Remv tips-legacy [1.0-1]
Inst tips-lib (1.0-1 stable [all])
Inst tips-app [1.0-1] (2.0-1 stable [all])
Inst tips-helper (1.0-1 stable [all])
Inst tips-tool [1.0-1] (2.0-1 stable [all])
Conf tips-lib (1.0-1 stable [all])
Conf tips-app (2.0-1 stable [all])
Conf tips-helper (1.0-1 stable [all])
Conf tips-tool (2.0-1 stable [all])

Nothing is held now. REMOVING is capitalised by apt because it is the part you are being asked to read. It is also why full-upgrade is not the default: a dependency change upstream can propose removing something you rely on, so the REMOVING list is the part to check before answering yes.

dist-upgrade is the same command

dist-upgrade is full-upgrade under the name it had before apt got a friendlier front end. Both front ends accept both spellings, and the plan they produce is byte for byte the same:

diff <(apt-get dist-upgrade -s) <(apt-get full-upgrade -s) && echo "dist-upgrade and full-upgrade: identical"
dist-upgrade and full-upgrade: identical

The name misleads, which is why it was replaced. dist-upgrade does not move you between Debian releases. Editing your sources to name the new suite does that; dist-upgrade is then what you run afterwards, because it is the one allowed to remove things. Release channels covers that procedure.

Which to use

apt upgrade for routine updates on a stable machine, after apt update. It takes everything that can be had without removing anything, and a package it declines to upgrade is a package worth a moment's attention rather than an error.

apt full-upgrade when something has been held back and you have read why, and always as part of moving between releases. Read the REMOVING list before you answer.

apt-get upgrade in a script, and for that reason only: apt-get has a stable command line across versions where apt does not promise one, which is what apt vs apt-get covers. Its stricter rule comes from its age, so do not read it as a safety feature somebody designed for you.

Never apt full-upgrade unattended on a machine you care about. Removal is the one thing it can do that the others cannot, and an unattended run is where you would find out about it last.