[Git] ๊น ๋ธ๋์นญ ์ดํดํ๊ธฐ - 1. Git ์ฃผ์ ๋ช ๋ น์ด
โป ์ด ํฌ์คํ ์ Learn Git Branching ์ฌ์ดํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ด๋ค.
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
Git์ ์ธ ๋ ํ์ํ ๋ธ๋์น์ ๋ํ ๊ฐ๋ ์ ์ก์ ์ ์๋๋ก ํ๊ธฐ ์ํด ์ ์๋ ์ฌ์ดํธ๋ก, Peter Cottle์ด๋ผ๋ ์ ์์์ LearnGitBranching์ ๋ฒ์ญํ ๋ฒ์ ์ด๋ผ๋ ์ฐธ๊ณ ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
Git Branch ๋ฐฐ์ฐ๊ธฐ
Git ๋ช ๋ น์ด
: ์ฐ์ต ๋ชจ๋์์ ์ธ ์ ์๋ ๋ค์ํ git๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- commit
- branch
- checkout
- cherry-pick
- reset
- revert
- rebase
- merge
๊ทธ ์ธ์, ์ด ์ฌ์ดํธ์์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- export tree, import tree : ํธ๋ฆฌ ๊ณต์
- build level : ๋ ๋ฒจ ๋ง๋ค๊ธฐ
- import level : ๋ค๋ฅธ ์ฌ๋์ ๋ ๋ฒจ์ ๊ฐ์ ธ์์ ์คํํ๊ธฐ
Git Commits
Commit : Git ์ ์ฅ์์ ๋๋ ํ ๋ฆฌ ๋ด ๋ชจ๋ ํ์ผ์ ๋ํ ์ค๋ ์ท์ ๊ธฐ๋กํ๋ ๊ฒ.
๋๋ ํ ๋ฆฌ ์ ์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๋ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง, ํจ์ฌ ์ ์ฉํ ๋ฐฉ๋ฒ์ด๋ค. Git์ ๊ฐ๋ฅํ ํ ์ปค๋ฐ์ ๊ฐ๋ณ๊ฒ ์ ์งํ๊ณ ์ ํ๊ธฐ๋๋ฌธ์, ์ปค๋ฐํ ๋๋ง๋ค ๋๋ ํ ๋ฆฌ ์ ์ฒด๋ฅผ ๋ณต์ฌํ์ง ์๋๋ค. ๊ฐ ์ปค๋ฐ์ ์ ์ฅ์์ ์ด์ ๋ฒ์ ๊ณผ ๋ค์ ๋ฒ์ ์ ๋ณ๊ฒฝ๋ด์ญ(="delta")์ ์ ์ฅํ๋ค. ๊ทธ๋์ ๋๋ถ๋ถ์ ์ปค๋ฐ์ด ๊ทธ ์ปค๋ฐ ์์ ๋ถ๋ชจ ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค.
์ ์ฅ์๋ฅผ ๋ณต์ (clone)ํ๋ ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ๋ถ(delta)๋ฅผ ํ์ด๋ด์ผ ํ๋๋ฐ, ์ด ๋๋ฌธ์ ๋ช ๋ นํ ๊ฒฐ๊ณผ๋ก ์๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณผ ์ ์๋ค.
resolving deltas
์ผ๋จ์ ์ปค๋ฐ์ ํ๋ก์ ํธ์ ์ค๋ ์ท๋ค๋ก ์๊ฐํ๋ฉด ์ถฉ๋ถํ๋ค. ์ปค๋ฐ์ ๋งค์ฐ ๊ฐ๋ณ๊ณ ์ปค๋ฐ ์ฌ์ด์ ์ ํ๋ ๋งค์ฐ ๋น ๋ฅด๋ค.
์ปค๋ฐ์ ์๋์ ๊ฐ์ด ์คํํ ์ ์๋ค. ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ ์ฅ์ ๋ด์ฉ์ ๋ณ๊ฒฝํด์ ํ๋์ ์ปค๋ฐ์ผ๋ก ์ ์ฅํ๋ค.
git commit
Git Branches
๊น์ ๋ธ๋์น๋ ๋งค์ฐ ๊ฐ๋ณ๋ค. ๋ธ๋์น๋ ํน์ ์ปค๋ฐ์ ๋ํ ์ฐธ์กฐ(reference)์ ์ง๋์ง ์๋๋ฐ, ์ด๋ฐ ์ฌ์ค ๋๋ฌธ์ ์๋ง์ Git ์ ์ฐฌ๋ก ์๋ค์ด ์์ฃผ ์ด๋ ๊ฒ ๋งํ๊ณ ๋ ํ๋ค.
branch early, and branch often
๋ธ๋์น๋ฅผ ๋ง์ด ๋ง๋ค์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ ๊ณต๊ฐ์ ๋ถ๋ด์ด ๋์ง ์๊ธฐ ๋๋ฌธ์, ์์ ์ ์ปค๋ค๋ฅธ ๋ธ๋์น๋ก ๋ง๋ค๊ธฐ ๋ณด๋ค, ์์ ๋จ์๋ก ์๊ฒ ๋๋๋ ๊ฒ์ด ์ข๋ค.
์ฐ์ ์, ๋จ์ํ ๋ธ๋์น๋ฅผ "ํ๋์ ์ปค๋ฐ๊ณผ ๊ทธ ๋ถ๋ชจ ์ปค๋ฐ๋ค์ ํฌํจํ๋ ์์ ๋ด์ญ"์ด๋ผ๊ณ ๊ธฐ์ตํ๋ฉด ๋๋ค.
git branch newImage # newImage๋ผ๋ ๋ธ๋์น ์์ฑ
git checkout newImage # newImage๋ผ๋ ๋ธ๋์น๋ก ์ด๋
Branches and Merging
์ด์ ๋ ๊ฐ์ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ์ ์์๋ณผ ๊ฒ์ด๋ค. ํ์ต ํ์๋ ๋ธ๋์น๋ฅผ ๋ฐ๊ณ , ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ํ ๋ค์ ํฉ์น ์ ์๊ฒ ๋๋ค.
- git merge : Git์ merge๋ ๋ ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ์ปค๋ฐ์ ๋ง๋ค์ด๋ธ๋ค. ๋๊ฐ์ ๋ถ๋ชจ๊ฐ ์๋ ์ปค๋ฐ์ด๋ผ๋ ๊ฒ์ "ํ ๋ถ๋ชจ์ ๋ชจ๋ ์์ ๋ด์ญ๊ณผ ๋๋จธ์ง ๋ถ๋ชจ์ ๋ชจ๋ ์์ , ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ ๋ถ๋ชจ์ ๋ชจ๋ ๋ถ๋ชจ๋ค์ ์์ ๋ด์ญ์ ํฌํจํ๋ค"๋ผ๋ ๋ป์ ์๋ฏธํ๋ค.
git merge bugFix # bugFix ๋ธ๋์น๋ฅผ ํ์ฌ ๋ธ๋์น์ ํฉ์น๊ธฐโ
์ด์ main ๋ธ๋์น์ bugFix๋ฅผ ํฉ์ณ๋ณด์.
git checkout bugFix # bugFix๋ก ์ด๋
git merge main # ํ ๋ธ๋์น๋ฅผ main์ด๋ผ๋ ๋ธ๋์น์ ํฉ์ณ ๋ฃ๊ธฐ
Git Rebase
๋ธ๋์น๋ผ๋ฆฌ์ ์์ ์ ์ ๋ชฉํ๋ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฆฌ๋ฒ ์ด์ค(rebase)์ด๋ค. ๋ฆฌ๋ฒ ์ด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปค๋ฐ๋ค์ ๋ชจ์์ ๋ณต์ฌํ ๋ค, ๋ค๋ฅธ ๊ณณ์ ๋จ๊ถ ๋๋ ๊ฒ์ด๋ค.
๋ฆฌ๋ฒ ์ด์ค๋ฅผ ํ๋ฉด ์ปค๋ฐ๋ค์ ํ๋ฆ์ ๋ณด๊ธฐ ์ข๊ฒ ํ ์ค๋ก ๋ง๋ค ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ฉด ์ ์ฅ์์ ์ปค๋ฐ ๋ก๊ทธ์ ์ด๋ ฅ์ด ํ๊ฒฐ ๊นจ๋ํด์ง๋ค.
์ฌ๊ธฐ ๋ธ๋์น ๋ ๊ฐ๊ฐ ์๋ค. โ bugFix๋ธ๋์น๊ฐ ํ์ฌ ์ ํ๋๋ค๋ ์ ( * ํ์)์ ํ์ธํ์.
bugFix ๋ธ๋์น์์์ ์์ ์ main ๋ธ๋์น ์๋ก ์ง์ ์ฎ๊ฒจ ๋์ผ๋ ค๊ณ ํ๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด, ์ค์ ๋ก๋ ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ก๋ฐ๋ก ๊ฐ๋ฐํ์ง๋ง, ๋ง์น ์์๋๋ก ๊ฐ๋ฐํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ค.
git rebase main # ์ ํ๋ ๋ธ๋์น์ ๋ด์ฉ์ main์ด๋ผ๋ ๋ธ๋์น์ ๋ฆฌ๋ฒ ์ด์คํ๊ธฐ
์ด์ bugFix ๋ธ๋์น์ ์์ ๋ด์ฉ์ด main์ ๋ฐ๋ก ์์ ๊น๋ํ ํ ์ค์ ์ปค๋ฐ์ผ๋ก ๋ณด์ด๊ฒ ๋์๋ค. C3 ์ปค๋ฐ์ ์ด๋๊ฐ์ ์์ง ๋จ์์๊ณ (๊ทธ๋ฆผ์์ ํ๋ ค์ง), C3'๋ main ์์ ์ฌ๋ ค ๋์ ๋ณต์ฌ๋ณธ์ด๋ค. main์ด ์์ง ๊ทธ๋๋ก๋ผ๋ ๋ฌธ์ ๊ฐ ๋จ์์๋๋ฐ, ์ด ๋ฌธ์ ๋ ๋ค์ ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
git rebase bugfix # ์ ํ๋ ๋ธ๋์น๋ฅผ bugFix ๋ธ๋์น์ชฝ์ผ๋ก ๋ฆฌ๋ฒ ์ด์คํ๊ธฐ
'Studynote > Git, Github' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git ์ ๋ฌธ] Git์ ๊ธฐ์ด ๊ฐ๋ - 2 (0) | 2022.08.02 |
---|---|
[Git ์ ๋ฌธ] Git์ ๊ธฐ์ด ๊ฐ๋ -1 (0) | 2022.08.02 |
[Github] Github Desktop์ ํ์ฉํ์ฌ Github ๋ธ๋ก๊ทธ ๊ธ์ฐ๊ธฐ - 3 (0) | 2022.03.08 |
[Github] Github Desktop์ ํ์ฉํ์ฌ Github ๋ธ๋ก๊ทธ ๊ธ์ฐ๊ธฐ - 2 (0) | 2022.03.08 |
[Github] Github Desktop์ ํ์ฉํ์ฌ Github ๋ธ๋ก๊ทธ ๊ธ์ฐ๊ธฐ - 1 (0) | 2022.03.08 |