helm 29,435 upgrade renders the chart with the new values, applies the difference and records a revision. With no values at all, Helm 3 reuses the previous ones; pass a single value and every earlier override is dropped:
img() { kubectl get deploy booknest-api -n booknest-helm -o jsonpath='{.spec..image}{"\n"}'; }
up() { helm upgrade booknest helm/booknest -n booknest-helm --wait "$@" >/dev/null; img; }
up
up --set web.replicas=1
helm rollback booknest 1 -n booknest-helm --wait
helm history booknest -n booknest-helm | tr '\t' ' '
imglocalhost:33500/booknest-api:1.3 localhost:33500/booknest-api:1.3 localhost:33500/booknest-api:1.4 localhost:33500/booknest-api:1.4 Rollback was a success! Happy Helming! REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION 1 Sat Sep 26 02:14:02 2026 superseded booknest-0.1.0 1.4.0 Install complete 2 Sat Sep 26 02:14:26 2026 superseded booknest-0.1.0 1.4.0 Upgrade complete 3 Sat Sep 26 02:14:31 2026 superseded booknest-0.1.0 1.4.0 Upgrade complete 4 Sat Sep 26 02:14:42 2026 deployed booknest-0.1.0 1.4.0 Rollback to 1 localhost:33500/booknest-api:1.3 localhost:33500/booknest-api:1.3
The second upgrade meant to shrink the front end and also moved the API to 1.4, the chart default, because its one --set replaced the stored api.image.tag=1.3. Pass all your values files on every upgrade, or use --reset-then-reuse-values deliberately. A rollback is a new revision copying an old one, so history only grows (--history-max, default 10); it restores objects, not data, since migrations do not run backward. For unattended upgrades, --atomic (--rollback-on-failure in Helm 4) rolls back when an upgrade fails to become ready in time.