Faits : A. Par jugement du 6 juin 2019, le Tribunal de police de la République et canton de Genève a condamné A._, pour violence ou menace contre les autorités et les fonctionnaires ainsi que rupture de ban, à une peine privative de liberté de dix mois. B. Par arrêt du 9 septembre 2019, la Chambre pénale d'appel et de révision de la Cour de justice genevoise a rejeté l'appel formé par A._ contre ce jugement. La cour cantonale a retenu les faits suivants. B.a. A._ est de nationalité algérienne. Son extrait de casier judiciaire suisse fait état de 19 condamnations, entre 2009 et 2018. Par jugement du 8 juin 2017, le Tribunal de police genevois a notamment ordonné l'expulsion du territoire suisse du prénommé pour une durée de cinq ans, sur la base de l'art. 66a CP. Par décision du 14 novembre 2018, l'Office cantonal de la population et des migrations a refusé de reporter cette mesure. B.b. Le 2 mars 2019, A._ a été pris en charge dans sa cellule du centre de détention administrative de C._, par quatre agents de police, en vue de son rapatriement en " Departure Accompanied " (ci-après : DEPA), avec escorte policière, à destination d'Alger par un vol régulier au départ de D._. Le prénommé a été maîtrisé sur son lit et menotté, pour des raisons de sécurité, dans la mesure où il était souvent porteur de lames de rasoir. Une fois les contrôles d'usage effectués, A._ a été conduit, sans incident, au service des urgences des Hôpitaux universitaires de D._. Il a ensuite été acheminé au Service d'asile et de rapatriement (ci-après : SARA), à l'aéroport de D._, placé en cellule d'attente et soumis à un entretien de départ, à l'occasion duquel il s'est opposé à son rapatriement. Toujours sans incident, A._ s'est vu poser le matériel d'entrave, soit des manchons maintenant ses poignets à hauteur de sa taille, puis a été installé dans un fourgon et conduit jusqu'au pied de la passerelle de l'avion. Alors que l'autorisation d'embarquer avait été obtenue, A._ s'est mis à hurler et s'est débattu violemment pour empêcher son départ, au moment de sortir du fourgon et lors de l'embarquement. Il a été porté jusqu'à son siège par quatre agents - dont B._ - et s'est débattu avec violence durant tout l'embarquement. L'intéressé a dû être maintenu sur son siège durant plusieurs minutes. L'agent E._ s'est positionné vers le hublot, à droite de A._, et lui a maintenu la jambe et le bras droits, tandis que l'agent B._ s'est placé vers le couloir, à gauche de l'intéressé, et lui a maintenu la jambe et le bras gauches. L'appointé F._ s'est placé face à A._, a maintenu ses jambes et lui a mis sa ceinture de sécurité. Enfin, le sergent-chef G._ s'est placé derrière le dernier nommé pour lui maintenir la tête. A._ s'est vu prier de se calmer et de cesser de crier. Deux autres agents se sont placés de manière à faire "écran" aux passagers. Une barrière et un rideau humain ont ainsi été mis en place. Alors que B._ maintenait A._ sur son siège, ce dernier a tenté de lui arracher l'oreille droite. Lorsque B._ a pu se dégager, l'intéressé l'a griffé sur le crâne. Le dialogue entamé avec les passagers par des agents et des stewards n'a pas permis d'apaiser la situation et plusieurs d'entre eux se sont manifestés de diverses manières, en refusant de s'asseoir ou en proférant des menaces. Le commandant de bord a ordonné le débarquement de l'escorte policière et de A._, lequel a été ramené dans le fourgon en étant porté par trois agents, puis reconduit au SARA, où les entraves partielles lui ont été retirées, avant son retour à C._. Le 3 janvier 2019, la police avait déjà tenté de reconduire A._ en Algérie, sous la forme d'un rapatriement en DEPA, sans succès. B.c. En annexe à sa plainte déposée le 7 mars 2019, B._ a notamment produit un certificat médical du 5 mars 2019 dans lequel son médecin avait constaté, en arrière de l'oreille droite, une lésion cutanée de 1,5 cm, en voie de cicatrisation. B.d. Le 22 mars 2019, A._ a été contrôlé dans une rue genevoise par la police, qui a constaté que le prénommé faisait l'objet d'une expulsion judiciaire. C. A._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 9 septembre 2019, en concluant, avec suite de frais et dépens, principalement à sa réforme en ce sens qu'il est acquitté et qu'une indemnité de 200 fr. par jour, avec intérêts, lui est accordée à titre de réparation pour le tort moral lié à la détention injustifiée. Subsidiairement, il conclut à son annulation et au renvoi de la cause à l'autorité précédente pour nouvelle décision. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.