๋ณดํต Git์ ์ด์ฉํด ํ์ ์ ํ๋ค๋ณด๋ฉด "์๊น๋ก ๋์๊ฐ๊ณ ์ถ๋ค.." ํน์ "์ด ๊ธฐ๋ก ์์ ๊ณ ์ถ๋ค.." ํ๋ ์๊ฐ์ด ์์์ ๊ฒ์ด๋ค.
Git์๋ ์ด๋ฐ ์ํฉ์ ๋์์ ์ค ์ ์๋ ๋ช ๋ น์ด๋ค์ด ์กด์ฌํ๋ค.
๋น์ทํด ๋ณด์ด์ง๋ง ์๋ก ๋ค๋ฅธ ์ญํ ์ ํ๋ ๋ค ๊ฐ์ง re- ๋ช ๋ น์ด์ ์ฐจ์ด์ ์ ์์๋ณด์.
Git revert๋?
Git revert ๋ ๊ณผ๊ฑฐ ์ปค๋ฐ์ ์ทจ์ํ๋ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋๋ ๋ช ๋ น์ด์ด๋ค.
๋์ ๋ฐฉ์์ ์ด๋ฏธ ๋ง๋ค์ด์ง ํน์ ๋ฒ์ (Commit)์์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ๋๋ก ์ํํ๋๋ฐ, ์๋ฅผ ๋ค์ด A ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฒ์ ์ ๋๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด, Git์ด ์๋์ผ๋ก A ์ฝ๋๋ฅผ ์ญ์ ํ๋ ์๋ก์ด ๋ฒ์ ์ ํ๋ ๋ ๋ง๋ค์ด์ค๋ค.
๊ธฐ์กด Commit์ ์ง์ฐ์ง ์๊ธฐ์ ํ๋ก์ ํธ์ ์ ์ฒด ๊ธฐ๋ก(History)๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์์ ํ๊ฒ ๋๋๋ฆด ์ ์๋ค๋ ์ฅ์ ์ด ์๊ณ , GitHub์ ์ฌ๋ฆฐ Commit๋ ์ทจ์ ๊ฐ๋ฅํ๋ฉฐ "์ด Commit์ ๋๋๋ ธ๋ค"๋ ๊ธฐ๋ก์ด ๋ช ํํ๊ฒ ๋จ๊ธฐ์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป ํ์ ํ๋ ๊ณต์ฉ ๋ธ๋์น์์ ์ฌ์ฉํ๊ธฐ์ ๊ฐ์ฅ ์ข๋ค.
ํ์ง๋ง, ์ทจ์ Commit์ด ๊ณ์ ๋จ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ก์ด ์กฐ๊ธ ๊ธธ์ด์ง๋ค๋ ๋จ์ (?)์ด ์๋ค.
๋ช ๋ น์ด ์ฌ์ฉ๋ฒ
git revert <์ปค๋ฐ ํด์> ์ ํํ๋ก ์ฌ์ฉํ๋ฉฐ ์ฌ๊ธฐ์ ์ปค๋ฐ ํด์๋ git log ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ ๋ ๋์ค๋ ์๋ฌธ+์ซ์ ์กฐํฉ์ ๊ณ ์ ๋ฒํธ์ด๋ค.
abc1234๊ฐ ์คํ๊ฐ ์๋ ๋ฒ์ ์ด๋ผ๋ฉด git revert abc1234 ๋ช ๋ น์ด๋ฅผ ํตํด Git์ด ์์์ "abc1234 ๋ฒ์ ์ ์ทจ์ํจ"์ด๋ผ๋ ์๋ก์ด ๋ฒ์ ์ ํ๋ ๋ ๋ง๋ค์ด์ค๋ค.
Git reset์ด๋?
Git reset ์ ํ์ฌ ๋ธ๋์น์ ๊ธฐ์ค์ ๊ณผ๊ฑฐ ์ปค๋ฐ์ผ๋ก ๊ฐ์ ๋ก ์ด๋์ํค๋ ๋ช ๋ น์ด๋ก, ์ฝ๊ฒ ์๊ฐํ๋ฉด ํน์ ์์ ์ผ๋ก ์๊ฐ์ ์์ ํ ๋๋๋ ค, ๊ทธ ์ดํ์ ๊ธฐ๋ก์ ์์๋ ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
๋์ ๋ฐฉ์์ ๋ด๊ฐ ๋์๊ฐ๊ณ ์ถ์ ์ง์ ์ผ๋ก ์๊ฐ์ ์ ํํ๋ ๊ฒ์ธ๋ฐ ์ด ๋ ์ธ ๊ฐ์ง ์ต์ ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค.
- --soft : ๊ธฐ๋ก(Commit)๋ง ์ง์ฐ๊ณ , ๋ด๊ฐ ์์
ํ๋ ์ฝ๋ ํ์ผ๋ค์ ๊ทธ๋๋ก ๋๋ค. (Staging ์ํ ์ ์ง)
- --mixed (๊ธฐ๋ณธ ์ค์ ) : ๊ธฐ๋ก(Commit)๋ ์ง์ฐ๊ณ Staging๋ ์ทจ์ํ์ง๋ง, ์ฝ๋ ํ์ผ์ ๋จ๊ฒจ๋๋ค.
- --hard : ๊ธฐ๋ก, ๋๊ธฐ ๋ชฉ๋ก, ์ฝ๋ ํ์ผ๊น์ง ์ ๋ถ ๊ทธ ๋น์ ์ํ๋ก ์น ๋ค ๋๋๋ฆฐ๋ค.
์๋ชป ๋ง๋ ๊ธฐ๋ก์ ๊น๋ํ๊ฒ ์ง์ธ ์ ์๊ณ ์์
์ค์ธ ์ปค๋ฐ์ ์์ ๋กญ๊ฒ ์์ ํ ์ ์๊ธฐ์ ๋ด ์ปดํจํฐ์์๋ง ์์
ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ค. ํ์ง๋ง, ์ด๋ฏธ GitHub๋ฑ์ ์ฌ๋ฆฐ ๊ธฐ๋ก์ ์ง์ฐ๋ฉด ๋ค๋ฅธ ํ์๋ค์ ์ฝ๋์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๊ธฐ์ ๋งค์ฐ ์ํํ๋ค.
(ํ๋ก์ ํธ์ History๊ฐ ๊ฐ์ ๋ก ๋ฐ๋)
๋ช ๋ น์ด ์ฌ์ฉ๋ฒ
git reset --soft <์ปค๋ฐ ํด์> : ์ปค๋ฐ๋ง ๋๋๋ฆฌ๊ณ ํ์ผ ๋ด์ฉ์ด๋ Staging ์ํ(Commit ๋๊ธฐ ์ํ)๋ ์ ์งํ๋ค.
=> ์ปค๋ฐ์ ๋ฉ์ธ์ง๋ง ๋ค์ ์ฐ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
(ex. Commit ๋ฉ์ธ์ง์ ์คํ๊ฐ ๋ฌ๊ฑฐ๋ Commit์ ํ๋๋ก ํฉ์น๊ณ ์ถ์ ๋ ์ฌ์ฉ)
git reset <์ปค๋ฐ ํด์ > : ๊ธฐ๋ณธ์ ์ผ๋ก --mixed ์ค์ ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ Commit๊ณผ Staging ์ํ๋ฅผ ์ทจ์ํ๊ณ ํ์ผ ๋ด์ฉ๋ง ์ ์งํ๋ค.
=> ์ปค๋ฐ์ ์ทจ์ํ๊ณ ๋ค์ ์์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
(ex. Commit์ ๋ฃ์ง ๋ง์์ผ ํ ํ์ผ์ ๋ฃ์์ผ๋ฉด git add๋ฅผ ํตํด Commit์ ํฌํจํ ํ์ผ๋ค์ ๋ค์ ๊ณจ๋ผ๋ผ ๋ ์ฌ์ฉ)
git reset <์ปค๋ฐ ํด์> --hard : Commit, Staging, ํ์ผ ๋ด์ฉ๊น์ง ๋ชจ๋ ์ญ์ ํ๋ค.
=> ์ด ์ปค๋ฐ ์ดํ๋ ์ ๋ถ ํ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋ฉฐ ๋๋๋ฆด ์ ์์ ์๋ ์๊ธฐ์ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผํ๋ค.
Git restore๋?
Git restore ๋ ํ์ผ ๋จ์๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๋ ๋ช ๋ น์ด์ด๋ฉฐ Git reset ๋ช ๋ น์ด ๋ณด๋ค ํจ์ฌ ์์ ํ๊ณ ์ง๊ด์ ์ด๋ฉฐ ๊ถ์ฅ๋๋ ๋ฐฉ์์ด๋ค.
๋์ ๋ฐฉ์์ ์์ ์ค์ธ ํ์ผ์ด๋ Staging(Commit ๋๊ธฐ ์ํ) ์ํ์ ํ์ผ์ ํน์ ์ํ๋ก ๋ณต๊ตฌ ํ๋ ๊ฒ์ด๋ค.
=> git commit์ ํ ์ํ๋ผ๋ฉด git reset์ ์ฐ์ ์ ์ผ๋ก ํด์ค์ผํจ
Git reset ์ด ํ๋ก์ ํธ ์ ์ฒด์ ์๊ฐ์ ๋๋๋ฆฌ๋ ๋๋์ด๋ผ๋ฉด, restore๋ ํ์ผ ๋จ์๋ก ์๋ํ๋ค.
=> ์ค์๋ก ํ์ผ์ ์ง์ ๊ฑฐ๋ ์ฝ๋๋ฅผ ์ด์ํ๊ฒ ์์ ํ์ ๋, ๋ง์ง๋ง์ผ๋ก ์ ์ฅ๋ ์ํ๋ก ํด๋น ํ์ผ๋ง ๋๋๋ ค์ค
์ฐ์ Git restore ๋ช ๋ น์ด๋ ํ์ผ ๋จ์์ ๋๋๋ฆผ์ด๋ผ ๊ต์ฅํ ์์ ํ๊ณ ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ข๋ค.
ํ์ง๋ง, Commit History ์์ฒด๋ฅผ ์กฐ์ํ์ง๋ ๋ชปํ๊ธฐ์ reset๊ณผ์ ์ฐจ์ด์ ์ด ์๋ค.
Git reset ์ ๋ฒ์ ๊ธฐ๋ก(Commit)์ ๊ด๋ฆฌํ๋๋ฐ ์ง์คํ๊ณ , Git restore ๋ ํ์ฌ ์์ ์ค์ธ ํ์ผ์ ๋ณต๊ตฌํ๋ ๋ฐ ์ง์คํจ
๋ช ๋ น์ด ์ฌ์ฉ๋ฒ
git restore <ํ์ผ๋ช > ์ ํตํด ํ์ผ์ ๋ง์ง๋ง ์ปค๋ฐ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
=> ํ์ผ ์์ ํ ๊ฒ๋ค์ด ๋ค ํ์ ์์ ๋ ์ฌ์ฉํจ
git restore --staged <ํ์ผ๋ช > ์ฒ๋ผ --staged ์ต์ ์ ์ฌ์ฉํ๋ฉด git add ํ๋ ํ์ผ์ ์ทจ์ํ๋ค.
=> ์ด ๋๋ ๋ด๊ฐ ํด๋น ํ์ผ์ ์์ ํ ์ฝ๋๋ ๊ทธ๋๋ก ์ ์ง๋๊ณ ๋จ์ํ Staging์์ ํด๋น ํ์ผ๋ง ๋นผ๋ ์์ผ๋ก ๋์ํ๋ฏ๋ก ์ด ํ์ผ์ Commit์ ํฌํจ ํ์ง ์์ ๋ ์ฌ์ฉํจ
git restore --source <์ปค๋ฐ ํด์> <ํ์ผ๋ช
> ์ฒ๋ผ --source ์ต์
์ ์ฌ์ฉํ๋ฉด ํด๋น ํด์๊ฐ์ ํด๋นํ๋ ์์ ์ ์ฐธ๊ณ ํด์ ๊ทธ ์์ ์ ์ฌ๋ฌ ํ์ผ ์ค <ํ์ผ๋ช
>์ ์ ํ ํ์ผ๋ง ๊บผ๋ด์์ ๊ณผ๊ฑฐ ์์ ์ ๋ด์ฉ์ผ๋ก ํด๋น ํ์ผ์ด ๋ฐ๋๊ฒ๋๋ค.
(๋๋จธ์ง ํ์ผ์ ๊ทธ๋๋ก ์ ์ง๋จ)
=> ํด์๊ฐ ๋์ HEAD~3(ํ์ฌ๋ก๋ถํฐ 3๊ฐ ์ ์ปค๋ฐ) ๊ฐ์ ํํ์ ์จ๋ ๋์ํจ
Git rebase๋?
Git rebase ๋ ์ปค๋ฐ๋ค์ ๋ค์ ์ ๋ ฌํด์ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ๋ง๋๋ ๋ช ๋ น์ด์ด๋ค.
https://youtu.be/5jf6_Wnn4QE?si=rQGndDWjJZRnxH_I
๋์ ๋ฐฉ์์ ๋ด ์์ ์ ์์์ ์ ๋ค๋ฅธ ์ต์ ์์ ์ผ๋ก ์ฎ๊ฒจ์, ๋ง์น ์ฒ์๋ถํฐ ๊ฑฐ๊ธฐ์ ์์ํ ๊ฒ์ฒ๋ผ ๋ง๋๋ ๊ฒ์ด๋ค.
์ฌ๋ฌ๋ช ์ด ํ์ ํ๋ค ๋ณด๋ฉด Branch๊ฐ ์ฌ๋ฌ ๊ฐ ์๊ธฐ๊ฒ ๋ ํ ๋ฐ ์ด๋ Git rebase ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณต์กํ๊ฒ ์ฝํ Branch๋ค์ ์๋ผ์ ๋ฉ์ธ์ด ๋๋ Branch ๋์ ์ผ๋ ฌ๋ก ๋ถ์ฌ์ค๋ค.


