Glitch fish can refer to the Pokémon (or glitch Pokémon) encountered by Rods native to glitch maps, or any wild Pokémon battles forced as fishing battles (bringing up the text "The hooked (POKéMON) attacked!") even if no Rod was used to encounter the Pokémon.
In Generation I
In Pokémon Red, Blue, and Yellow, in order to fish at all, not only must the player be facing a water tile (sub-tile 0x14 and specific to the tileset) but certain tilesets (W_CURMAPTILESET; D367 in Red/Blue and D366 in Yellow) will forbid fishing (and Surfing) anyway.
On non-water tilesets, attempting to fish will bring up the message "OAK: (PLAYER)! This isn't the time to use that!" even if the player uses glitches to face the equivalent 'water tile' pertaining to that tileset.
The tileset (water tilesets in the disassembly projects) must be one of the following:
OVERWORLD FOREST DOJO GYM SHIP SHIP_PORT CAVERN FACILITY PLATEAU
However, the player can use the expanded inventory to change the value of W_CURMAPTILESET without having to reload the tileset itself; changing it to a 'good' tileset such as 00 (OVERWORLD) will then allow fishing.
Encounters using the Rod
Provided that the tileset (or value of W_CURMAPTILESET) matches one of the 'good' tilesets above, Old Rod encounters will still always give a Level 5 Magikarp with a 100% chance, Good Rood encounters will bring up a random fish Pokémon (either a Level 10 Goldeen or Level 10 Poliwag) or give the text "Not even a nibble!" and this is not specific to the map (see here).
Unlike the other rods, Super Rod encounters have encounter slots (sets of possible Pokémon which appear after a bite) specific to the maps they are part of (furthermore the versions Red/Blue or Yellow differ in that they have their own unique Super Rod Pokémon lists), so if one considers a valid source map Glitch City to count as a "glitch map", the hooked Pokémon that appear will be taken from the original map. For example, a Pallet Town Glitch City in Pokémon Yellow would have possible Super Rod encounters (provided there was a bite) as Level 10 Staryu, Level 10 Tentacool, Level 5 Staryu, or Level 20 Tentacool, and in Pokémon Red/Blue the possible encounters for a Pallet Town Glitch City are Level 15 Tentacool and Level 15 Poliwag.
In maps which do not have Super Rod encounters (such as Cerulean City Gym or Lorelei's Elite Four room), fishing with a Super Rod always returns "Looks like there's nothing here."
However, glitch fish slots using the Rod in maps that normally return "Looks like there's nothing here." are possible another way (using Game Genie) if the message is circumvented (i.e. if the length of the Super Rod encounter slot data structure is extended (it is usually terminated with 0xFF) or an invalid fishing group is accessed). There are artificial glitch encounter slots beyond the last slot (for Red/Blue these are the groups beyond group 10 (Fuschia City), for Yellow the structure is slightly different and glitch fish would relate to the slots beyond 31: Cerulean Cave B1F). As Rod encounters work by writing to W_CUROPPONENT (D059 in Red/Blue and D058 in Yellow), fishing for Trainers/glitch Trainers is also theoretically possible.
The player can also simply lock W_CUROPPONENT or wEnemyMonSpecies2 (CFD8 in Red/Blue and CFD7 in Yellow) to any Pokémon or Trainer they want before the battle, however this method can be used to change which Pokémon appears in any case and is not specific to a glitch slot of possible hooked Pokémon.
Other "hooked" Pokémon
If bit 0x0 of D05F (D05E in Yellow) is set before the start of a wild battle, that Pokémon will be "hooked" even if no rod was used to catch it. This applies to glitches which corrupt D05F/D05E such as unterminated name glitch items (usually always a hooked Metapod in non-Japanese versions because the species is taken from the 0x7C menu-tile that typically never changes during the glitch), or a path buffer overflow.
In Generation II
Pokémon Gold, Silver and Crystal changed the way Rods originally worked in Pokémon Red, Blue, and Yellow. Old Rod and Good Rod encounters now vary based on the current map as well, in addition to the Super Rod; and even the Old Rod (still typically bringing up Magikarp) may fail with the message that there is not even a nibble. Furthermore, due to different coding/data structures, it is also possible to bring up glitch hooked Pokémon encounters (including both Pokémon and glitch Pokémon such as ?????) when fishing from invalid maps using Rods (as there own glitch locations rather than Glitch Cities of valid maps) without having to use a Game Genie to temporarily patch the ROM. The hooked Pokémon (being invalid) can exceed Level 100, do not naturally have to be Pokémon that appear in the water, and in the case of ????? can have a status condition after the battle starts. Maps in Gold/Silver/Crystal each have a fish group, but fish groups beyond the last valid index number will result in invalid hooked Pokémon.
The player technically doesn't have to warp to or otherwise visit a glitch map to access the glitch fish specific to that map (altering wMapGroup DA00 and wMapNumber DA01 such as with a method of arbitrary code execution like the Coin Case glitch to partially change the current map without loading the rest of its data is enough. In Crystal, the equivalent addresses are DCB5 and DCB6. This method can be ideal for avoiding a game freeze, as many (most?) glitch maps in Gold/Silver/Crystal will typically freeze the game when visited using a door.
Furthermore, some Rod data in glitch maps is taken from the RAM rather than the ROM; so is not hardcoded and can be changed by modifying the relevant memory addresses. In (at least English Pokémon Gold), glitch map 0xD003 uses glitch fish group 0x17, with an encounter table from D90A; so modifying the data close to D90A will modify the possible hooked Pokémon for fish group 0x17 to any Pokémon the player desires.