Git flow
๐ป main๊ณผ ๊ฐ์ธ ๋ธ๋์น ์ฌ์ด์ ์ค๊ฐ ๋ธ๋์น๋ฅผ ์์ฑํ๋ค.
? ์์ง ํ์ธ์ด ์ ๋๋ก ๋์ง์์ feature branch๋ฅผ ์ธ์๋ฐ์ ๋ฐ๋ก ๋ด๋ณด๋ผ ์ ์๊ธฐ ๋๋ฌธ์,
๊ฐ๋ฐ์๋ค๋ผ๋ฆฌ mergeํ์ฌ ๊ธฐ๋ฅ์ ํ ์คํธํ๊ณ ํ์ธํ๋ branch๋ฅผ ์์ฑํ๋ค.
โ๏ธ main > develop > feature
main branch
: main์ ์ค์ ๋ก ์ํ ๋จ๊ณ์์ ๊ตฌ๋๋๊ณ ์๋ ๋จ๊ณ์ ์ฝ๋๋ค์ด ๋ชจ์ฌ์๋ค. (production release์ ์ฌ์ฉ๋๋ branch)
develop branch
: ๋ค์ release์ ํฌํจ๋๊ธฐ ์ํด ์์ฑ๋ feature branch ์ฝ๋๊ฐ ๋ณํฉ๋๋ ๋ธ๋์น์ด๋ค.
feature brnach
: ์๋ก ์์ฑํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ๋๋ ๋ธ๋์น์ด๋ค.
โ๏ธ main์ผ๋ก ๋ณํฉํ๊ธฐ์ ์ ํฌ๊ฒ 2๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
develop ๋จธ์ง๋ ๊ธฐ๋ฅ๋ค์ด ์์ ํ ๋์๋ ์ฝ๋๋ผ๊ณ ํ๋จ๋๋ฉด release branch๋ฅผ ์์ฑํ๋ค.
Release
๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ , ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๋ branch
develop ์์๋ ๊ณ์ํด์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ด merge๋๊ณ ์๋ค.
fix๋ release branch์์๋ง ์ด๋ฃจ์ด์ง๋ค.
๋ฒ๊ทธ๊ฐ ๋ค ๊ณ ์ณ์ง๋ฉด ํด๋น release branch๊ฐ main์ ๋ณํฉ๋๋ค.
Hotfix
: production release ์ดํ์ ๋ฐ๊ฒฌ๋ ์ค๋ฅ ์ฌํญ์ ์ ์ํ๊ฒ ์์
์ค๋ฅ ๋ฐ์ ์ main์์ ๋ฐ๋ก hotfix branch๋ฅผ ์์ฑํ๊ณ , ๋ณํฉ๋ ๋ฐ๋ก main์ผ๋ก ํ๋ค.
https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Merge / Rebase
๐ git merge๋ commit์ ์ฎ๊ฒจ์ค๋ ๋์ ๋ฐฉ์์ด๋ค.
commit์ head๊ฐ ๊ฐ๋ค๋ ๊ฐ์ ํ์, ์๊ฐ์ ๊ธฐ์ค์ผ๋ก commit์ด ์ฎ๊ฒจ์ง๋ค.
1. feature/signup (4๊ฐ์ commit) ์์ main์ผ๋ก merge
(signup์ 4๊ฐ์ commit์ด main์ผ๋ก ๋ณํฉ๋์๋ค. = ํ ๋ธ๋์น์ ์๋ commit์ ๋ค๋ฅธ๋ธ๋์น๋ก ๊ฐ์ ธ๊ฐ๋ค.)
2. feature/sign-in์ ์ฐ๋์ commit ์ฌ์ด๋ก sign-up์ ๋ถํ์๊ณผ main์ ๊ฒ์ commit์ด ๋ค์ด๊ฐ๋ค.
> ๋ฌธ์
1. ๋ณต์กํ project history
: ๋ ๋ฆฝ๋ ๋ธ๋์น์์ ๋ก์งํ๋ ์์ ํ๋๋ผ๋, merge์ดํ์ ๋ค๋ฅธ commit ๋ด์ญ๊ณผ ๊ฒน์ณ ๊ตฌ๋ถํ๊ธฐ ์ด๋ ต๋ค.
2. ๋ถํ์ํ merge commit
: ๋ชจ๋ feature branch๋ง๋ค merge commit์ด ๋จ์ผ๋ฏ๋ก,
๋ง์ ๊ฐ์ธ branch๋ก ์งํ๋๋ ์์ ์ด main์ผ๋ก ๋ชจ์ผ ์ branch history๊ฐ ์ง์ ๋ถํด์ง๋ค.
Git rebase
re + base = commit์ base๋ฅผ ๋ค์ ์ฌ์ค์ ํ๋ค.
๊ณตํต base๋ฅผ ๊ฐ์ง ๋ ๋ธ๋์น์์ ํ๋์ ๋ธ๋์น์ base๋ฅผ ๋ค๋ฅธ ๋ธ๋์น์ ์ต์ commit์ผ๋ก rebaseํ๋ ๊ฒ์ด๋ค.
Squash
์ฌ๋ฌ๊ฐ์ commit์ ํ๋์ commit์ผ๋ก ํฉ์น๋ค.
[Rebase๊ณผ์ ]
1. develop ๋ธ๋์น๋ก ์ด๋ํ์ฌ git pull origin develop
2. push ํ ์์ ๋ธ๋์น๋ก ๋์์จ๋ค.
3. `git rebase -i develop` ๋ฅผ ์งํํ๋ค.
4. squash ์ฐฝ์ด ๋จ๋ฉด ๊ฐ์ฅ ์ค๋๋ commit์ pick ํ๋ค.
5. ๋ค๋ฅธ ์ปค๋ฐ ๋ฉ์ธ์ง๋ ๊ฐ์ฅ ์ค๋๋ commit์ ๊ธฐ์ค์ผ๋ก squash ํ๋ค.
6. Esc -> :wq! ๋ก ์ฐฝ์์ ๋น ์ ธ๋์จ๋ค.
7. ์์ ์ฉ ์๋ํฐ๊ฐ ํ๋ ๋ ๋ํ๋๋ค.
8. ๋ถํ์ํ ๋ด์ฉ์ ์ ๊ฑฐํ๊ณ ํ์ฌ ์์ ๋ด์ญ์ ๋ํ ์ปค๋ฐ ๋ฉ์ธ์ง๋ฅผ ์ ์ฑ๊ป ์์ฑํ๋ค.
9. Esc -> :wq! ์ ์ฅํ๊ณ ์๋ํฐ์์ ๋น ์ ธ๋์จ๋ค.
10. ์ฑ๊ณตํ๋ค๋ฉด git log๋ก ๊น๋ํด์ง ์ปค๋ฐ ๋ฉ์ธ์ง๋ฅผ ํ ๋ฒ ๊ฐ์ํ๊ณ ํธ์ฌํ๋ค.
11. ๋ง์ฝ git์ด history๊ฐ ๋ค๋ฅธbranch์ push๋ฅผํ์ฉํ์ง์๋ ์ํ๋ผ๋ฉด
`git push origin feature/branchname -f`
-f ์ต์ ์ ์ฌ์ฉํ์ฌ force push๋ฅผ ์งํํ๋ค.
Upstream / Downstream
[๊ฐ๋ ]
git remote add origin ...
init ํ์ ๋ origin์ ์ง์ addํ๋๋ฐ, ์ฌ๊ธฐ์ origindl github์ ์กด์ฌํ๋ repository ์ฆ, remote๋ฅผ ์๋ฏธํ๋ค.
remote = origin
upstream๊ณผ downstream์ ์๋์ ์ธ ๊ฐ๋ ์ด๋ค.
origin๊ณผ local๊ธฐ์ค์ผ๋ก ์๊ฐํ๋ฉด origin์ด up, local์ด down์ด ๋๋ค.
git push -u origin main
์ฌ๊ธฐ์ -u ์ต์ ์ด --set-upstream์ ์ค์์ผ๋ก upstream์ ์ค์ ํ๋ค๋ ๋ป์ด๋ค.
upstream์ ํ๋ฒ ์ค์ ํ๊ณ ๋๋ฉด ๋ค์๋ถํฐ๋ git push ๋๋ git pull ๋ช ๋ น์ด๋ง ์ ๋ ฅํด๋ ์๋์ผ๋ก origin์ main ๋ธ๋์น๋ก๋ถํฐ push์ pull์ด ์คํ๋๋ค. (up๊ณผ down์ ๊ด๊ณ๊ฐ ์ค์ ๋์ด์)
[์ค์ ]
forkํ repository clone
git remote add origin [forkํURL]
upstream repository ์ฐ๊ฒฐ
git remote add upstream [URL]
//ํ์ธ
git remote
>origin
>upstream
Forking Workflow
GitHub์์ ์คํ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ฑฐ๋, ํ์ ์ ์งํํ ๋ fork๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค.
fork๋ ๋ค๋ฅธ ์ฌ๋์ repository๋ฅผ ๋ด ์์ ์ repository๋ก ๋ณต์ฌํ๋ ๊ฒ์ด๋ค.
์๋ ์์ ์์ remote๊ฐ upstream, ๋ด๊ฐ forkํ remote๊ฐ origin์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ฒ๋๋ค.
[ํ์ ์ ํ๋ก์ธ์ค]
1. upstream : ์๋ณธ remote repository๋ฅผ github์์ fork
2. origin : forkํ remote repository๋ฅผ git client๋ก clone
3. origin์์ ์์ [๋ฐ๋ณต]
1. cloneํ repository (local)์ commit (branch)
2. local(branch)์์ origin์ผ๋ก push
git push -u origin branchname
4. upstream์ ๋ฐ์
- PR๋ฑ๋ก ์ upstream์์ ๋ฐ๋๋ด์ฉ ์๋ ๊ฒฝ์ฐ
: origin์์ upstream์ผ๋ก PR
- ๋ฐ๋๋ด์ฉ ์์ ๊ฒฝ์ฐ
1. upstream์ local๋ก pull
git pull upstream main
2. local์์ origin์ผ๋ก push
git push origin main
3. origin์์ upstream์ผ๋ก PR
'โข GIT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] git stash (gitKraken) (0) | 2022.11.27 |
---|---|
[Git] Merge - fast Forward merge, commit merge (merge ๋ฐฉ์) (0) | 2022.10.26 |
[Git] Git ์ฌ์ฉ ๊ธฐ์ด ( local-remote / branch-head / push-pull ) (0) | 2022.10.26 |
[GIT] git ๊ธฐ๋ณธ์ฌ์ฉ reset / revert / merge / rebase (0) | 2022.05.15 |