Running this command shows both @{upstream} and @{push} references for all the branches in the local repository:
git branch --format '%(refname:short) [%(upstream:short)] [%(push:short)]'
I noticed that some of my branches have both @{upstream} and @{push} set, some only have @{upstream}, and some only have @{push}.
@{upstream} matches the value of git config branch.<branch>.remote + git config branch.<branch>.merge, and running git branch --set-upstream-to=[remote/]other_branch updates it.
@{push} also includes the value of git config branch.<branch>.remote, if present, but I couldn't find a way to update the branch part.
Knowing that there's a single remote for both @{upstream} and @{push}, @{push} doesn't seem very useful, still I'm curious what its purpose is and how it can be updated.