1917年,中國西南邊陲的劉家村。劉金喜(甄子丹 飾)和妻子阿玉(湯唯 飾)共同撫養兩個兒子方正和曉天,日子平淡且幸福。直到某一天,兩個不速之客打破了劉家村的平靜,也摧毀著金喜一家的生活。這二人企圖洗劫村中的錢柜,被剛好在此的金喜撞見,一陣混亂打斗,二匪稀里糊涂被金喜打死。由于其中一人是政府通緝的要犯,因此縣官大喜過望,村里人也將金喜奉為大英雄。但是,這看似普普通通的盲打誤殺卻引起一個人的懷疑,他名叫徐百九(金城武 飾),是縣衙的捕快。從蛛絲馬跡上來看,二匪系死于武功高強人之手,徐百九由此留在村里,對金喜展開了連番的觀察、調查與試探。