"๊น? ๊นํ๋ธ๋ ๋ ๋ญ์ผ..? ์ฐ๋ฆฌ ์นํด์ง ์ ์๋๊ฑฐ๋?๐"
์ด๋ฒ ์ฐํ ์ฝ 5๊ธฐ ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ์ ๋ฏธ์ ๋ชฉํ ์ค ํ๋๋ ๋ฐ๋ก
Git๊ณผ Github์ ์ต์ํด์ง๋ ๊ฒ ์ด์๋ค.
์ค์ ๋ก ์ด๋ฒ ํ๋ฆฌ์ฝ์ค 4์ฃผ๋์
git๊ณผ github
๋ฅผ ์ด์ฉํ์ฌ ๋ฏธ์
๊ณผ์ ๋ฅผ ์ ์ถํด์ผ ํ๋ค.
๊ทธ ๋์ Git์ ๋ฌด์์์ ์ผ๋ก๋ง ์ฝ์งํด๊ฐ๋ฉฐ
addํ๊ณ commitํ๊ณ pushํ๋ฉด์ ์ฌ์ฉํ๋ ์๊ฐ
์ด ๋ง์๋๋ฐ,
์ด์ฐธ์ Git์ ๋ํด ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๊ณ ๋ค๊ณ , ์นํด์ ธ ๋ณด๋๋ก ํ์.
Git์ ๋ํด ํ๊ณ ๋ค๊ธฐ ์ ์,
Git๊ณผ Github๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ์ ์ถํ๋ ์์์ ๋ํด ๋จผ์ ์์๋ณด์.
fork๋ ํ๋ก์ ํธ์ ์ ์ฅ์๋ฅผ ์์ ์ ๊ณ์ ์ผ๋ก ๋ณต์ฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์์ผ๋ก ๋ชจ๋ ๋ฏธ์
์ ์์ ์ ๊ณ์ ์๋์ ์๋ ์ ์ฅ์๋ฅผ ํ์ฉํด ์งํํด์ฃผ์ธ์.
Github์์ ๋ฏธ์
์ ์ฅ์์ ๋งํฌ๋ฅผ ํ๊ณ ๋ค์ด๊ฐ๋ฉด,
์ฐ์ธก ์๋จ์ fork ๋ฒํผ์ ๋ณผ ์ ์๋ค.
์ด ๋ฒํผ์ ํด๋ฆญํด forkํ๋ฉด ๋ด github ์ ์ฅ์์ ๋ณต์ฌ๋์ด ์ถ๊ฐ๋๋ค.
fork๋ ๋จ์ด์ ์ผ๋ก๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐ๋จนํ๋ค๋ ๋๋์ ์ค๋ค.
๋ง ๊ทธ๋๋ก ํ๋ก์ ํธ ์ ์ฅ์๋ฅผ ์ฐ์ด์ ๋ด ์ ์ฅ์ ์ ์ ์์ ์ฌ๋ ค๋๋ ๋๋
์ด๋ค.
fork๋ฅผ ์๋ฃํ๋ค๋ฉด ๋ด ์ ์ฅ์์ ํ๋ก์ ํธ ์ ์ฅ์๊ฐ ๋ณต์ฌ๋์ด ์์ ๊ฒ์ด๋ค.
ํ๋ก์ ํธ๋ฅผ ์์
ํ๊ธฐ ์ํด์ ๋ด ๋ก์ปฌpc(๋ณธ์ธ์ ์ปดํจํฐ)๋ก
clone(๋ณต์ฌ)ํด๋๋ ๊ณผ์ ์ด ๋ ํ์ํ๋ค.
fork๊ฐ ์ ์ฅ์์ ๋ณต์ฌ๋ฅผ ํด๋๋ ๊ฒ ์ด์๋ค๋ฉด,
clone์ ์ ์ฅ์์ ์๋ ๊ฒ์ ๋ก์ปฌpc๋ก ๋ณต์ฌํด๋๋ ๋๋์ด๋ค.
forkํ ์ ์ฅ์๋ github.com์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ค ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ , ์์ ํ๋ ์์ ์ ํ ์ ์์ต๋๋ค.
clone ๋ช ๋ น์ github.com์ ์กด์ฌํ๋ ์ด ์ ์ฅ์๋ฅผ ์์ ์ ๋ ธํธ๋ถ ๋๋ PC๋ก ๋ณต์ฌํ๋ ๊ณผ์ ์ ๋๋ค.
ํฐ๋ฏธ๋์์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ ๋ ฅํ๋ค.
git clone https://github.com/{๋ณธ์ธ_์์ด๋}/{์ ์ฅ์ ์์ด๋}.git
ex) git clone https://github.com/woowacourse/java-baseball.git
// cloneํ ํด๋๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ
cd {์ ์ฅ์ ์์ด๋}
ex) cd java-baseball
ํด๋ก ์ ์๋ฃํ๋ฉด ๋ด ๋ก์ปฌpc์ ๋๊ฐ์ด ๋ณต์ฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
git์ ์๋ก ๋ค๋ฅธ ์์
์ ํ๊ธฐ ์ํ ๋ณ๋์ ๊ณต๊ฐ์ ๋ง๋ค๊ธฐ ์ํด
๋ธ๋์น๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ ์ ๋ ฅํด ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.
git checkout -b {๋ณธ์ธ ์์ด๋}
ex) git checkout -b javajigi
๋ธ๋์น๋ฅผ ์์ฑํ ํ์ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ธ๋์น๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๋ด ๋ก์ปฌpc์ ์๋ก์ด ๋ธ๋์น ์์
๊ณต๊ฐ์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
๋ฏธ์
์งํ์ ์ํด cloneํ ์ ์ฅ์๋ฅผ
์์ ์ด ์ฌ์ฉํ๊ณ ์๋ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
์์ ์ด ์ฌ์ฉํ๋ ๋๊ตฌ(VS code๋ IntelliJ ๋ฑ๋ฑ)๋ฅผ ์ฌ์ฉํด์ ์งํํด์ฃผ์ธ์.
1. Visual Studio Code๋ฅผ ์์
2. Open Project (์์์ cloneํ ํด๋๋ฅผ ์ ํํฉ๋๋ค.)
3. ๋ฏธ์ ์๊ตฌ์ฌํญ์ ํ์ ํด ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
๊ธฐ๋ฅ ๊ตฌํ์ ์๋ฃํ ํ ๋ก์ปฌ ์ ์ฅ์์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ๋ฐ์ํ๊ธฐ ์ํด add, commit ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
git status // ๋ณ๊ฒฝ๋ ํ์ผ ํ์ธ
git add -A(๋๋ .) // ๋ณ๊ฒฝ๋ ์ ์ฒด ํ์ผ์ ํ๋ฒ์ ๋ฐ์
git commit -m "๋ฉ์์ง" // ์์
ํ ๋ด์ฉ์ ๋ฉ์์ง์ ๊ธฐ๋ก
๊ธฐ๋ฅ ๊ตฌํ์ ์๋ฃํ๊ณ add, commit ๋ช
๋ น์ ์คํํ ํ์ ์ํ
๋ ์๋์ ๊ฐ์ต๋๋ค.
๋ด ๋ก์ปฌpc์ ๊ธฐ๋ฅ๊ตฌํ์ ์๋ฃํ ์ปค๋ฐํ์ผ๋ค์ด ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ๋์ ์๊ฒฉ ์ ์ฅ์์ commit๋ ํ์ผ๋ค์ ์ฌ๋ ค์ค์ผํ๋ค.
๋ก์ปฌ์์ commit ๋ช
๋ น์ ์คํํ๋ฉด ๋ก์ปฌ ์ ์ฅ์์๋ง ๋ฐ์๋๊ณ ,
์๊ฒฉ github.com์ ์ ์ฅ์์๋ ๋ฐ์๋์ง ์์ต๋๋ค.
github.com์ ์ ์ฅ์์๋ ๋์ผํ๊ฒ ๋ฐ์ํ๊ธฐ ์ํด push ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
git push origin ๋ธ๋์น์ด๋ฆ
ex) git push origin javajigi
push ๋ช ๋ น์ ์คํํ ํ์ ์ํ๋ ์๋์ ๊ฐ์ต๋๋ค.
push๋ฅผ ํ๊ฒ๋๋ฉด ๋ด Github์ ๋ง๋ค์๋ ๋ธ๋์น๊ฐ ์ฌ๋ผ์จ ๋ชจ์ต์ ๋ณผ ์ ์๊ณ ,
๊ทธ ์์ commitํ๋ ํ์ผ๋ค์ด ๊ธฐ๋ก ๋ ๋ชจ์ต์ ํ์ธ ํ ์ ์๋ค.
Pull Request๋ github์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก ์ฝ๋๋ฆฌ๋ทฐ ์์ฒญ์ ๋ณด๋ผ ๋ ์ฌ์ฉํฉ๋๋ค.
Pull Request๋ original ์ ์ฅ์(woowacourse์ ์ ์ฅ์)์ main ๋ธ๋์น์
์ ๋จ๊ณ์์ ์์ฑํ ๋ธ๋์น ์ด๋ฆ(์ ๋จ๊ณ์ ์์์๋ javajigi)์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
ex) ๋ฏธ์
์ ์งํํ javajigi/java-baseball javajigi ๋ธ๋์น => woowacourse/java-baseball main
๋ธ๋์น๋ก Pull Request๋ฅผ ๋ณด๋ธ๋ค.
- ๋ธ๋ผ์ฐ์ ์์ github ์ ์ฅ์์ ์ ๊ทผ
- ๋ธ๋์น๋ฅผ ์์ ๋ธ๋์น๋ก ๋ณ๊ฒฝ(์ ๋จ๊ณ์ ์์์๋ javajigi)
- ๋ธ๋์น ์ค๋ฅธ์ชฝ์ ์๋ "New pull request" ๋ฒํผ ํด๋ฆญ
- Pull Request ์ ๋ชฉ์ [$๋ฏธ์ ์ ๋ชฉ] $์ด๋ฆ ๋ฏธ์ ์ ์ถํฉ๋๋ค. ํ์์ผ๋ก ์์ฑํด์ฃผ์ธ์.
- ํ์ฌ ๋ฏธ์ ์์ ์์ ํ ๋ด์ฉ์ ์ ๋ ฅํ๊ณ "Create pull request" ๋ฒํผ์ ํด๋ฆญํด Pull Request๋ฅผ ๋ณด๋ด์ฃผ์ธ์.
ํ๋ฆฌํ์คํธ๊น์ง ๋ชจ๋ ๋ง์น๋ฉด
๋ฏธ์
์ ์ฅ์์ ๋ด๊ฐ ์์
ํ๋ ๋ธ๋์น์ ์ปค๋ฐ๋ด์ฉ๋ค์ด PR๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ๋ ์ ์,
1. Pull Request๋ฅผ ๋ณด๋ด๊ธฐ ์ ๋ธ๋์น๋ฅผ ํ์ธํ๋ค.
๊ธฐ๋ฅ ๊ตฌํ ์์
์ fork๋ Repository์ main branch๊ฐ ์๋,
๊ธฐ๋ฅ ๊ตฌํ์ ์ํด ์๋ก ๋ง๋ ๋ธ๋์น์์ ์์
ํ ํ PR์ ๋ณด๋ธ๋ค.
2. PR์ ํ ๋ฒ ์์ฑํ๋ค๋ฉด ๋ซ์ง ๋ง๊ณ ์ถ๊ฐ ์ปค๋ฐ์ ํ๋ค.
PR์ ์ด๋ฏธ ํ ๋ฒ ๋ณด๋๋ค๋ฉด, ์๋ก์ด PR์ ์์ฑํ ํ์๊ฐ ์๋ค.
์์ ์ด ํ์ํ๋ค๋ฉด ์ถ๊ฐ ์ปค๋ฐ์ ํ๋ฉด ์๋์ผ๋ก ๋ฐ์๋๋ค.
๋ง์ฝ upstream, origin์ด ๋ฌด์จ ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์๋์ ๋ด์ฉ๋ค์ด ๋์์ ์ค ๊ฒ์ด๋ค.
upstream์ ์๋ฅ, downstream์ ํ๋ฅ๋ฅผ ๋ํ๋ธ๋ค.
์ด ์ฉ์ด๋ค์ ๊ต์ฅํ ์๋์ ์ธ ๊ฐ๋
์ด๋ค.
์ ๋์ ์ธ upstream๊ณผ downstream์ ์๋ค.
๊ด๊ณ์ ํ๋ฆ์ ๋ํ๋ผ ๋ ์ด๋ฅผ ๋ช ํํ๊ฒ ํํํด์ฃผ๊ธฐ ์ํด์
์๊ฒจ๋ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์๋์ ๊ทธ๋ฆผ์ ์ถ๊ฐ๋ก ์ดํด๋ณด์.
๋ณดํต ์ ์ฅ์ ์์ฑํ๊ณ remote addํ๊ณ origin์ ๋ถ์ฌ์ฃผ๊ฑฐ๋,
pull์ ํ๊ฑฐ๋ push๋ฅผ ์ฌ์ฉํ ๋ origin์ด๋ผ๋ ํค์๋๋ฅผ ๋ถ์ธ๋ค.
remote๋ "์๊ฒฉ" , "์๊ฒฉ์ผ๋ก ๊ด๋ฆฌํ๋" ์ด๋ผ๊ณ ์๊ฐํด์ฃผ๋ฉด ๋๋ค.
์๊ฒฉ์ ์ฅ์์ ๋ฏธ์
์ ์งํํ๊ธฐ ์ํด์ ๊ฐ์ฅ ๋จผ์ clone์ ํ๋ฉฐ ์์ํ๊ฒ ๋๋ค.
clone์ด ์๋ฃ๊ฐ ๋ ํ git remote -v
๋ฅผ ์
๋ ฅํด๋ณด๋ฉด
์๋์ ์ผ๋ก ์๊ฒฉ ์ ์ฅ์๊ฐ ๋ฑ๋ก์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
git remote add origin ๋ด ์๊ฒฉ์ ์ฅ์ ์ฃผ์
git push -u origin main
//๋ด main ๋ธ๋์น๋ก pushํ๋ค.
์ด๋ origin์ ๋ง ๊ทธ๋๋ก ์์ฒ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
๋ฌผ์ด ํ๋ฅด๋ ๋ฐฉํฅ์ด ์์ผ๋ฉด ๊ทธ ๋ฌผ์ ์์ฒ(origin)์ด ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ด ์๊ฒฉ ์ ์ฅ์๋ฅผ origin์ด๋ผ๋ ์์ฒ์ผ๋ก ์ด๋ฆ์ ๋ถ์ฌํด์
๊ด๋ฆฌํ๊ฒ ๋ค๋ ๋ช
๋ น์ ๋ด๋ฆฐ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด
-u
๋ ๋ฌด์จ ๋ง์ผ๊น?
--set-upstream์ ์ฝ์๋ก ์ฐ๋ ๋ง
์์ ์๊ธฐํ๋ฏ์ด upstream, downstream์ ์๋์ ์ธ ๊ฐ๋
์ด๋ค.
์ด๋ ์๋ฅ์ ํ๋ฅ ๊ด๊ณ๋ฅผ ์ค์ ํด์ฃผ๊ธฐ ์ํด์ -u ๋ฅผ ์จ์ ๊ด๊ณ๋ฅผ ์ค์
ํด์ฃผ๋ ๊ฒ์ด๋ค.
remote origin์ด๋ผ๊ณ ์ฌ์ฉํ๋ ๊ฒ์
์ ์ฅ์๋ฅผ ๋ง๋ค๋ฉด, ๋ณดํต ๊ทธ ์์ฒ๋ณด๋ค ๋ ์์์ ํ๋ฆ(์๋ฅ)๊ฐ ์๊ธฐ๋๊ฒ ๋ง์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ origin ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํํํ๊ณ upstream์ ์ ๋ง ๊ฐ๋
์ ์ธ ์๋ฏธ๋ก๋ง ์ธํ
ํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง, ์ ๊ทธ๋ฆผ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ์ํฉ์ด๋ผ๊ณ ๋ณธ๋ค๋ฉด
remote upstream -> remote origin -> local
ํ๋ก์ ํธ ์ ์ฅ์ -> ๋์ ์ ์ฅ์ -> ๋์ ๋ก์ปฌ
์ด๋ฐ ํ๋ฆ์ด ๋๋ค.
์ฒ์ ์๋ฅ๋ forkํ ๋ ํ์งํ ๋ฆฌ ์ ์ฅ์,
๊ฐ์ด๋ฐ๋ ๋์ github ์ ์ฅ์,
๋ง์ง๋ง์ ๋์ ๋ก์ปฌpc๊ฐ ๋๋ค.
์ฆ, origin์ ๊ธฐ์ค์ผ๋ก ํ์๋ ๋ ์๋ก ๊ฐ๋๊ฒ upstream๊ฐ๋ ์ด ๋๋ค.
์๋ฅ์์ ํ๋ฅ๋ก ํ๋ฅด๋ฉด์
์ ์ฐจ ์ฌ๋ฌ ๊ฐ๋์ ์ค๊ธฐ๋ก ํ๋ฌ๊ฐ๋ค๊ณ ์๊ฐํด์ฃผ๋ฉด ์ข๋ค.
๊ทธ๋ฆฌ๊ณ git clone์ ํ๊ฒ ๋๋ฉด
์ด๋ฏธ origin์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ํ๊ด๊ณ๊ฐ ์์ฑ์ด ๋๋ค.
Q. ํน์ add, commit, puch๋ฅผ ๊ธฐ๊ณ์ ์ผ๋ก ๋ฐ๋ณตํ๊ณ ์๋์?๐ค
๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด
ํฐ๋ฏธ๋์ ๋ด์ฅ ๊ฐ์ฒด์ธ Git์ ๋๊ตฌ๋ก์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ณด์.
๊ฐ์ฅ ์ถ์ฒํด์ฃผ๊ณ ์ถ์ ๋ฐฉ๋ฒ์
git ์์ ์ฌ์ฉ์ค๋ช
์ด๋ ๋์๋ง ๊ฐ์ ๊ธฐ๋ฅ์ ์ด์ฉ
ํ๋ ๊ฒ์ด๋ค.
git์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๊ฒ๋ค๋ง ์ ์ดํด๋ณด์๋ ๋์์ ๋ง์ด ๋ฐ์์์๋ค.
์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ฌ์ฉํ๋ Git ๋ช
๋ น์ด๋ค๊ณผ
๊ทธ ์ธ ๋ค์ํ ๊ฐ์ฒด๋ค์ ์ดํด๋ณด์.
Git ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
๋ช
๋ นํ๋กฌํํธ(CMD)
ํฐ๋ฏธ๋
Git Bash, Git GUI
๋ฌด์์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ ๊ฐ์ผ๋ ๋๋ฌด ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
์๋ก์ด ์ ์ฅ์ ๋ง๋ค๊ธฐ
์์์๋ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์ด๋ฏธ ์์ฑ๋ ๋ฏธ์
์ ์ฅ์๋ฅผ forkํ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ง๋ง,
์์ ์๋ก์ด ์ ์ฅ์๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
๋ ์๋ค.
๋จผ์ ํ๋ก์ ํธ ํด๋๋ฅผ ํ๋ ๋ง๋ค๊ณ , cd ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ํ๋ก์ ํธ ํด๋ ์์น๋ก ์ด๋ํ๋ค.
cd ํด๋๊ฒฝ๋ก
๊ทธ๋ฆฌ๊ณ git init์ ์ณ๋ด ์๋ค.
git init
์๋ก์ด git ์ ์ฅ์๊ฐ ๋ง๋ค์ด์ง๋๋ค.
Q. ํ์ฌ ๋๋ ํ ๋ฆฌ์์ git init์ ์ ๋ ฅํ๋ฉด ํ์ฌ ๋๋ ํ ๋ฆฌ๊ฐ ๋ก์ปฌ ์ ์ฅ์๊ฐ ๋๋ค.
์ ๋ต์ yes ์ด๋ค.
git์ ๋ก์ปฌ์ ์ฅ์๋ .git
์์ ์๋ค.
.git์์ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ฌ๋ฐ๋๋ฐ
tree .git/
์ด๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ฐ๋ฉด ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณผ ์ ์๋ค.
git init
์ ํ๋ฉด ์ฌ๋ฌ ๋ฉ์ธ์ง๋ก ํ์๋ฅผ ํด์ค๋ค.
๊ฐ๋ฅํ๋ฉด ์ด ํผ๋๋ฐฑ ์ฃผ๋ ๋ฉ์ธ์ง๋ค์ ์ดํดํด ๋ณด๋ คํ ๋ค์
์ฐพ์๋ณด๋ฉด ํจ์ฌ ๋ git์ ๋๊ตฌ๋ก์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ช
๋ น์ด์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด
git init -help
๋ฅผ ์น๋ฉด ์ค๋ช
์ด ์ ๋์์๋ค.
๋ช ๋ น์ด๋ฅผ ์ ์ธ ์ ์๋ ์์ด๋์ด๋ฅผ ์ป๊ธฐ์๋ ์ข๋ค.
์ ์ฅ์ ๋ฐ์์ค๊ธฐ
๋ก์ปฌ ์ ์ฅ์๋ฅผ ๋ณต์ (clone)ํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ ์คํํ์ธ์.
git clone /๋ก์ปฌ/์ ์ฅ์/๊ฒฝ๋ก
์๊ฒฉ ์๋ฒ์ ์ ์ฅ์๋ฅผ ๋ณต์ ํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ ์คํํ์ธ์.
git clone ์ฌ์ฉ์๋ช
@ํธ์คํธ:/์๊ฒฉ/์ ์ฅ์/๊ฒฝ๋ก
ํ๋ก์ ํธ ์งํ์ ๋ค๋ฅธ ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ณต์ ํด์ฌ ๋ ์๋ ๋ช ๋ น์ ์คํํ์๋ค.
git clone https://github.com/{๋ณธ์ธ_์์ด๋}/{์ ์ฅ์ ์์ด๋}.git
ex) git clone https://github.com/woowacourse/java-baseball.git
๋ก์ปฌ ์ ์ฅ์๋ git์ด ๊ด๋ฆฌํ๋ ์ธ ๊ทธ๋ฃจ์ ๋๋ฌด๋ก ๊ตฌ์ฑ๋์๋ค.
tree
๋ blob๋ฅผ ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ค.(๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ์ ์ฌ)
blob
์ git์ ํ์ผ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก git์๋ blob๊ฐ์ฒด(ํ์ผ)์ด ์๋ค.
์ฒซ๋ฒ์งธ ๋๋ฌด ์์
๋๋ ํ ๋ฆฌ(working directory) ๋ ์ค์ ํ์ผ๋ค
๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋๋ฒ์งธ ๋๋ฌด ์ธ๋ฑ์ค(Index)๋ ์ค๋น์์ญ(staging area)์ ์ญํ
์ ํ๋ค.
๋ง์ง๋ง ๋๋ฌด HEAD๋ ์ต์ข
ํ์ ๋ณธ(commit)
์ ๋ํ๋ธ๋ค.
ํ์ฌ ์ํ ํ์ธ
git status
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ํ์ฌ git ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ถ๊ฐ/์ญ์ ๋ ํ์ฌ ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
git status๋ฅผ ์น๋ฉด git์๊ฒ ์ธ์ฌ๋ฅผ ํ์ฌ ์๋ถ๋ฅผ ๋ฌป๋ ๊ฒ ๊ฐ์ ๋๋์ ์ค๋ค.
๋ณ๊ฒฝ๋ ํ์ผ ์ถ๊ฐํ๊ธฐ
add๋ฅผ ๋น์ ํ์๋ฉด ๋(์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๋ถ๋ถ)์ ๋ ๊ฒ๋์ด๋ค(index)๊ณผ ๊ฐ๋ค.
๋ณ๊ฒฝ๋ ํ์ผ์ ์๋ ๋ช ๋ น์ด๋ก (์ธ๋ฑ์ค์) ์ถ๊ฐ ํ ์ ์๋ค.
//ํ๊ฐ์ ํน์ ํ์ผ๋ง ์ถ๊ฐํ๊ณ ์ถ์๋,
git add ํ์ผ์ด๋ฆ
//ํ๋ฒ์ ๋ชจ๋ ํ์ผ์ ์ถ๊ฐํ๊ณ ์ถ์๋,
git add .
์ด๊ฒ์ด ๋ฐ๋ก git์ ๊ธฐ๋ณธ ์์ ํ๋ฆ์์ ์ฒซ๋จ๊ณ์ ํด๋น๋๋ค.
ํ์ง๋ง add์ ํ๋ ๊ฒ์ index(์คํ
์ด์ง)์๋ง ์ฌ๋ ค๋ ์ํ
์ด๊ธฐ ๋๋ฌธ์,
commit๊ณผ push๋ฅผ ํตํด HEAD์ ์ต์ข
์ ์ผ๋ก ์ฌ๋ ค ๋์์ผ ํ๋ค.
ํ์ (commit), ๋ณ๊ฒฝ๋ด์ฉ ๋ฐํ(push)
์ฉ๊ด๋ก(HEAD)๊น์ง ๊ฐ์ ์ง์ด๋ฃ๋๊ฒ์ด commit์ด๋ผ๋ฉด, ์ฉ๊ด๋ก์์ ๋
น์ด๋ ๊ฒ(์๊ฒฉ์ ์ฅ์๋ก ๋ฐ์)์ด push์ด๋ค.
๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ ํ๋ ค๋ฉด ์๋ ๋ช ๋ น์ ๋ด๋ ค์ผ ํ๋ค.
git commit -m "์ปค๋ฐ ๋ฉ์ธ์ง ์์ฑ"
์, ์ด์ ๋ณ๊ฒฝ๋ ํ์ผ์ด HEAD์ ๋ฐ์
๋๋ค.
ํ์ง๋ง ์์ง ๋ก์ปฌ์๋ง ์ ์ฅ๋์๊ณ , ์๊ฒฉ ์ ์ฅ์์๋ ๋ฐ์์ด ๋์ง ์์๋ค.
ํ์ฌ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์์ง ๋ก์ปฌ ์ ์ฅ์์ HEAD์์ ๋จธ๋ฌผ๊ณ ์๋ค.
์ด์ ์ด ๋ณ๊ฒฝ ๋ด์ฉ์ ์๊ฒฉ ์ ์ฅ์๋ก ์ฌ๋ ค๋ณด์.
์๋์ ๋ช
๋ น์ ์คํํ๋ฉด ๋๋ค.
git push origin master
(๋ค๋ฅธ ๋ธ๋์น๋ก ๋ฐํํ๋ ค๋ฉด master ๋์ ์ํ๋ ๋ธ๋์น ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.)
๋ง์ฝ ๊ธฐ์กด์ ์๋ ์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ณต์ ํ ๊ฒ์ด ์๋๋ผ๋ฉด
,
์๊ฒฉ ์๋ฒ์ ์ฃผ์๋ฅผ git์๊ฒ ์๋ ค์ค์ผํ๋ค.
git remote add origin ์๊ฒฉ์๋ฒ์ฃผ์
์ด์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์๊ฒฉ ์๋ฒ๋ก ๋ฐํ ํ ์ ์๋ค.
๊ฒฐ๊ตญ status, add, commit, push๋ ์์ฐจ์ ํ๋ฆ
์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
์๋์์ commit์ ๋ํ ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ๋ ์์๋ณด์.
commit์ git์ ๊ต์ฅํ ์ค์ํ ๊ฐ์ฒด์ด๋ค.
๋ณดํต "์ ์ฅ๋จ์ ์ค๋
์ท์ ์ฐ๋๋ค"๋ผ๊ณ ๋ง์ด ์๊ธฐํ๋ค.
๋ง์ง๋ง ๋ณ๊ฒฝ์ฌํญ๋ง ๋ฑ ์ฌ์ง์ ์ฐ์๊ฒ ์ฒ๋ผ ๋ณด๋๊ฒ ์ค๋
์ท์ด๋ค.
commit์ ์์
๋๋ ํ ๋ฆฌ ์ค๋
์ท,
๊ฒ์์์์ ์ธ์ด๋ธ ํฌ์ธํธ์ ๋น์ท
ํ๋ค๊ณ ์๊ฐํ๋ฉด ์ข๋ค.
๊ฒ์์์ ์ธ์ด๋ธ๋ฅผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋ถํํ๊ธฐ ์ํด์, ๋ด๊ฐ ์ฝ์ง์ ํ๊ฑฐ๋ ๋ง์น๊ฑฐ๋ ํ์๋ ๋์๊ฐ๊ธฐ ์ํด์์ด๋ค.
commit ๊ฐ์ฒด์๋ ์ธ์ด๋ธํฌ์ธํธ๋ก ๋์๊ฐ๊ธฐ ์ํ ์ ๋ณด๋ค์ด ํฌํจ ๋์ผํ๋ค.
์คํ
์ด์ง(index)์ ๋ด์ฉ์ผ๋ก tree ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์,
commit๊ฐ์ฒด๋ tree ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ ์๋ค.
์ปค๋ฐ ๊ฐ์ฒด์ ์ ์ฅ๋๋ ๊ฒ์ ์๋์ ๊ฐ๋ค.
์ต์์ ํธ๋ฆฌ ๊ฐ์ฒด์ ์ฐธ์กฐ
์ปค๋ฐ ๋ฉ์ธ์ง
๋ถ๋ชจ ์ปค๋ฐ์ ๋ํ ์ฐธ์กฐ
์ฆ, ์ ์ฅํ ๋จ์์ tree+blob+๋ฉํ์ ๋ณด ๋ฑ์ ์ ๋ณด๋ค์ด ํฌํจ๋๋ค.
Q. git add๋ commit ๋ช ๋ น์ด๋ฅผ ๋๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋จผ์ ํ๋์ ํ์ผ์ ๋ง๋ค๊ณ git add
๋ฅผ ํ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น?
tree .git
์ ์
๋ ฅํด์ tree๊ตฌ์กฐ๋ก git ๋๋ ํ ๋ฆฌ๋ฅผ ํ์ธํด๋ณด๋ฉด
index์ object๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
git์ด ๊ด๋ฆฌ๋์์ด ๋์ ํ์ผ๋จ์๋ก ํ์ผ์ ์ธ์ํ๋ ๊ฒ์ด๋ค.
์ดํ, git commit
์ ํ๊ฒ ๋๋ฉด ์ฌ๊ธฐ์ ๊ฐ์ฒด๊ฐ 2๊ฐ๊ฐ ๋ ์์ฑ์ด ๋๋ค.
๋ด๊ฐ ์ถ์ ํ ๊ฐ์ฒด๋ฅผ ํ๋ ๋ง๋ค๋ฉด ๊ทธ ๊ฐ์ฒด๊ฐ ๋ก์ปฌ ์ ์ฅ์์ ์ถ๊ฐ๋๋ค.
์ด๊ฒ์ commit์ ํ๊ฒ ๋๋ฉด tree๊ฐ์ฒด์ commit๊ฐ์ฒด๋ฅผ ๊ฐ์ด ๋ง๋ค์ด์
์ด 3๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ฑ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ git add๋ฅผ ํ์๋ ์์ฑ๋๋ ๊ฐ์ฒด๋ค์ด ์๊ณ ,
git commit์ ํ์๋ ์์ฑ๋๋ ๊ฐ์ฒด๋ค์ด ์๋ค.
์ด๋ ๊ฒ ์ํ๊ด๊ณ๊ฐ ์๊ธฐ๊ณ
๊ด๋ฆฌํ๋ ์
์ฅ์์ ๊ฐ์ฒด๋ฅผ ์์ฑ ํด์ผํ๋ ์์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์
๋ค๋ฅธ ์ํฉ์์ ์ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ด์ ์ผ๋ก ์๊ฐํด๋ณด๋ฉด
"์..์ด๋์ ์ด๋ฐ ๊ด๊ณ๋ค์ ๋ง๋ค๊ณ ์ฐธ์กฐ๋ฅผ ํ๊ฒํ๊ณ ๋ช
๋ น์ด๋ฅผ ๋๋ ๋จ๊ตฌ๋!"
๋ผ๊ณ ์๊ฐํด ๋ณผ ์ ์๊ฒ ๋๋ค.
Q. ํ์ผ์ ๋ด์ฉ์ ์์ ํ๊ณ commitํ๋ฉด git์ ๊ณต๊ฐํจ์จ์ ์ํด ๋ณ๊ฒฝ์ฌํญ๋ง ์ ์ฅํ๋ค?
์ ๋ต์ no
์ด๋ค.
๊น์ ์ ๋๋ก ๋ณ๊ฒฝ์ฌํญ ๋ง์ ์ ์ฅํ์ง ์๋๋ค.(ํ์ผ์ ํต์ฒด๋ก ์ ์ฅํจ)
๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ๋ฉด ์ฉ๋์ด ์ ๋ฆฌํ๊ธด ํ์ง๋ง,
git์ ์๋์ ์ธ ์ธก๋ฉด์์ ํต์ฑ๋ก ์ ์ฅํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ๊ฐ์ ํ์ผ๋ค๋ก ํ๋์ ๊ฐ์ฒด๋ก ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ
๊ทธ๊ฒ๋ค์ ๋งค๋ฒ ๋ค ๊ด๋ฆฌํ๋ฉด ๋ถ๋ด๋๊ธฐ ๋๋ฌธ์
๊ทธ๊ฑธ tree๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ ๊ฒ์ด๊ณ ,
๊ทธ tree๊ฐ์ฒด๋ฅผ commit๊ฐ์ฒด๊ฐ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ด๋ค.
์ผ๋ถ๋ฌ commit์ resetํ๊ฑฐ๋ ์์ ๋๊ฒ ์๋ ์ด์
git์ ๊ต์ฅํ ์์ ํ ๋๊ตฌ์ด๋ค.
Q. ๋ค์์ค Git์ ๊ฐ์ฒด๊ฐ ์๋๊ฒ์?
1. blob
2. commit
3. tree
4. tag
5. branch
์ ๋ต์ 5.branch ์ด๋ค.
๋ธ๋์น๋ commit ๊ฐ์ฒด๋ค์ ๋ํ ์ฐธ์กฐ(๋ ํผ๋ฐ์ค)์ผ ๋ฟ์ด๋ค.
blob
: ํ์ผ
commit
: ์ ์ฅ ๋จ์, tree+blob+๋ฉํ์ ๋ณด
tree
: blob๋ฅผ ๋ฌถ์ด์ ๊ด๋ฆฌ(๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ์ ์ฌ)
tag
: ์ปค๋ฐ์ ๋ํ ์ฐธ์กฐ์ด์ง๋ง ์ค๋ช
์ด ์ถ๊ฐ๋๋ ๊ฐ์ฒด
branch
: commit ๊ฐ์ฒด๋ค์ ๋ํ ์ฐธ์กฐ(๋ ํผ๋ฐ์ค)
๊ทธ๋์ ๋ธ๋์น๊ฐ ๋ญ๊ฐ์?
branch๋ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ ๋
๊ฐ๋ฐ์๋ค ๊ฐ์ ๋์ผํ ์์ค์ฝ๋๋ฅผ ํจ๊ป ๊ณต์ ํ๊ณ ์ ํ ๋ ๊ทธ๋ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๋ค.
๐จโ๐ง๐ฉโ๐ง
์ฌ๋ฌ ์ฌ๋์ด ๋์ผํ ์์ค์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก ๋ค๋ฅธ ์์ ์ ํ ๋
๋์์ ๋ค์ํ ์์ ์ ํ ์ ์๊ฒ ๋ง๋ค์ด ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ฐ์ ๋
๋ฆฝ์ ์ธ ์์
์์ญ์ ์์ฑ
ํ๊ณ
๊ทธ ๊ณณ์์ ์์
ํ ์๋ ๋ฒ์ ๊ณผ ๋น๊ตํด์
์๋ก์ด ๋ฒ์ ์ ๋ง๋ค์ด๋ด๋ ์์
์ ํ ์ ์๋ค.
branch(๊ฐ์ง) ๋ง๋ค๊ธฐ/์ญ์ ํ๊ธฐ
๋ธ๋์น๋ ์์ ํ๊ฒ ๊ฒฉ๋ฆฌ๋ ์ํ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๋ ์ฌ์ฉํ๋ค.(์์ ํ ์์
๊ณต๊ฐ)
์ ์ฅ์๋ฅผ ์๋ก ๋ง๋ค๋ฉด ๊ธฐ๋ณธ์ผ๋ก master ํน์ main ๋ธ๋์น๊ฐ ๋ง๋ค์ด์ง๋ค.
์ด์ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐ์ ์งํํ๊ณ , ๋์ค์ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด
master๋ก ๋์์ ๋ณํฉํ๋ฉด ๋๋ค.
๋ธ๋์น๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ฌด์์ ๋จผ์ ํด์ผํ ๊น?
git branch feature_x(๋ธ๋์น์ด๋ฆ)
//์ด์ธ์๋ checkout์ด๋ switch๋ฑ์ผ๋ก ์์ฑ์ ํ๊ณ ๋ฐ๋ก checkout ํ๋๊ฒ ๊ฐ๋ฅํ๋ค.
git checkout -b feature_x
git switch feature_x
//์๋ ๋ช
๋ น(์ค ํ๋)์ผ๋ก master ๊ฐ์ง๋ก ๋์์ฌ์์๋ค.
git branch -m master
git checkout master
git switch master
//์๋ ๋ช
๋ น์ผ๋ก ๊ฐ์ง๋ฅผ ์ญ์ ํ ์ ์๋ค.
git branch -d feature_x
์๋ก ๋ง๋ ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์๋ก ์ ์กํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ๊ทผํ ์ ์๋ค.
//์๋ก๋ง๋ ๋ธ๋์น๋ก ์๊ฒฉ์ ์ฅ์์ ์ ์กํ๊ธฐ
git push origin feature_x
์์ ์ดํด๋ณธ branch์๋ HEAD๋ผ๋ ์จ๊ฒจ์ง ๋
์์ด ์๋ค.
HEAD๋ ํ์ฌ checkout ๋ commit์ ๊ฐ๋ฆฌํจ๋ค.
์ฆ, ํ์ฌ ์์
์ค ์ธ commit์ด๋ผ๋ ๊ฒ์ด๋ค.
HEAD๋ ํญ์ ์์ ํธ๋ฆฌ์ ์ต์ , ์ต๊ทผ ์ปค๋ฐ(๋ธ๋์น ์ด๋ฆ)์ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
์์
ํธ๋ฆฌ์ ๋ณํ๋ฅผ ์ฃผ๋ Git ๋ช
๋ น์ด๋ค์ ๋๋ถ๋ถ
HEAD๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ๋ถํฐ ์์
ํ๋ค.
์ด๊ณณ์ ๊ธฐ์ค์ผ๋ก ๋ช ๋ฒ์งธ ์ด์ ์ปค๋ฐ์?(์๋์ฐธ์กฐ)
์๋์ฐธ์กฐ
๋ฅผ ์์๋๋ฉด ์ ๋ง ์ ์ฉํ๋ค.
์ฃผ๋ก caret(์บ๋ฟ) ^
๊ณผ tilde(ํธ๋) ~
๊ฐ ์ฐ์ธ๋ค.
//์๋์ ๊ฐ์ด ์บ๋ฟ์ ๋ถ์ด๋ฉด ํ๋ฒ ์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
git switch HEAD^
์บ๋ฟ์ ๋ถ์ธ ๋งํผ ๋ค๋ก ๊ฐ๋ค.
//2๋ฒ ๋ค๋ก ๊ฐ๊ธฐ
git switch HEAD^^
์ด ๋ ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ฐ๋ก ํธ๋ ๋ค์ ์ซ์๋ฅผ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ทธ ์ซ์๋งํผ ์ด์ ๋ถ๋ชจ ์ปค๋ฐ์ ์ฐพ์๊ฐ๊ฒ ๋๋ค.
//HEAD๋ก๋ถํฐ 2๋ฒ์งธ ๋ถ๋ชจ์ปค๋ฐ
git switch HEAD~2
์ด๋ ๊ฒ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ ์์น๋ ๋ฐ๊ฟ ์๊ฐ ์๋ค.
๊ฐฑ์ (pull)๊ณผ ๋ณํฉ(merge)
"๋ธ๋์น๋ค ํฉ์ฒด ์งํ!"
๋ง์ฝ ๋ค๋ฅธ ๋ธ๋์น์ ์๋ ๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ฌ ๋ธ๋์น(์๋ฅผ ๋ค๋ฉด, main)์ ๋ณํฉํ๋ ค๋ฉด?
๋ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๊ณผ์ ์ ๊น์์๋ merge๋ผ๋ ๊ธฐ๋ฅ์ด ๋์์ค๋ค.
๊ธฐ๋ฅ ๋ธ๋์น๋ฅผ main์ mergeํ๋ ์์
์ ์งํํด๋ณด์.
git merge ๊ธฐ๋ฅ๋ธ๋์น์ด๋ฆ
mergeํ ๋ ๋ ๋ธ๋์น์ base๊ฐ ๊ฐ์ผ๋ฉด Fast-forward ํ ์ ์๋ค.
๊ฐ๋ฆฌํค๊ณ ์๋ commit์ mergeํ ๋ธ๋์น์ commit์ผ๋ก ์ด๋์ํค๋ ๊ฒ
์ด
merge์ ๋ฐฉ๋ฒ์ค์ ํ๋์ธ Fast-forward์ด๋ค.
์ต์ ์ ๋ณด๋ค์ ๋ชจ๋ ๋ฐ๋ผ๊ฐ๋ ๋ ๋ธ๋์น์ base๊ฐ ๊ฐ์ ๋
Fast-forward๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค.
์ฆ A๋ธ๋์น์ B๋ธ๋์น๋ฅผ mergeํ ๋,
B๋ธ๋์น๊ฐ ์จ์ ํ A๋ธ๋์น ์ดํ์ commit๋ค์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด
A๋ธ๋์น๋ฅผ B๋ธ๋์น๋ก ์ด๋ํ๊ธฐ๋ง ํ๋ค
๋ผ๋ ๊ฒ์ด๋ค.
fast-forward๋ผ๋ ๋ช ๋ น์ด์๋ ์ต์ ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉด ํญ์ fast-forward ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ๋ก์ปฌ ์ ์ฅ์์์ ์งํํ๋ ๋์ค,
๊ธฐ์กด ์๊ฒฉ ์ ์ฅ์์ ์ฝ๋๊ฐ ์๋กญ๊ฒ ๊ฐฑ์ ๋์๋ค๊ณ ๊ฐ์ ํด๋ณด์.๐
์ค์ ๋ก 4์ฃผ์ฐจ ํ๋ฆฌ์ฝ์ค ๋์ค ํ
์คํธ ์ฝ๋๊ฐ ์๋กญ๊ฒ ๋ฐ๋๊ฒ ๋์๋๋ฐ,
์ด๋ด๋๋ ์์
ํ๊ณ ์๋ ๋ด ๋ก์ปฌ ์ ์ฅ์๋ ์๊ฒฉ ์ ์ฅ์์ ๋ง์ถฐ์ ๊ฐฑ์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ก์ปฌ ์ ์ฅ์๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ๋ง์ถฐ ๊ฐฑ์ ํ๋ ค๋ฉด ์๋๋ช ๋ น์ ์คํํ๋ฉด ๋๋ค.
git pull
์ด๋ ๊ฒ ํ๋ฉด ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ ๋ด์ฉ์ด ๋ก์ปฌ ์์
๋๋ ํ ๋ฆฌ์ ๋ฐ์์ง๊ณ (fetch),
๋ณํฉ(merge)๋๋ค.
์ฒซ๋ฒ์งธ ๋ช ๋ น์ด๋ ๋๋ฒ์งธ ๋ช ๋ น์ด๋ , git์ ์๋์ผ๋ก ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ณํฉํ๋ ค๊ณ ์๋ํ๋ค.
์ ๋ฉ์ผ์ ์ํฉ์ฒ๋ผ ๊ธฐ์กด ๋ธ๋์น์ base๊ฐ ๋ฌ๋ผ์ก๋ค๋ฉด
์๋ก ๋ง๋ ๋ธ๋์น์ upstream/main์ ๋ณ๊ฒฝ์ ์ ๋ฐ์
ํด์ผํ๋ค.
upstream/main์ ๋ณ๊ฒฝ์ ์ ํ์ฌ ์์ ์ค์ธ ๋ก์ปฌ ๊ธฐ๋ฅ ๋ธ๋์น์ ์ ์ฉ์ ํด์ผ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ๋ธ๋์น์ ์ด ํฝ์ค๋ commit์ ํฉ์ณ์ผ ํ๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ฅ๋ธ๋์น๋ก ๊ฐ์ upstream์ ์๋ ์ ๋ณด๋ค์ ๋ชจ๋ mergeํด์ ํฉ์ณ์ค์ผ ํ๋ค.
mergeํ ๋ base๊ฐ ๋ค๋ฅด๋ฉด merge commit์ ์์ฑํ์ฌ auto mergeํด์ผํ๋ค.
fast-forward์ ์กฐ๊ฑด์ธ ๋ ๋ธ๋์น์ ๋ฒ ์ด์ค๊ฐ ๊ฐ์ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์
git์ด ๋ณ๋์ ์ต์ ๊ณตํต ์กฐ์์ ์๋์ผ๋ก ์ฐพ๋ auto merge๋ก commit์
ํ๋ ์์ฑํ๊ณ , ํด๋น commit์ ๊ฐ๋ฆฌํค๋๋ก ์ด๋ํด์ผ ํ๋ค.
Github์์ ์ ๊ณตํ๋ pull request๋
์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋์ํ๋ ์ธ ๊ฐ์ง merge ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์ ๊ณต์ ํ๋ค.
์ด ์ธ๊ฐ์ง ๋์์ ์ง๊ธ๋ถํฐ ํ๋ํ๋ ์์๋ณด์.
pull request ์์๋ ๊ฐ๊ฐ์ merge๋ฐฉ๋ฒ์ ๋ํ ์ฅ์ ๊ณผ ๋จ์ ์ ํ์
ํด์
ํ์ฌ ํ์์ ๊ฐ์ฅ ์ ์ ํ๋ค๊ณ ์๊ฐํ๋ merge ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ข๋ค.
1. Create merge commit
๋ฒ ์ด์ค ๋ธ๋์น๊ฐ ๊ฐ๋๋ผ๋ fast-forward๋ฅผ ์งํํ๋ ๊ฒ์ด ์๋๋ผ
ํ๋์ merge commit ์ ์์ฑํด์ merge๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฒ ์งํํ๊ฒ ๋ ๊ฒฝ์ฐ
๊ธฐ๋ฅ ๊ตฌํ์ ํ ๋ ์ฌ์ฉํ๋ commit๋ค์ด ํ๋ํ๋ ์ด์์์ด
์ด๋ฅผ ์ฌ์ฉํ ์ฌ์ง๋ฅผ ๋จ๊น๊ณผ ๋์์ ๋ง๋ ๊ธฐ๋ฅ์ ๋ํด์ merge ๋ถ๊ธฐ์ ์ด ์๊น์ผ๋ก ์ด๋ค ๊ธฐ๋ฅ์ ๋ง๋ค์ด main์ mergeํ๋์ง ๊ฐ๋
์ฑ์ด ์ข์์ง๋ค.
2. Squash and merge
ํ๋์ merge commit์ ์์ฑํด์ ํด๋น commit์ ๋ฐ๋ผ๋ณด๊ฒ ํ๋๋ฐ
ํผ์ฒ์์ ์์
ํ๋ ๋ชจ๋ commit์ ํ๋์ commit์ผ๋ก ํตํฉํด์ mergeํ๋ ์์
์ด๋ค.
์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ
commit์ด ๋๋ฌด ๊ธธ์ด ์ฌ๋ฌ๊ฐ์ ๊ธฐ๋ฅ ๊ตฌํ์ด ์์๋ ์์๋ณด๊ธฐ ํ๋ ์ ์
ํน์ ๊ธฐ๋ฅ์ ๋ํ commit์ ํ๋๋ง ๋์ด์ ์ด์ ๋ณด๋ค๋ ์ด๋ค ๊ธฐ๋ฅ์ ์์
ํ๋์ง ๊ฐ๋
์ฑ์ด ๋ ์ข์์ง๋ค.
pull request ๊ฐ๊ฐ์ ๋ํ commit์ ํ๋๋ฅผ ๋จ๊ธฐ๊ณ
ํด๋น commit์ด ์ด๋ฆ์ผ๋ก ์์ฑ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์
PR ๋จ์๋ง๋ค commit์ด ์์ฑ๋์ด ๋๊ฐ ๊ณํ์ ์๋ฃํ๋์ง ๊ฐ๋
์ฑ์ด ๋์์ง ๋ชจ์ต์ด ๋๋ค.
3. Rebase and merge
๊ฐ๋จํ ์ด์ผ๊ธฐํ๋ฉด ๋ฒ ์ด์ค๋ฅผ ๋ค์ ์กฐ์ ์ ํ๋,
์ฆ ํผ์ฒ์์ ์์
ํ๋ commit ๋ค์ ๋ชจ๋ ํ์ฌ main ๋ธ๋์น์์ ์ต์๋จ์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ ์์
์ด๋ค.
๋ค๋ง ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ commit์ด ๋ง์ ๋ ํ ์ค๋ก ๋ชจ๋ commit์ด ์ ์ฅ๋์ด ์คํ๋ ค ๋ ๋์กํด ๋ณด์ผ ์ ์๋ค.
merge๋ ํญ์ ์ฑ๊ณตํ๋๊ฒ ์๋๋ผ ๊ฐ๋ ์ถฉ๋(conflicts)์ด ์ผ์ด๋๊ธฐ๋ ํ๋ค.
์ด๋ ๊ฒ conflict(์ถฉ๋)์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
git์ด ์๋ ค์ฃผ๋ ํ์ผ์ ์ถฉ๋ ๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์์ ํด์ ๋ณํฉ์ด ๊ฐ๋ฅํ๋๋ก ํด์ผํ๋ค.
merge๋ฅผ ๊ณ์ ์งํํ๊ธฐ ์ํด์๋ ํด๋น ๋ถ๋ถ์ ์ง์ ์์ ํ๊ฑฐ๋ IDE์์ ์ ๊ณตํ๋ ์๋ ์์ ์ ์งํํ๋ฉด ๋๋ค.
merge๋ฅผ ํ ๋ ๊ฐ์ ๋ถ๋ถ์ ์์ ํ๋ค๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๋ ์ฝ๋ ์ค์์ ์ต์ข
์ ์ผ๋ก ๊ฐ์ ธ๊ฐ ์ฝ๋๋ง ์ด๋ฆฌ๊ณ ๋๋จธ์ง๋ ์ง์์ผํ๋ค.
๋จผ์ git switch ๊ธฐ๋ฅ๋ธ๋์น
๋ก ๊ฐ์
git merge ๊ธฐ์กด๋ธ๋์น
๋ก merge ์์ผ์ค์ผ
๋ค๋ฅธ ์ปค๋ฐ์ด ์์ฑ๋์ง ์๊ณ ๊ธฐ์กด๋ธ๋์น์ ๊ธฐ๋ฅ๋ธ๋์น๊ฐ ๊ฐ์ ๊ณณ์ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ฝ๋๋ฅผ ์์ ํ git add๋ฅผ ํตํด์ ํด๋น ํ์ผ์ ์คํ
์ด์ง ํด๋๋ฉด
๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ์ merge commit์ ํฌํจ์ด ๋๋ค.
์๋ ๋ช
๋ น์ผ๋ก git์๊ฒ ์๊น์ ํ์ผ์ ๋ณํฉํ๋ผ๊ณ ์๋ ค์ค์ผ ํ๋ค.
git add ํ์ผ์ด๋ฆ
//๋ณ๊ฒฝ ๋ด์ฉ์ ๋ณํฉํ๊ธฐ ์ ์, ์ด๋ป๊ฒ ๋ฐ๋์๋์ง ๋น๊ตํด๋ณผ ์ ์๋ค.
git diff ์๋๋ธ๋์น ๋น๊ต๋์๋ธ๋์น
์ด์ git commit์ ํ๋ฉด
merge commit์ด ์ ์์ ์ผ๋ก ์์ฑ๋จ์ ํ์ธํ ์ ์๋ค.
Rebase๋?
merge์๋ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ค๋ฅธ rebase์ ๋ํด ์์๋ณด์
merge์์ ๊ณตํต์ ์ ๋ธ๋์น๋ฅผ ํฉ์น๋ค๋ ์ ์ด๋ค.
ํ์ง๋ง rebase๋ merge๋ณด๋ค ๊นจ๋ํ commit history๋ฅผ ๋ง๋ ๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
์ด ๋์ ๋ชฉ์ ์ ํ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๊ฒ์ด๋ค.
๋ค๋ง merge๋ ์๋ก์ด commit์ ๋ง๋ค์ด์ ํฉ์น๋ ๊ฑฐ๊ณ
rebase๋ ํ์ฌ ๋ธ๋์น์ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ค์ ํด์ ํฉ์น๊ฒ ๋ค
๋ ๊ฑด๋ฐ
๋ฒ ์ด์ค๊ฐ ๋ฐ๋ commit๋ค์ ๋ด์ฉ์ ๊ฐ์ง๋ง
์๋กญ๊ฒ ๋ณต์ฌํ์ฌ ์ฐ์ด์ด ๋ถ์ด๋ ๊ฒ
์ด๋ค. (์ ํ์ ์ธ ๋ชจ์ต์ผ๋ก ๋ฐ๋)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ก์ด ์์ด์ ธ ๋ฒ๋ฆฐ๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
rebase ์ ์ commit๋ค์ rebase ํ์ commit๋ค๊ณผ id๊ฐ ๋ค๋ฅด๋ค.
commit ๋ฉ์ธ์ง๋ ๊ฐ์๋ฐ commit id๊ฐ ๋ค๋ฅธ ๊ฒ์ ๋ณด๋ฉด
๋ณต์ฌ๊ฐ ๋์ด์ ์๋กญ๊ฒ ์์ฑ๋์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ merge๋ฅผ ํ ์ฝ๋ ๊ฒฐ๊ณผ์
rebase๋ฅผ ํ ์ฝ๋ ๊ฒฐ๊ณผ๋ ๊ฐ์์ผ ํ๋ค.
์ฒด๋ฆฌ ์ผ์ดํฌ ๊ฐ์ ๊ฒ์์ ์์ ์ฌ๋ผ๊ฐ ์ฒด๋ฆฌ๋ง ์์ ๊ณจ๋ผ๋จน๋ ํ์๋ฅผ
์ฒด๋ฆฌํผํน์ด๋ผ๊ณ ํ๋ค.
์ฆ, cherry-pick์ ์ด์์
์ข์ ๊ฒ๋ง ๊ณจ๋ผ์ ์ฌ์ฉํ๋ค
๋ ๋ป
๊ทธ๋ฌ๋ฉด Git์์ ์ข์๊ฒ ๊ณผ์ฐ ๋ญ๊น?
๊ฐ๋จํ๊ฒ ๋ค๋ฅธ ๋ธ๋์น์ ์๋ commit์ ์ ํ์ ์ผ๋ก
๋ด ๋ธ๋์น์ ์ ์ฉ์ํค๋ ๊ฒ์ ๋งํ๋ค.
์ฒด๋ฆฌํฝ์ ์ฃผ๋ก ๋ฌด์จ ์ํฉ์์ ์ฌ์ฉํ ๊น?
์ฒด๋ฆฌํฝ์ ํตํด ๋ฉ์ธ์ ๋ด๊ฐ ์ํ๋ ์ปค๋ฐ์ด ๋จธ์ง๋๋ ์ํฉ์ ์ฒ์ฒํ ์ดํด๋ณด์.
๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ main์ ์ง์ ์ ์ผ๋ก ํธ์ฌํ๋ ๋ฐฉ๋ฒ์ ์ฃผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค.
์ฃผ๋ก ๊ธฐ๋ฅ๋ธ๋์น๋ฅผ ๋ฐ๋ก ์์ฑํด์ main๋ธ๋์น๋ก merge PR์ ์์ฒญํ ํ์ merge๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
git log๋ผ๋ ๋ช
๋ น์ ํตํด ์ปค๋ฐ๋ค์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋๋ฐ
์ฌ๊ธฐ์์ ์ฒด๋ฆฌํฝ๊ณผ ์ปค๋ฐ์ ํด์ฌ๋ฅผ ์
๋ ฅํด์ฃผ๊ฒ ๋๋ฉด
ํ์ฌ ์์
์ค์ธ ๊ณณ์์ ํด๋น ์ปค๋ฐ์ ๊ฐ์ ธ์์ ๋ฑ๋กํ ์ ์๋ค.
์ปค๋ฐ์ ํด์ฌ ์๋ถ๋ถ์ ๋์ฌ์ฏ ๊ธ์๋ง ๋ค ์ ๋ ฅํ ํ์์์ด ์ฐพ์ ์ ์๋ค.
ํ๊ฐ์ ์ปค๋ฐ๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด
git cherry-pick ๋ช ๋ น์ด ๋ค์์ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ์ ์ปค๋ฐ์ id๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
๋น์ฐํ ์ฌ๋ฌ๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ๋ค๋ฉด
commit id๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ ์ด์ฃผ๋ฉด ๋๋ค.
๋ ํน์ ๊ตฌ๊ฐ์ ์๋ ์ฐ์๋ commit์ ๋ถ๋ฌ์ฌ ์ ์๋ค.
๊ฐ์ ธ์ค๊ณ ์ถ์ ์ฐ์๋ commit๋ค ์ค
์์ ์ปค๋ฐ์ id์ ๋ง์ง๋ง id์ ์์ด๋๋ฅผ ์ ๊ณ
์ด ๋ ์ฌ์ด์ ..ํ์๋ก ์ด์ด์ฃผ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ์ํ๋ ์ปค๋ฐ๋ง ์์ ๊ณจ๋ผ์ ๋ค๋ฅธ ๋ธ๋์น์ ๋ฐ์์ํฌ์ ์๋ค.
์ฒด๋ฆฌํฝ์ ์ด์ฉํด์ ๋ธ๋์น์ ์ถฉ๋๋ ์ํฉ์ ํด๊ฒฐํ ์ ์๋ค.
์ฒด๋ฆฌํฝ ๋ช
๋ น์ด ์ดํ์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๋ ๋ฉ์ธ์ง๊ฐ ๋จ๋ฉด
์์ค ์ฝ๋๋ฅผ ์์ ์ ํ๊ณ git add๋ฅผ ํตํด ์คํ
์ด์ง ์ํ๋ก ๋ณ๊ฒฝํ๋ค.
๊ทธ ํ git cherry-pick --continue ๋ช
๋ น์ด๋ก
๋ช
๋ น์ด๋ฅผ ์ํํ๋ฉด ๋ชจ๋ ์ถฉ๋์ด ํด๊ฒฐ๋๊ณ ์ ์์ ์ผ๋ก commit์ ๋ถ๋ฌ์จ๋ค.
๊ผฌ๋ฆฌํ(tag) ๋ฌ๊ธฐ, ํ์ ๋ณธ ์๋ณ์id ์ป๊ธฐ (log)
์ํํธ์จ์ด์ ์ ๋ฒ์ ์ ๋ฐํํ ๋๋ง๋ค tag๋ฅผ ๋ฌ์ ๋์ผ๋ฉด ์ข๋ค.
(๋ฌผ๋ก ๊ผฌ๋ฆฌํ๋ SVN ๋ฑ์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ด๋ค.)
์๋ ๋ช ๋ น์ ์คํํ๋ฉด ์๋ก์ด ๊ผฌ๋ฆฌํ์ธ 1.0.0์ ๋ฌ ์ ์๋ค.
git tag 1.0.0 1b2e1d63ff
//์ ๋ช
๋ น์์ 1b2e1d63ff๋ถ๋ถ์ ๊ผฌ๋ฆฌํ๊ฐ ๊ฐ๋ฆฌํฌ ํ์ ๋ณธ ์๋ณ์์ด๋ค.
์๋ ๋ช ๋ น์ผ๋ก ํ์ ๋ณธ ์๋ณ์๋ฅผ ์ป์ ์ ์๋ค.
git log
ํ์ ๋ณธ ์๋ณ์์ ์๋ถ๋ถ ์ผ๋ถ๋ง ์
๋ ฅํด๋ ๊ผฌ๋ฆฌํ๋ฅผ ๋ถ์ผ ์ ์์ง๋ง,
๊ทธ ์ผ๋ถ๋ถ์ด ๋ฐ๋์ ๊ณ ์ ํ๋ค๋ ์กฐ๊ฑด์ด ํ์ํ๋ค.
๋ก์ปฌ ๋ณ๊ฒฝ ๋ด์ฉ ์ญ์ /๋๋๋ฆฌ๊ธฐ
์ด๋ฒ์๋ ๋ ์ ์ฉํ ์์
๋๋๋ฆฌ๊ธฐ๋ฅผ ์์๋ณด์.
(์ด ๋ฐฉ๋ฒ์ ๋ก์ปฌ์์ ํผ์ ์์
ํ ๋ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ด๋ฉฐ ์์ ํ ๊ธฐ๋ก์ ์ง์ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.)
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ค์๋ก ๋ฌด์ธ๊ฐ ์๋ชปํ ๊ฒฝ์ฐ,
์๋ ๋ช
๋ น์ผ๋ก ๋ก์ปฌ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋๋๋ฆด ์ ์๋ค.
git checkout --ํ์ผ์ด๋ฆ
//์ ๋ช
๋ น์ ๋ก์ปฌ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ณ๊ฒฝ ์ ์ํ(HEAD)๋ก ๋๋๋ ค์ค๋ค.
๋ค๋ง, ์ด๋ฏธ ์ธ๋ฑ์ค์ ์ถ๊ฐ๋ ๋ณ๊ฒฝ ๋ด์ฉ๊ณผ ์๋ก ์์ฑํ ํ์ผ์ ๊ทธ๋๋ก ๋จ๋๋ค.
๋ง์ฝ ๋ก์ปฌ์ ์๋ ๋ชจ๋ ๋ณ๊ฒฝ ๋ด์ฉ๊ณผ ํ์ ๋ณธ์ ํฌ๊ธฐ
ํ๋ ค๋ฉด,
์๋ ๋ช
๋ น์ผ๋ก ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ด๋ ฅ์ ๊ฐ์ ธ์ค๊ณ ,
๋ก์ปฌ master๋ธ๋์น๊ฐ ์ ์ด๋ ฅ์ ๊ฐ๋ฆฌํค๋๋ก ํ ์ ์๋ค.
git fetch origin
git reset --hard origin/master
๊น๋ํ๊ฒ ์ต๊ทผ ์ปค๋ฐ 1๊ฐ ์ง์ฐ๊ธฐ
git reset HEAD~1
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ ์ด์ ์ปค๋ฐ์ ํ์ง ์์ ์ํ๋ก ๋ง๋ค์ด์ง,
์ฆ ํ์คํ ๋ฆฌ๋ฅผ ๊ณ ์ณ ์ด๋ค๋ ์ ๋๋ฌธ์
๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ๋ remote ๋ธ๋์น์์๋ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ
์ด๋ค.
๋์ ์ ์ด๋๋ revert๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ,
git revert HEAD
ํ์ฌ HEAD๊ฐ ์๋ ๊ณณ์ revert ์์ผ์ฃผ๊ฒ ๋๋ฉด
๊ธฐ์กด์ ์ปค๋ฐ์ ์ด์์์ผ๋ฉด์ ๋ค์ ์ปค๋ฐ์ด ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ revert๋ฅผ ํ๊ฒ๋๋ฉด
๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ๋ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ณด๋ผ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ผ ์ด๋ฒ์๋ ์ญ์ ํ ์ปค๋ฐ๊ณผ ๋ธ๋์น๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
ํ๊ฐ์ง ์์๋ฌ์ผ ํ ์ ์
๋ช
๋ น์ด๊ฐ ์
๋ ฅ๋๊ณ ์คํ๋๋ ํ์์๋ ๋ชจ๋ ํด์ฌ๊ฐ์ด ์๊ธด๋ค๋ ์
์ด๋ค.
์ ๊ฑฐ๋ฅผ ํ์ด๋ ์ ๊ฑฐ๋ฅผ ํ๊ธฐ ์ , ์ ๊ฑฐ๋ฅผ ํ๋ ํ์ ๋ชจ๋๊ฐ
๊ธฐ๋ก์ ๋จ์์๋ ๊ฒ์ด๋ค.
์ด ์ ์ ์ด์ฉํด์ ํด๋น ํด์๊ฐ์ ์ฐพ๊ณ
๊ทธ ํด์ฌ๊ฐ์ reset ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณด์.
git reflog
๋ฅผ ์
๋ ฅํ๋ฉด ๋ชจ๋ log๋ฅผ ๋ณผ ์ ์๋ค.
๊ทธ ๋ชจ๋ ๋ก๊ทธ์๋ ํด์ฌ๊ฐ๋ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ํน์ ์ปค๋ฐ์ ์ญ์ ํ๊ธฐ ์ ํด์ฌ๊ฐ์ ์
๋ ฅํด์ฃผ๊ฒ ๋๋ฉด
๋๋๊ฒ๋ ํน์ ์ปค๋ฐ์ด ๋ค์ ์ด์๋๊ฒ ๋๋ค.
git reset --hard ํน์ ์ปค๋ฐ์Hash
๋ธ๋์น๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ ๋ณต๊ตฌํ ์ ์๋ค.
git switch -c ๋ธ๋์น ๋ธ๋์น์ปค๋ฐ์Hash
git์ ๋ด์ฅ GUI
gitk
์ฝ์์์ git output์ ์ปฌ๋ฌ๋ก ์ถ๋ ฅํ๊ธฐ
git config color.ui true
์ด๋ ฅ(log)์์ ํ์ ๋ณธ 1๊ฐ๋ฅผ ๋ฑ ํ ์ค๋ก๋ง ํ์ํ๊ธฐ
git config format.pretty oneline
ํ์ผ์ ์ถ๊ฐํ ๋ ๋ํ์์ผ๋ก ์ถ๊ฐํ๊ธฐ
git add -i
์ฐธ๊ณ ์๋ฃ
https://rogerdudler.github.io/git-guide/index.ko.html
https://www.youtube.com/watch?v=b72mDco4g78
https://www.youtube.com/watch?v=JsRD2AWxxFg
https://www.inflearn.com/course/git-and-github#reviews