第二次世界大战期间,中国河北挂甲台村的农民马大三(姜文饰)在日本人的统治下过着平静的生活。一个晚上,游击队绑架了日军陆军士兵花屋小三郎(香川照之饰)和翻译董汉臣,把他们捆绑塞入麻袋放在马大三家里,并吩咐马好好看管,几天后的大年三十来带人。马大三和村民战战兢兢地看守两人,然而很多天过去了,并没有人来。花屋要董教他骂人的中国话,希望激怒村民以身殉国,董假意答应,但教他的却是“大哥大嫂过年好!你是我的爷,我是你的儿”。花屋小三郎和董汉臣数次发出求救信号,皆被村民化解。半年过去了,村民们担心事情暴露,却又不敢把花屋等放了,也不敢动手杀人,于是请前清的刽子手一刀刘(陈强饰)来结果花屋。然而在长城断壁之间,一刀刘故意“未能”成功杀人,推说“天意”。
马大三最终被董汉臣说动,把花屋和董送到了日军宪兵队驻地,以换取粮食。日军宪兵军官酒冢猪吉是花屋的同乡。他表面上对马等人客气,但背后指责花屋让皇军蒙耻并殴打了他。宪兵队整队去马的村子里和村民联欢送粮,酒到酣时杀机乍露,整村人除了外出接女友鱼儿(姜鸿波饰)的马大三均被日军杀死。花屋之后准备切腹自尽,被酒冢拦住。酒冢告诉他战争其实已经结束,日本已经投降了。
国民政府军来接收,酒冢猪吉等投降被关押,董汉臣作为汉奸被处决。马大三假扮香烟小贩,举起斧子杀死两个买烟的战俘,并冲入日俘营杀人报仇。在国军捉捕马之后,高少校宣布为了维护法纪,令酒冢持日本武士刀将马斩首示众,酒冢转而命令花屋执行。花屋犹豫之后手起刀落,马大三人头落地。