진효공秦孝公이 진공秦公이 되었을 때 진나라는 상당히 암울했다. 흔히 진나라의 원래 강역은 섬서성 전부라고 여기는데, 진효공이 즉위할 때만 하더라도, 섬서성 북동쪽은 위魏나라가, 남동쪽은 초楚나라가 그리고 북서쪽은 북방민족이 차지하고 있었다. 물론 진효공 직전의 진헌공秦獻公이 위나라와 전투를 벌여 섬서성의 황하 연안을 확보했지만, 대국은 크게 흔들리지 않았다. 이에 진효공은 즉위하자마자 전국에 인재를 초빙한다는 명령을 내렸고, 이 소식을 들은 상앙商鞅은 위나라에서 진나라로 넘어갔다.
상앙은 위衛나라의 서출 출신으로 위魏나라의 상相 공숙좌公叔痤를 모시고 있었다. 어느날 공숙좌가 병이 들었고 위혜왕魏惠王이 병문안을 갔다. 위혜왕은 공숙좌에게 그대가 죽은 뒤 국정을 어떻게 운영하면 좋겠냐고 묻자, 공숙좌는 자신의 밑에 상앙이라는 어린 기재가 있는데, 그에게 전권을 맡기라고 하였다. 하지만 위혜왕은 이에 아무 대답도 하지 않았다. 그러자 공숙좌는 만약에 상앙에게 국정을 맡기지 않으려면 반드시 죽이라고 권유하였다. 위혜왕이 알겠다고 하며 자리를 뜨자, 공숙좌는 다시 상앙을 불렀다.
“나는 군주를 먼저 생각하고, 신하를 나중에 생각한다. 이에 군주를 위해 먼저 계책을 내놓고, 다음에 너에게 이 사실을 알릴 수 밖에 없었다. 어서 여기를 떠나거라.”
“군주께서 그대가 저를 천거하는 말을 듣지 않으셨는데, 어찌 또 저를 죽이라는 말을 듣겠습니까?”
상앙은 공숙좌를 떠나지 않았다. 위혜왕은 공숙좌의 집에서 나오면서 좌우에게 말했다.
“아. 공숙좌의 병이 정말로 깊구나, 과인으로 하여금 상앙에게 국정을 맡기라고 하면서 다시 그를 죽이라고 하다니. 이 어찌 말이 되는 소리인가?”
얼마 후 상앙은 진秦나라에 도착해서 경감景監이라는 총신을 통해 진효공과 만나 부국강병의 방법을 이야기했다. 진효공은 크게 기뻐하였고, 상앙과 함께 국사를 의논하기 시작하였다. 비록 진나라 사람들의 반대가 있었지만, 진효공의 지지를 받아 변법을 강행하였다.
모든 백성을 5가구/ 10가구 단위로 묶어 연좌제를 실시한다.
부정부패를 고발하는 자에게는 상을, 고발하지 않는 자에게는 벌을 내린다.
군공을 세운 이에게는 높은 작위를 내린다.
사사로이 싸우는 자에게는 벌을 내린다.
농업에 힘쓰는 자에게는 세금을 면제하고, 장사를 한다고는 하지만 게을러서 가난해진 자는 노비로 삼는다.
작위를 전택, 의복 등을 사여받는 기준으로 삼는다.
그러나 많은 진나라 사람들이 변법을 불편하게 여겼다. 게다가 태자도 법을 어겼다. 이에 상앙은 태자의 사부들에게 형벌을 내렸고, 그 다음 날 부터 모든 진나라 사람들은 법령을 지키기 시작했다. 10년 후 진나라에서는 길에 떨어진 물건이 있어도 줍지 않았고, 산에서 도적들이 사라졌으며, 백성들은 적국과의 전투에서 용맹하게 싸웠고, 사적인 싸움은 비겁한 것이라고 여겼다. 이에 대해 사마광은 나라를 다스리는데는 신뢰가 우선되어야 하며, 진효공과 상앙의 변법은 비록 각박했지만, 사기가 난무하는 난세에서 백성에게 신뢰를 얻는 것을 실현했다고 칭찬하였다.
한편 위나라는 상앙에 이어 손빈孫臏이라는 걸출한 인재를 제나라에 빼앗기게 된다. 위나라의 장군 방연龐涓은 자신과 동문수학한 손빈이 훨씬 유능한 것을 알고는 그를 부른 뒤 모함하여 두 다리를 자르고 이마에 문신을 새기는 형벌을 내렸다. 방연은 손빈이 자포자기 할 것이라 믿었지만, 손빈은 제나라의 사자와 함께 몰래 도망갔으며, 제위왕齊威王와 제나라의 실권자 전기田忌에게서 인정을 받아 군사가 되었다.
당시 중국에서 여전히 내노라하는 강국이었던 위나라는 조趙나라를 침공하였다. 전기는 조나라를 구원하고 싶어했다. 그러나 손빈은 위나라의 빈집을 털어야 한다고 주장하였다. 그리고 비록 위나라는 조나라의 한단邯鄲을 함락했지만, 돌아오면서 제나라의 군대에 일격으로 맞아 대패하였다. 한편 상앙이 제시한 부국강병책의 효과가 나타난 진나라는 위나라를 공략하기 시작하였다. 위나라는 이제 진나라, 제나라, 조나라와 동시에 전선을 형성하게 되었다. 이에 위나라는 조나라에게 한단을 돌려주고 강화를 맺었다.
국력을 상당히 소모한 위나라는 이웃의 한韓나라를 공략하여 힘을 키우려고 하였다. 한나라는 제나라에 구원을 요청하였다. 이에 제나라는 손빈의 계책에 따라 위나라와 한나라의 전투가 막바지에 이를 무렵에 비로소 구원을 보냈다. 위나라 군대는 비록 전력에 상당히 손실을 입었지만, 여전히 제나라의 군세를 얕잡아 보았다. 이를 파악한 손빈은 저 유명한 부뚜막 줄이기 계책을 내놓는다. 손빈은 제나라 군대로 하여금 위나라 경내로 들어온 첫째 날 10만개의 부뚜막을 만들고, 둘째 날 5만 개, 그리고 그 다음 날 2만 개의 부뚜막을 만들게 시켰다. 이를 본 방연은 제나라 병사들이 겁을 먹어 달아나기 시작했다고 판단하고, 경장비만을 갖춘 군사만을 데리고 진군 속도를 두 배로 올려 제나라 군대를 추적하였다. 손빈은 위나라 군대와 마릉馬陵에서 조우할 것이라고 계산하고 정예노병 만 명을 복병으로 숨겨두었고, 큰 나무를 벤 뒤 “방연이 이 나무 아래에서” 죽을 것이라고 썼다. 방연은 밤에 마릉에 도착하였으며, 곧 베어져 있는 큰 나무 줄기에 무언가 씌여져 있는 것을 발견하였다. 방연이 불을 켜서 그것을 읽으려는 순간 사방에서 노가 날아왔다. 방연은 스스로의 지모가 다하여 패했다는 것을 알아챘고, 자결하였다. 제나라 군대는 기세를 타고 위나라 본대도 격파하여 위나라 태자도 사로잡았다.
제나라가 마릉에서 위나라를 격파했다는 소식을 들은 상앙은 진효공에게 위나라를 공격하여 서쪽으로 나아갈 때라고 진언하였다. 진나라의 공격에 위나라는 공자앙公子卬을 보내 방어하도록 시켰다. 진나라 부대가 위나라 군대를 맞이하자, 상앙은 공자앙에게 편지를 보내 일단 정전회담을 하자고 요청하였다. 공자앙은 이를 흔쾌히 받아들이고 상앙과 회담을 하여 휴전을 성사하고는 술을 마셨다. 하지만 상앙은 숨겨둔 갑사를 동원하여 공자앙을 사로잡고 위나라 군대를 대파하였다. 이 소식을 들은 위혜왕은 황하 서쪽의 땅을 진나라에게 내어주고 화의를 요청하였고, 수도를 안읍安邑(오늘날 산서성 운성運城)에서 대량大梁(오늘날 하남성 개봉開封)으로 천도하였다. 위혜왕은 공숙좌의 말을 듣지 않은 것을 크게 후회하였다.
그러나 상앙의 말로 역시 좋지 못했다. 진효공이 죽고 상앙에게 원한을 품은 태자가 진혜문왕秦惠文王이 되었다. 공자건公子虔의 무리가 상앙이 모반을 일으킨다고 고발하여 관리가 상앙을 체포하러 왔다. 상앙은 위나라로 도망갔지만 받아들여지지 않았고, 결국 사로잡혀 거열형에 처해졌다. 기실 상앙은 진나라 사람들로부터 큰 원한을 받고 있었다. 왜냐하면 일단 법을 너무 엄격하게 적용했기 때문인데, 예컨대 진나라 수도 근처의 위수渭水가 항상 붉게 물든 채로 있었다. 뿐만 아니라 상앙도 절정의 권력을 휘두르면서 아주 거만해졌다. 마차와 갑주를 착용하고 창을 지닌 병사들을 완벽하게 갖추지 않으면 아예 밖으로 나가지 않았었다.
제나라와 진나라와의 전쟁에서 크게 손해를 입은 위혜왕은 어느날 맹자라는 사람과 회견했다. 위혜왕은 위나라를 이롭게 하는 방책을 물었지만, 맹자는 이익이 아니라 인과 의가 훨씬 중요하다고 하였다. 사실 맹자가 주창한 인과 의는 나라 내부의 결속을 다지는 측면에서 보자면 큰 이익을 거둘 수 있는 방법이라고 할 수 있다. 특히 당시는 전쟁이 빈번하게 일어났기 때문에 인력자원의 소모가 매우 컸으며, 백성들이 종종 다른 나라로 도망쳤다. 또한 당시의 식량생산 능력과 위생 상태를 고려해 본다면, 인구 증가 속도가 오늘날과는 비교할 수 없을 정도로 현저하게 낮았기 때문에, 인력 자원의 확보는 생각보다 훨씬 중요했다. 훗날 많은 이들이 삼국시대 위촉오의 국력을 따졌을 때 면적이 가장 큰 위나라가 제일 강성했다고는 하지만, 기실 인력 자원만 따진다면 촉나라가 가장 우세했다.
한편 낙양사람 소진蘇秦은 진혜문왕에게 천하를 겸병할 수 있는 방책을 진언했지만 받아들여지지 않았다. 이에 다른 제후국들과 연합하여 진나라에 대항하자는 합종책을 설파하고 다닌다. 우선 연문공燕文公에게 가서 조나라가 연나라를 침략하지 않도록 설득시킬 수 있다고 하면서 유세에 필요한 자금을 얻었다. 소진은 조나라에 가서 진나라가 한나라와 위나라를 잠식하면 언젠가는 조나라에게까지 마수를 뻗칠 것이라고 주장하면서, 그 전에 다른 제후국들과 연합하여 진나라를 정벌해야 한다고 진언하였다. 조숙후趙肅侯는 소진의 유세에 감명을 받아 그를 크게 대접하였다.
그런데 진나라는 공손연公孫衍을 시켜 위나라의 4만 군대를 격파하고 황하 연안의 섬서성 지방을 장악하였고, 동쪽으로 진군하려는 낌새를 보였다. 소진은 진나라 군대가 조나라도 공략해서 합종책이 어그러질 것을 걱정하였다. 이에 소진과 같이 귀곡선생鬼谷先生에게서 같이 수학한 장의張儀를 격분시켜 진나라로 보냈다. 장의는 그 전에 여러 제후국을 돌아다니며 자신의 정견을 유세했지만 아무 성과가 없었을 뿐만 아니라 초나라에서 곤경에 빠지기도 하였다. 그런 와중에 소진은 장의를 불러서 모욕까지 하였다. 장의는 조나라를 괴롭힐 수 있는 나라는 오직 진나라라는 것을 깨닫고 그곳으로 향했다. 소진은 자신의 수하를 은밀히 보내 장의에게 자금을 대었다. 장의는 진혜문왕과 만나 자신의 책략을 설명하고, 진나라의 객경客卿이 되었다. 그러자 소진의 수하는 자신의 정체를 밝히고, 소진이 진나라가 조나라를 공격해서 합종책이 이지러질 것을 걱정해서 장의로 하여금 진나라에 가서 병권을 잡게 시켰다고 고백했다. 이에 장의는 소진이 자리에 있는 한 조나라를 공격하지 않겠다고 말하였다.
진나라의 조나라에 대한 공격 위험이 낮아지자, 소진은 한나라와 위나라로 가서 두나라의 병력은 아직 진나라와 자웅을 겨룰만 하다면서 같이 연합전선을 맺자고 설득하였다. 그 뒤 소진은 제나라로 가서 여러 제후국들과 함께 진나라와 전쟁을 벌인다고 하더라도, 진나라가 제나라로 반격해 들어올 수 없다고 설득하였으며, 초나라한테는 진나라와 초나라는 둘 중에 하나는 멸망할 운명이라고 하면서, 진나라를 거꾸러 뜨리면 다른 제후국들이 초나라를 섬길 것이라고 하였다. 결국 소진은 연, 조, 한, 위, 제, 초나라가 같이 진나라를 공격하자는 합종의 맹약을 맺게 하였으며, 여섯 나라의 상相이 되었다.
그러나 얼마 지나지 않아 제나라에서는 제위왕齊威王이 죽고, 아들인 제선왕齊宣王이 즉위하였고, 연나라에서도 연문공燕文公이 죽고 아들인 연역왕燕易王이 즉위하였다. 합종에 동의한 여섯 제후국 가운데 두 명의 왕이 바뀌어버린 것이다. 게다가 진혜문왕은 장의의 라이벌인 공손연으로 하여금 제나라와 위나라에게 같이 조나라를 공격하자고 속였다. 여섯 나라의 합종 동맹은 와해되었고, 서로 전쟁을 벌이기 시작했다. 그리고 진나라는 이 틈을 타서 위나라와 전쟁을 벌이고, 북쪽의 이민족들을 토벌하여 섬서성을 완벽하게 자신의 영토로 굳혔다.