1924年冬天,9岁的小豆子被作妓女的母亲切掉左手上那根畸形的指头后进入关家戏班学戏。戏班里只有师兄小石头同情关照小豆子。十年过去了,在关师父严厉和残酷的训导下,师兄二人演技很快提高,小豆子取艺名程蝶衣(张国荣饰),演旦角;小石头取艺名段小楼(张丰毅饰),演生角。俩人合演的《霸王别姬》誉满京城,师兄二人也红极一时。二人约定合演一辈子《霸王别姬》。 段小楼娶妓女菊仙(巩俐饰)为妻,依恋着师兄的蝶衣,心情沉重地来到师兄住处,把他用屈辱换来的、师兄向往已久的名贵宝剑赠给小楼,并决定不再与小楼合演《霸王别姬》。在关师傅的召唤下,师兄二人再次合作。 抗战结束后,两人被迫给一群无纪律无素质的国军士兵唱戏,段小楼与士兵冲突,混乱中菊仙流产,而后有士兵以汉奸罪抓走蝶衣。段小楼倾力营救蝶衣,低声下气去求曾经玩弄蝶衣的官僚袁世卿(葛优饰)。菊仙要蝶衣说谎苟且求释,并将小楼不再与蝶衣唱戏的字据给蝶衣看。于是蝶衣