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 1erbut le 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 147eposition 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 , 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 5eplace 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 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].
Gallagher signe une prolongation de contrat de six ans le , bonne pour 39 millions de dollars (valeur annuelle moyenne de 6,5 millions). Il a donc en poche un contrat valide jusqu'en 2027[10].
Le , il atteint le plateau des 900 parties jouées dans la LNH, il devient le 13e joueur à atteindre ce plateau avec le Tricolore[11].