1. ๋ธ๋์น ํ์ฉํ๊ธฐ
- ๋ณดํต ์์ ์ ํ๊ณ ์ถ์๋ฐ, ์๋ ํ์ผ์ ๊ทธ๋๋ก ๋๋๊ณ ์ถ์ ๋ ๋ณต์ฌ๋ณธ์ ๋ง๋ฆ
๊ทธ๋ฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ๊ฒฝ์ฐ ํ๋ก์ ํธ ํ๋ ํ๋์ ํฌ๊ธฐ๊ฐ ์์ฒญ ์ปค์ง ์๋ ์์ด ํ์ค์์ ๋ณต์ฌํด์ ์ธ ์๊ฐ ์์ - ๋ณต์ฌ๋ณธ == ๋ธ๋์น
- ์๋ก์ด ๊ธฐ๋ฅ์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ ์งํํ๋ ๊ฒ์ด ํ์
๋ธ๋์น(๋ณต์ฌ๋ณธ) ์์ฑ : git branch
git branch ๋ธ๋์น์ด๋ฆ
ex) git branch cart
- 'git branch ๋ธ๋์น์ด๋ฆ' ์ผ๋ก ๋ธ๋์น๋ฅผ ์์ฑ
git branch
- git branch๋ฅผ ์ ๋ ฅํ๋ฉด ๋ธ๋์น ํ์ธ ๊ฐ๋ฅ
- ๋ณํ๊ฐ ์๊ฑฐ๋ ์๊น์ด ๋ค๋ฅด๋ฉด ๋ด๊ฐ ์์นํด ์๋ ๋ธ๋์น
- ํฐ์์ผ๋ก ๋ ์์ผ๋ฉด ๋ด๊ฐ ๋ง๋ ๋ธ๋์น
- ํน์ END๋ก ๋ ์ ์๋ฌด๊ฒ๋ ์ ๋ ฅ ์ ๋๋ฉด ํค๋ณด๋ Q ๋๋ฅด๋ฉด ๋จ
ํ์ฌ ์๋ ๋ธ๋์น ์ด๋ : git switch ํน์ git checkout
git switch <๋ธ๋์น๋ช
>
ex) git switch login
ํน์
git checkout <๋ธ๋์น๋ช
>
ex) git checkout login
- ์์ ๋ช ๋ น์ด๋ก ์ด๋ ํ, git branch๋ก ํ์ธํด๋ณด๋ฉด ์ง๊ธ ์๋ ๋ธ๋์น ํ์๊ฐ ๋ฐ๋ ๊ฑธ ํ์ธ ๊ฐ๋ฅ
- ์๋๋ git checkout๋ผ๋ ๋ช
๋ น์ด๋ง ์์์ผ๋, checkout์ ๊ธฐ๋ฅ์ด ์ฌ๋ฌ๊ฐ์ง๋ผ ํท๊ฐ๋ ค์
๋ธ๋์น ์ด๋๋ง์ ์ํ git switch๋ผ๋ ๋ช ๋ น์ด๊ฐ ์ต๊ทผ์ ์๋ก ์๊น - ์๋ ํ์ฌ์์๋ ์์ง๋ git checkout ์ฐ๋ ๊ฒฝ์ฐ๋ ์์. ๋ ์ค ํ๋๋ง ์ฐ๋ฉด ๋จ
๋ธ๋์น ํ ๋ฒ์ ์์ฑ & ์ด๋ : git switch -c ํน์ git checkout -b
git switch -c ๋ธ๋์น ์ด๋ฆ
ํน์
git checkout -b ๋ธ๋์น ์ด๋ฆ
- ๋ณดํต์ ์ผํ๋ค๋ณด๋ฉด ์์ฑ(branch)/์ด๋(switch) ๋ฐ๋กํ๊ธฐ๋ณด๋ค๋ ์ด๊ฒ๋ง ์
- switch -c๋ create์ ์ฝ์
- checkout -b๋ branch์ ์ฝ์
์๋ก์ด ๋ธ๋์น์์ ์ฝ๋ ์์
- git switch ๋ธ๋์น๋ช ์ผ๋ก ์๋ก์ด ๋ธ๋์น๋ก ์ด๋
- git add .
- git commit -m "์ ์ฅ๋ฉ์์ง"
- git switch ๋ก ๊ธฐ์กด์ main ๋ธ๋์น๋ก ๋ค์ ์ด๋ํ๋ฉด ์์ ํ ์ฝ๋๊ฐ ๋ณด์ด์ง ์์์ ์ ์ ์์
-> ์๋ณธ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก ๋ง๋ ๋ธ๋์น์์๋ง ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒ (๋ณต์ฌ๋ณธ ์์ )
์ฝ๋ ์ง ๋ธ๋์น๋ฅผ main์ ํฉ์น๊ธฐ : git merge
git switch ์ต์ข
๋ธ๋์น์ด๋ฆ(main) // 1. ์๋ณธ ๋ธ๋์น๋ก ์ด๋
git merge ํฉ์น ์ฌ๋ฃ๋ธ๋์น์ด๋ฆ(login) // 2. ํฉ์น ๊ธฐ๋ฅ ๋ธ๋์น๋ฅผ ์
๋ ฅ
- ์์ ํ๊ฒ ๋ค๋ฅธ ๋ธ๋์น์์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ์์ผ๋, ์๋ณธ ์ฝ๋๋ก ํฉ์ณ์ผ ํจ (ํ์ ๊ด์ )
- main ๋ธ๋์น๋ก ๋จผ์ ์ด๋ํ ํ, ํฉ์น ๊ธฐ๋ฅ๋ธ๋์น๋ฅผ ๋ก๊ฒจ ์ด
์ฝ๋ ์์์ ์ฅ : git stash
git stash -u -m "์ด๋ค ๊ธฐ๋ฅ ๊ฐ๋ฐ์ค์ด์๋์ง ๊ฐ๋จํ ๋ฉ์์ง"
- ์ฝ๋ ๋ณ๊ฒฝ ํ ์ ์ฅ(add, commit)์ ํ์ง ์์ผ๋ฉด git switch๊ฐ ์๋ํ์ง ์์ ๋๊ฐ ์์
(์ด๋ํ๋ ๋ธ๋์น์ ์ฝ๋์ ๋ด๊ฐ ๋ณ๊ฒฝํ ์ฝ๋์์ ๊ฒน์น๋ ๋ถ๋ถ์ด ์์ ๋ ์ด๋์ด ์ ๋จ) - ์ด๋ฐ ๊ฒฝ์ฐ ์ ์ฅ(add, commit)์ ํด์ฃผ์ด์ผ ํด๊ฒฐ๋์ง๋ง,
๊ธํ๊ฒ ๋ธ๋์น๋ฅผ ์ด๋ํ๊ฑฐ๋ ๊ฐ๋ฐ์ด ๋ ๋ ์ํฉ์ด๋ผ ์ ์ฅํ๊ธฐ ์ซ์ ๋๊ฐ ์์ - ์ด๋ฐ ๊ฒฝ์ฐ git stash๋ก ์์ ์ ์ฅํ๊ณ switch๋ก ๋ธ๋์น ์ด๋ ๊ฐ๋ฅ
- -u๋ untracked ํ์ผ๋ค์ ๋ณ๊ฒฝ์ฌํญ๋ ๋ชจ๋ ์ ์ฅํ๊ฒ ๋ค๋ ๋ป (untracked ํ์ผ์ ์์: ์๋ก ๋ง๋ ํ์ผ)
- -m ์ ์ปค๋ฐ ๋ฉ์ธ์ง์ฒ๋ผ ์ด๋ค ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ์ค์ด์๋์ง ๊ฐ๋จํ๊ฒ ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๋ ์ต์
git stash list
- git stash list ๋ช ๋ น์ด๋ก ์์๋ก ์ ์ฅ๋ ๋ถ๋ถ ํ์ธ ๊ฐ๋ฅ
- q๋ก ๋น ์ ธ๋์ด
git stash apply stash@{์ซ์} // ์ซ์ ๋ถ๋ถ์ git stash list ๋ช
๋ น์ด๋ก ํ์ธ
- ์ ์ ์ ์ฅํ๋ ๊ฒ์ ๋๋๋ฆฌ๊ณ ์ถ์ ๋ ์ ๋ ฅ
๊ณผ๊ฑฐ์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ๊ธฐ : git reset ํน์ git revert
- ํ์ ์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์ด์ฉ ์ ์๋ ์ํฉ์ด ์๋๋ผ๋ฉด ์ฌ์ฉ ๋น์ถ (๋ค๋ฅธ ์ฌ๋๋ค๋ ์ปค๋ฐ ๋ด์ญ ๋ณ๊ฒฝ, ์ฝ๋ ๊ผฌ์)
- ํ์ ์์ ์ธ ์ผ์ ๊ฑฐ์ ์์
git reset --์ต์
์ปค๋ฐid
git reset --hard 5dc14b
- ๊ณผ๊ฑฐ์ ์ปค๋ฐ์ผ๋ก ์์ ํ ๋๋์๊ฐ๋ git reset
- ๊ณผ๊ฑฐ ์ปค๋ฐ์ด ๋ชจ๋ ์ฌ๋ผ์ง๊ณ ํ์ผ๋ ๊ณผ๊ฑฐ ๋ฒ์ ์ผ๋ก ๋๋์ ๊ฐ
- ์ต์ ์ข ๋ฅ: --hard, --mixed, --soft
- ๊ณ ์ ์์ด๋: git log ๋ช ๋ น์ด๋ก ํ์ธํ ์ปค๋ฐ ์์ด๋์ ๋ฌธ์์ด 5~6๊ฐ
git revert ์ปค๋ฐid
- ๊ณผ๊ฑฐ ์ปค๋ฐ์ ๋ค์ ์ปค๋ฐ์ผ๋ก ๋ง๋ค์ด ๋๋์๊ฐ๋ git revert
- git reset์ฒ๋ผ ์์ ํ ์ปค๋ฐ์ด ์ฌ๋ผ์ง๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ง ์์
- git revert ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ถฉ๋(conflict)๊ฐ ๋ฐ์ํ๋๋ฐ, ๊ธฐ์กด๊ณผ ๊ฒน์น๋ ๋ถ๋ถ์์ ๋ณ๊ฒฝ์ด ์์ผ๋ ๊ฒฐ์ ํ๋ผ๋ ๊ฒ
- ์ถฉ๋ ์ git add . ์ git commit -m "์ปค๋ฐ๋ฉ์์ง" ์ ๋ ฅ์ผ๋ก ๋๋
- ์ถฉ๋์ด ๋ฐ์ํ์ง ์์๋ค๋ฉด ์ปค๋ฐ ๋ฉ์์ง ์ ๋ ฅํ๊ณ ๋๋
vim
- ํ ์คํธ ํธ์ง๊ธฐ
- git commit ์ -m ์ต์ ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด vim ํ ์คํธ ํธ์ง๊ธฐ๊ฐ ์ด๋ฆผ
- ๊นํ๋ธ์์ conflict ํน์ git pull ์ ๋ง๋ ์ ์์
- vim์ด ๋ด์ ๋ ํค๋ณด๋ i๋ฅผ ๋๋ฅด๋ฉด ---INSERT--- ํ์๊ฐ ๋์ค๊ณ ์ปค๋ฐ ๋ฉ์์ง ์์ฑ ๊ฐ๋ฅ
- ๋ฉ์์ง ์์ฑ์ด ๋๋๋ฉด ํค๋ณด๋ ESC
- : + w + q ๋ฅผ ์์๋๋ก ์ ๋ ฅ ํ ์ํฐ ์น๋ฉด ์ปค๋ฐ ๋ฉ์์ง ์ ์ฅ ์๋ฃ
โ ๏ธ hint: waiting for your editor to close the file*. ์๋ฌ ๋ฐ์์ / ํน์ vim์ด ์๋๊ณ ๋ค๋ฅธ ๊ฒ์ด ๋ฐ ์
- git config --global core.editor "vim"
โ ๏ธ LF will be replaced by CRLF the next time Git touches it ๋ผ๋ ๊ฒฝ๊ณ ๋ฌธ์ด ๋ฐ ์
- (win) git config --global core.autocrlf true
- (mac) git config --global core.autocrlf input
2. Pull Request ํ์ฉํ๊ธฐ
- ์ฌ์ค ํ์ ์ git merge ๋ช ๋ น์ด๋ก ํฉ์น๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์
- ํฐ๋ฏธ๋์ด ์๋ github์์ ํฉ์น์
- ์ฝ๋ ๋ฆฌ๋ทฐ ์จ๋ผ์ธ์์ ๋ฐ๊ณ , ์จ๋ผ์ธ์์ ํฉ์น๋๊ฒ ์ถฉ๋ ์ฌ๋ถ ํ์ธ, ํ ์คํธ ์๋ํ ๋ฑ ์ ๊ฒ์ ํธํ๊ธฐ ๋๋ฌธ
- github์์๋ merge์ ๊ฐ์ ๊ธฐ๋ฅ: Pull Request
- ๋น๊ฒจ์ ํฉ์น๋ ๊ฒ(Pull)์ ์์ฒญ(Request)ํ๋ค ๋ผ๋ ๋ป
1. ๋ธ๋์น ์์ฑ ๋ฐ ๋ธ๋์น ์ด๋
git switch -c ๋ธ๋์น๋ช
ํน์
git checkout -b ๋ธ๋์น๋ช
2. ์ฝ๋ ์์ฑ
3. ์ฝ๋ ๋ณ๊ฒฝ ์ ์ฅ
git add .
git commit -m "update: ๋ก๊ทธ์์ ๊ธฐ๋ฅ ์์ฑ"
4. github์ ์ฝ๋ ์ ๋ก๋
git push origin ๋ธ๋์น๋ช
ex) git push origin logout
5. github ํํ์ด์ง์์ Compare & pull request ๋ฒํผ ํด๋ฆญ
6. base: ์ต์ข
(๊ธฐ๋ณธ)๋ธ๋์น / compare: ์ฌ๋ฃ(๊ธฐ๋ฅ)๋ธ๋์น ์ค์ ํ๊ณ
Pull request ๋ฉ์์ง ์์ฑ ํ Create pull request ํด๋ฆญํด์ ์์ฑ
7. Files changed์์ ์ฝ๋ ๋ณ๊ฒฝ์ ํ์ธ, ์ฌ๊ธฐ์ ์ฝ๋ ๋ฆฌ๋ทฐ ๊ฐ๋ฅ
8. Merge pull request ๋ฒํผ ๋๋ฅด๊ณ Confirm merge ํ๋ฉด ํฉ์ณ์ง
9. ๋ก์ปฌ์๋ ๋ฐ์: git checkout ๋ธ๋์น๋ช ์ผ๋ก ์ด๋, git pull origin ๋ธ๋์น๋ช ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
3. ํ์ ์ ์๊ธธ ์ ์๋ ๋ฌธ์ ์
๋ฌธ์ ์ 1 : ์๋ฒฝํ๊ฒ ๊ธฐ๋ฅ ๊ฐ๋ฐํด์ผ merge ๊ฐ๋ฅ
- ์ฌ์ฉ์ํํ ๊ณต๊ฐํ ์ ๋๋ก ๋ง๋ค์ด์ผ ๋ฉ์ธ ๋ธ๋์น์ ๋ฃ๋๊ฑด๋ฐ, ๊ธฐ๋ฅ์ ๋ค ๊ตฌํํ๋๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆผ
- ์ ์ฒด์ ์ผ๋ก ๋ณด๋ ๋ฒ๊ทธ๊ฐ ์ด๋์ ๋ ๊ฑด์ง ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์์ ๋ฒ๊ทธ ์์ ์ค๋ ๊ฑธ๋ฆผ
- ํด๊ฒฐ์ฑ
: ๊ฐ๋ฐ์ฉ ๋ธ๋์น ์์ฑ (dev ํน์ develop)
1. Main ๋ธ๋์น(๋ฐฐํฌ์ฉ)
2. Develop ๋ธ๋์น(ํ ์คํธ์ฉ)
3. ๊ธฐ๋ฅ ๋ธ๋์น(๊ธฐ๋ฅ ๊ฐ๋ฐ์ฉ)
ํฉ์น๋ ๊ฒ์ Develop ๋ธ๋์น๋ก!
๋ฌธ์ ์ 2) Main ๋ธ๋์น(๋ฐฐํฌ์ฉ ๋ธ๋์น)์ ๊ทธ๋ฅ ํฉ์น๋ฉด ์ํํจ
- 5๋ฒ์งธ ์ค ์ฝ๋๊ฐ val name = "์ํ๋ช " ์ธ ์ฝ๋์ 3๋ฒ์งธ ์ค ์ฝ๋๊ฐ val name = "ํ์๋ช "์ธ ์ฝ๋๊ฐ ํฉ์ณ์ง๋ค๋ฉด?
- ๊น์์๋ ์ธ์งํ์ง ๋ชปํด์ ๊ทธ๋ฅ ํฉ์ณ์ง์ง๋ง ์๋ฌ๊ฐ ์๊ธฐ๊ณ , ๋ชจ๋ ๋ค ๊ฐ์ด ์๋ฌ๋ฅผ ๊ฐ์ ธ๊ฐ๊ฒ ๋จ
- ํด๊ฒฐ์ฑ
: ๋ก์ปฌ์์ ๋จผ์ ํ
์คํธ
๋ด ์ปดํจํฐ(๋ก์ปฌ)์์ git pull origin dev ๋ก ๋ถ๋ฌ์ ๋จผ์ ํฉ์ณ๋ณด๊ธฐ
์ถฉ๋ ์ ํด๊ฒฐ๋ฒ ํ์ ์ฉ์ด
4. ํ์ ์ค์ ๊ฐ์ด๋
1. ์ด๊ธฐ ์ธํ
1. ํ์ฅ: ์ด๊ธฐ ์ฝ๋ ์์ฑ ๋ฐ github ์ ๋ก๋
- ํด๋ ์์ฑ
- ์งง์ ์ด๊ธฐ ์ฝ๋ ์์ฑ
- git init, add, commit
- Github ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
- Github ์ ๋ก๋ (git push)
2. ํ์ฅ : dev(ํน์ develop) ๋ธ๋์น ์์ฑ
- git switch -c dev (๋ก์ปฌ์์ dev ๋ธ๋์น ์์ฑ)
- git push origin dev (github์๋ ๋ฐ์)
3. Github์์ dev ๋ธ๋์น๋ฅผ default๋ก ์ค์
- Settings - Default branch - dev ๋๋ฅด๊ณ Update ํด๋ฆญ
4. ํ์๋ค์ Collaborator๋ก ๋ฑ๋ก
5. ํ์: git clone ํ๊ธฐ (git clone ์ฃผ์ .)
2. ๊ธฐ๋ฅ ๊ฐ๋ฐ ์์
1. ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ ๋ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (git switch -c ๊ธฐ๋ฅ๋ธ๋์น๋ช )
- ์ฝ๋ ์์ฑ
- ์ฝ๋ ์ ๋ก๋ (git add . / git commit -m "" / git push origin ๊ธฐ๋ฅ๋ธ๋์น๋ช )
2. pull request ์์ฑ
3. ์ฝ๋ ์์ฑ์: ๋ฆฌ๋ทฐ ์์ฒญํ๊ธฐ (Reviewers)
4. ์ฝ๋ ๋ฆฌ๋ทฐ์ด: ๋ฆฌ๋ทฐํ๊ธฐ
- +๋ฅผ ๋๋ฌ ์์ฑ, Finish๋ก ์๋ฃ
- Comment๋ ์๊ฒฌ
Approve ์น์ธ
Request changes ๊ฑฐ์
5. ํฉ์น๊ธฐ ์ ๋ด ๋ก์ปฌ์์ ์ถฉ๋ ํด๊ฒฐ ๋ฐ ํ ์คํธ
- ๋ด ๋ก์ปฌ ์ ๊ธฐ๋ฅ ๋ธ๋์น์์ git pull origin dev
- fatal: Need to specify how to reconcile divergent branches. ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด
git config pull.rebase false ์ ๋ ฅ ํ ๋ค์ ์ ๋ ฅ
6. merge
- ์์ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ add, commit, push
- Github์์ merge ๋ฒํผ ํด๋ฆญ
3. ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ
1. ๋ด ๋ก์ปฌ์ dev์๋ ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์
- dev ๋ธ๋์น๋ก ์ด๋ (git switch dev)
- git pull origin dev
2. ๋ค์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ ๋ฐ ์ฝ๋ ์์ฑ
- Git add, commit, push
- Pull request ์์ฑ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ
- ๋ด ๋ก์ปฌ์์ ์ถฉ๋ ํด๊ฒฐ ๋ฐ ํ ์คํธ
- ์ฝ๋ ์ ๋ก๋ ๋ฐ merge
- ๋ฌดํ ๋ฐ๋ณต
- main(master): ์ ํ์ผ๋ก ์ถ์๋ ์ ์๋ ๋ธ๋์น
- develop : ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- feature : ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- release : ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ์ค๋นํ๋ ๋ธ๋์น
- hotfix : ์ถ์ ๋ฒ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น