๐ ๊ฐ์
ํ๋ฆฌ์ฝ์ค๋ฅผ ์งํํ๋ฉด์ ์ค์๋ก branch๋ฅผ ๋ง๋ค๊ณ ์ฒดํฌ์์์ ํ์ง ์๊ณ ๋ฏธ์ ์ ์งํํ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ ์ ์ธํ ๋๋จธ์ง๋ ์ ๋ถ ๋กค๋ฐฑ์ํค๊ณ , ๊ทธ๋์ ์งํํ ์ปค๋ฐ๋ค์ branch๋ก ์ฎ๊ฒจ์ผ ํ๋๋ฐ..
1.์๋ก์ด ๋ธ๋์น ์์ฑ ๋ฐ ์ฒดํฌ์์
๋จผ์ ์ฎ๊ธธ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ํด๋น ๋ธ๋์น๋ก ์ฒดํฌ์์ํฉ๋๋ค.
git checkout -b <๋ธ๋์น-์ด๋ฆ>
2.์ปค๋ฐ ํด์ ์ฐพ๊ธฐ
git log # ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ํด์๋ฅผ ํ์ธํ์ธ์. (๋ฐฉํฅํค๋ก ์กฐ์ ๊ฐ๋ฅ)
git reset --hard <์ฒซ-์ปค๋ฐ-ํด์>
git log ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ main ๋ธ๋์น์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ํด์๋ฅผ ์ฐพ์ต๋๋ค. (๋ง์ฝ ๋ค๋ฅธ ํด์๋ก ๋ณต๊ตฌํ๋ ค๋ฉด ๊ทธ๊ฑธ ๋ณต์ฌ)
๊ทธ๋ฐ ๋ค์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ์ํ๋ก ๋ธ๋์น๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
<์ฒซ-์ปค๋ฐ-ํด์>๋ ์ค์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ ํด์๋ก ๊ต์ฒดํด์ผ ํฉ๋๋ค.
3.main ๋ธ๋์น์์ ๋๋จธ์ง ์ปค๋ฐ ๋ณต์ฌ
์ด์ git cherry-pick ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ ์ ์ธํ ๋๋จธ์ง ์ปค๋ฐ์ ์ํ๋ ๋ธ๋์น๋ก ๋ณต์ฌํฉ๋๋ค.
git cherry-pick <์ฒซ-์ปค๋ฐ-ํด์>..main
์ด ๋ช
๋ น์ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ๋ค์ ์ปค๋ฐ๋ถํฐ main ๋ธ๋์น์ ์ต์ ์ปค๋ฐ๊น์ง ์ํ๋ ๋ธ๋์น๋ก ๊ฐ์ ธ์ต๋๋ค.
4.์ํ๋ ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ push
์ํ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ์๊ฒฉ ์ ์ฅ์์ pushํฉ๋๋ค.
git push origin <๋ธ๋์น-์ด๋ฆ>
5.main ๋ธ๋์น ์๋ณต(์ฃผ์!)
git checkout main
git reset --hard <์ฒซ-์ปค๋ฐ-ํด์>
git push --force-with-lease origin main
--force-with-lease ์ต์
์ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์๋ก์ด ์ปค๋ฐ์ pushํ์ง ์์๋์ง ํ์ธํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ง ๊ฐ์ ๋ก push๋ฅผ ์ํํฉ๋๋ค.
[์ฃผ์]
git push --force ๋๋ git push --force-with-lease ๋ช ๋ น์ ์๊ฒฉ ์ ์ฅ์์ ํ์คํ ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์, ํ์ ํ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ช ๋ น์ ์ฌ์ฉํ๊ธฐ ์ ์ ํ์๋ค๊ณผ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.