Il commence sa carrière junior avec les Giants de Vancouver de la Ligue de hockey de l'Ouest en 2008-2009 et y marque son 1er but le 27 septembre contre les Cougars de Prince George. Il termine la saison régulière avec 10 buts et 31 points en 52 matchs. La saison suivante, il enregistre 81 points en 72 matchs, ce qui le place au deuxième rang des joueurs des Giants ; l'équipe se rend alors en demi-finale pour une deuxième année consécutive.
Il est choisi à la 147e position par les Canadiens de Montréal lors du repêchage d'entrée dans la LNH 2010. Après avoir impressionné lors du camp d'entrainement de 2011[5], il est renvoyé en junior. En novembre 2011, il signe un contrat de trois saisons avec les Canadiens[6].
En 2012, il rejoint l'Équipe du Canada junior pour le championnat du monde. Il est nommé joueur du match après avoir permis une victoire 3-2 contre les États-Unis. En demi-finale, Gallagher marque un but et deux passes lors de la défaite 6-5 contre la Russie. Le Canada remporte la médaille de bronze contre la Finlande et Gallagher termine le tournoi à la 5e place des marqueurs de l'équipe avec trois buts et trois passes, soit un total de six points.
Le , il reçoit une prolongation de contrat de six ans, d'une valeur annuelle de 3,75 millions de dollars.
Avant le début de la saison 2015-2016, il est nommé assistant-capitaine par ses coéquipiers[8]. Le 1er octobre 2018 il est redevenu capitaine adjoint des Canadiens de Montréal.
Il effectue son premier tour du chapeau dans la LNH le , lors d’un affrontement contre les Flyers de Philadelphie[9].