这时候,赵国的别将司马卬正想渡过黄河,进入函谷关。刘邦就向北进攻平阴,截断黄河渡口。又向南进军,与秦军在洛阳东面交战,战事不利,退回到阳城,聚集军中的骑兵,在南阳县东面和南阳太守吕齮交战,打败了秦军,攻取了南阳郡,南阳郡守吕齮逃跑了,退守宛城。
刘邦率兵绕过宛城西进,张良进谏道:“您虽然想尽快入关,以目前的秦兵数量来看,依旧很多,虽然秦军四十万主力都被章邯、王离率领着跟项羽在巨鹿决战,但剩下的秦军会凭借各地关隘进行抵抗。如目下不攻下宛城,那么宛城的敌人从背后攻击,前面又有强大的秦军,只会腹背受敌。”
于是刘邦连夜率兵从另一条道返回,更换旗帜,于黎明时分,把宛城紧紧围住。南阳郡守想要自刎,他的门客陈恢献计,跟刘邦议和。
之后,越过城墙去见刘邦,陈恢道:“我听说您和诸侯约定,先入咸阳者为王。如今,您停下来攻打宛城。宛城是个大郡的都城,相连的城池有几十座,百姓众多,积蓄充足,官民都认为投降肯定要被杀死,所以都决心据城坚守。而您停在这里攻城多日,士兵伤亡必定很多;如率军离去,宛城军队一定在后面追出;这样,您向西前进就会错过先入咸阳为王的约定,身后又面临宛城强大的军队袭击的后患。替您着想,倒不如约定条件接受投降,封赏南阳太守,让他留下来守住南阳,您率领宛城的士兵一起西进。那些还没有降服的城邑,听到了这个消息,一定会争着打开城门等候您。您就可以通行无阻地西进,不必担心什么了。
刘邦觉得,此计甚妙。于是封宛城郡守为殷侯,封千户。
于是,刘邦率兵继续西进,所经过的城邑没有不降服的。到了丹水,高武侯戚鳃、襄阳侯王陵也在西陵归降了。沛公又回转来攻打胡阳,遇到了鄱君的别将梅鋗,就跟他一起,降服了析县和郦县。沛公派遣魏国人宁昌出使秦地,宁昌还没有回来。
这时,秦将章邯已经在赵地率军投降项羽了。
刘邦攻秦:秦二世三年(前208年)十月,刘邦军于城阳附近击败秦东郡尉和王离军一部。(此时宋义、项羽所率楚军在安阳)。
秦二世三年(前208年)十二月,刘邦军至栗,收编了两支义军并于秦军交战获胜。(此时项羽军在巨鹿大破王离军)。
秦二世三年(前207年)二月,刘邦与彭越会合攻击昌邑,屡攻不克;又用郦食其之计,克陈留,得大量粮食并扩军。(此时项羽在漳水南岸击退章邯军)。
秦二世三年(前207年)三月,刘邦攻开封,亦未攻克,又与秦将杨熊先后战于白马、曲遇东,大破之,杨熊逃至秦荥阳,被二世使者斩杀。
秦二世三年(前207年)四月,刘邦屠戮了颍阳;并与张良再次相遇,用张良计略攻韩地;为争夺入关中的首功,北上攻平阴,绝黄河渡口,阻止诸侯盟军赵将司马卬渡河。
秦二世三年(前207年)七月,刘邦用张良计,降秦南阳郡,封南阳郡守吕齮为殷侯。
秦二世三年(前207年)八月,赵高杀秦二世,刘邦攻破入秦要道武关。
秦二世三年(前207年)九月,赵高立子婴为秦王,子婴杀赵高;刘邦攻破峣关和蓝田。
汉元年(前207年)十月,秦王子婴向刘邦投降,刘邦入咸阳。