์ ์์์ ๋ณด๋ฉด ์ด๋ฐ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ์ด ๋์ด์๋๋ฐ ์ด๊ฑธ ๋ณด๋ฉฐ ๊ต์ฅํ ์ฝ๋ค.
master branch์ commit 3์์ ๋ถ๊ธฐ๋ feature branch๊ฐ ์๋๋ฐ feature branch์์ git rebase master ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด
'๋๋ฅผ ์ค ์๋ก ์ฌ๋ ค' ๋ฅผ ๊ธฐ์ตํ๋ผ๊ณ ํ๋๋๋ก
'๋(ํ์ฌ branch์ธ feature)๋ฅผ ์ค(rebase ๋ช ๋ น์ด์์ ์ง์ ํ ๋์์ธ master) ์๋ก(์ง์ ํ master branch์ ์ต์ commit ๋ค์ ์์น)๋ก ์ฌ๋ ค' ๋ก ๋์ํ์ฌ ํ๋ก์ ํธ์ History๊ฐ ์ผ์๋ก ์ด์๊ฒ ๋ฐ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ๋ก์ ํธ ๊ธฐ๋ก์ด ๊ผฌ์ด์ง ์๊ณ ํ ์ค๋ก ์ญ ์ด์ด์ง๊ธฐ์ ์ปค๋ฐ์ ๋ณด๊ธฐ ๊ต์ฅํ ํธํด์ง๋ค.
ํ์ง๋ง, reset๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฏธ ์ฌ๋ฆฐ Commit์ ๋ฟ๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ฉด ๋๋ฃ๋ค์ด ํผ๋์ ๋น ์ง ์ ์๊ธฐ์ ์กฐ์ฌํด์ผํ๊ณ , ์ปค๋ฐ ํด์๊ฐ ๋ฐ๋๊ฒ ๋๋ค.
=> Git์ ์ปค๋ฐ ํด์๋ Parent Commit(๋ฐ๋ก ์ง์ ๋ถ๋ชจ ์ปค๋ฐ)์ ํด์๊ฐ์ ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก ๋ฟ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋น์ฐํ ํ์ฌ Commit์ ํด์๋ ๋ณ๊ฒฝ๋จ
'๐ป CS > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Git์ด๋? (Git ์์ ์์ญ๊ณผ ํ์ผ ์ํ) (0) | 2025.12.25 |
|---|