Question: I have a few kegs of the same package in `/usr/local/Cellar/libfoo` like `/usr/local/Cellar/libfoo/1.0.1`, `/usr/local/Cellar/libfoo/HEAD` and `/usr/local/Cellar/libfoo/mycopy`

How can I brew link to a specific version?

Answer: 
Homebrew removed `brew switch` subcommand in [Homebrew 2.6.0](https://brew.sh/2020/12/01/homebrew-2.6.0/). Get it back from [here](https://github.com/laggardkernel/homebrew-tap#external-commands).

```sh
brew tap laggardkernel/tap
brew switch --help

```

---

### name@version formula

There's mainly two ways to switch to an old version of an app.

If it's a bigger version change. Homebrew may have created a versioned package in the repo. Like `go`, `go@1.10`, they are two different formulae, installed into two different locations.

```sh
# install the old one
brew install go@1.10

# link the executable into /usr/local/bin, or /opt/homebrew/bin
brew link --overwrite --force go@1.10

```

### brew switch

But not every package has a versioned variant. If you just upgraded to the new version and the old one is still in your system, skip step 1, 2.

1. In this situation, search in the [homebrew-core](https://github.com/Homebrew/homebrew-core/) repo and download the specific formula. e.g. [mysql 8.0.23](https://github.com/Homebrew/homebrew-core/blob/58946207e43b0e7222f6c920ef4b053e52baf76d/Formula/mysql.rb)
2. Download the **raw** file, and install from it `brew install /path/to/downloaded/mysql.rb`.
3. Now both the latest and the old 8.0.23 (same formula `mysql`) exist, switch (link out) the old version with `brew switch mysql 8.0.23`

`brew info mysql` will list all the old version still exist.

Step 1, 2 could be replaced by `brew extract`, but that requires user maintain its own tap. I won't cover it here, just search it if you're interested.
In case `brew switch` produces an error (in this example trying to switch to node version 14):

```
> brew switch node 14
Error: Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.

```

The correct way switching versions would be :

```
> brew link --overwrite node@14

```