๐ฅ ์ ์ธ์ ๊นํฐ๋ 2์ผ์ฐจ (2)
Index
.gitignoreํ์ผ์ ๋ญ๊ฐ์?ammend,squash: ์ปค๋ฐ ๊ฐ๊ณ ๋๊ธฐstash: working tree๋ฅผ ์ ๊น๋ง ์ ์ฅ- branch์ checkout
- branch ๋ณํฉ 1:
merge- 3-way merging
- merge conflict?
- branch ๋ณํฉ 2:
rebase - branch-์ ๋ต
- commit์ ์ ์ ๋จ์์ ํ์ , ๋ฉ์์ง
5. branch ๋ณํฉ 1: merge
merge conflict?
Merge conflicts happen when you merge branches that have competing commits, and Git needs your help to decide which changes to incorporate in the final merge.
- About merge conflicts, github docs
merge conflict๋ competing commit์ ๊ฐ์ง๋ ๋ธ๋์น๋ค์ ๋ณํฉํ๋ คํ ๋ ์ผ์ด๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ฌ์ฉ์๊ฐ ์ต์ข ๋ณํฉ์์ ํฌํจํด์ผํ๋ ์ปค๋ฐ์ ๊ฒฐ์ ํด์ฃผ์ด์ผํ๋ค.
Competing Commit์
- ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ผ์ธ์ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ ์ฌํญ์ด ์๊ฑฐ๋,
- ํ ๋ธ๋์น๊ฐ ํ์ผ์ ์์ ํ๋๋ฐ, ๋ค๋ฅธ ๋ธ๋์น๊ฐ ๊ทธ ํ์ผ์ ์ญ์ ํ ๊ฒฝ์ฐ
์ ์๊ธด๋ค.
Resolve merge conflict
Git์ merge ๋ฐฉ์์ ๋ฐ๋ฅด๋ฉด, merge conflict๊ฐ ์ผ์ด๋ฌ์ ๊ฒฝ์ฐ ๋ฐ๋์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ด๋ค ๋ณ๊ฒฝ์ฌํญ์ ์๋ก์ด ์ปค๋ฐ์ ํฌํจ์ํฌ์ง ๊ฒฐ์ ํด์ผํ๋ค.
์๋ฅผ ๋ค์ด, ๋ง์ฝ ๋์ ๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๊ฐ์ ๋ ํฌ์งํ ๋ฆฌ์ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ค styleguide.md ๋ผ๋ ํ์ผ์ ๋์ผ ๋ผ์ธ์ ์์ ํ๋ค๋ฉด, ์ด ๋ ๋ธ๋์น๋ค์ ๋ณํฉํ๋ ค ํ ๋ ์ปจํ๋ฆญํธ ์๋ฌ๋ฅผ ๋ง๋๊ฒ ๋๋ค. ์ด ๋ ์ฐ๋ฆฌ๋
-
Git bash๋ฅผ ์ด๊ณ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ๋ค.
cd _REPOSITORY-NAME_ -
git status๋ก merge conflict ์ ์ํฅ๋ฐ์ ํ์ผ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ณธ๋ค. ์ด ์์ ์์๋styleguide.md๊ฐ ๊ทธ๋ฌํ ํ์ผ์ด๋ค.$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add ..." to mark resolution) > # > # both modified: styleguide.md > # > no changes added to commit (use "git add" and/or "git commit -a") -
ํด๋น ํ์ผ์ ์ํ๋ ์๋ํฐ๋ก ์ฐ๋ค.
-
ํ์ผ์ ์ด๊ณ ๋์, merge conflict๊ฐ ์ฒ์ ๋ฐ์ํ ๋ถ๋ถ์ ์ฐพ๊ธฐ ์ํด์
<<<<<<<๋ฅผ ๊ฒ์ํด๋ณธ๋ค. ๊ทธ ๋ถ๋ถ์ผ๋ก ์ด๋์ ํ๋ฉด```bash If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a ```์ด๋ฐ ์์ผ๋ก
<<<<<<<๋ค์ ์จ์๋ ์ด๋ฆ(HEAD) base branch์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ณ ,=======๋ก ๊ตฌ๋ถ๋์ด์๋ ๋ท๋ถ๋ถ์>>>>>>>๋ค์ ์จ์๋ ์ด๋ฆ์ ๊ฐ์ง branch์ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ ๊ฒ์ด๋ค. ์ด ์์ ์์๋ ํ ์ฌ๋์ด "open an issue"๋ผ๊ณ base ๋๋ HEAD ๋ธ๋์น์์ ๋ณ๊ฒฝ์ ํ๊ฒ์ด๊ณ , ๋ค๋ฅธ ์ฌ๋์ ๊ฐ์ ์ค์์ "ask your question in IRC"branch-a๋ผ๋ ๋ธ๋์น์์ ๋ณ๊ฒฝ์ ํ ๊ฒ์ด๋ค. -
์ปจํ๋ฆญํธ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์์ ์ถฉ๋์ฌํญ๋ค์ ๋ค ์ง์๋ฒ๋ฆฌ๊ณ ์ํ๋ ๋ด์ฉ์ ์ ์ด์ฃผ๋ฉด ๋๋ค.
๊นํฌ๋ผ์ผ์์์ ์์๋ฅผ ๋ง๋ค์ด๋ดค๋ค.
์ผ๋จ ๋ธ๋์น๋ master์ mergeTest ๊ฐ ์๊ณ , conflictTest๋ผ๋ ํ์ผ์ ๋์ผ๋ผ์ธ์ ๊ฐ์ ๋ค๋ฅด๊ฒ ์์ ํ๊ณ ์ปค๋ฐํ๋ค.

๊ทธ ํ master๋ธ๋์น์์ mergeTest ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ ค๊ณ ํ๋

๋ค์๊ณผ ๊ฐ์ด conflict error ๊ฐ ๋ฐ์ํ์๋ค.

์ค๋ฅธ์ชฝ ํจ๋์ ConflictedFiles ์ conflictTest๋ฅผ ๋๋ธํด๋ฆญํ๋๊น ์๋์ฒ๋ผ ์๋ก์ด ์ฐฝ์ด ๋ด๋ค! ์ถฉ๋ํ๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๋ณด์ฌ์ฃผ๋ ์ฐฝ์ด์๋ค.

๋ณ๊ฒฝ์ฌํญ๋ค ์ค์ ์ํ๋ ๊ฒ์ ์ถ๊ฐ Result์ ์ถ๊ฐํ ์ ์์๋ค.
์ด๋ฐ์์ผ๋ก ๐

๋ค ํ์ผ๋ฉด ์ฐ์ธก ์๋จ์ save ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ด์ ํ๋ฉด์ผ๋ก ๋์์ค๊ฒ ๋๋๋ฐ, ํจ๋์ด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋์ด์์๋ค. ์ถฉ๋์ฌํญ์ ํด๊ฒฐํ์ผ๋ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค๊ณ , merge ํด์ฃผ์๋ค.

merge conflict ํด๊ฒฐ๋ ๊นํฌ๋ผ์ผ์ผ๋ก ํ๋ฉด ๋๋ฌด ์ฝ๋น ๐
6. branch ๋ณํฉ 2: rebase
๋ธ๋์น ๋ณํฉ ์ปค๋งจ๋์๋ merge ๋ง๊ณ ๋, rebase ๋ผ๋ ๊ฒ์ด ์๋ค. merge๋์ ๋ฐฉ์์ด ์กฐ๊ธ ๋ค๋ฅธ๋ฐ! ์ง๊ธ๋ถํฐ ์ดํด๋ณด์ ๐คฉ
merge ์ rebase
์๋ ์ฌ์ง์ ๋ณด๊ณ ์ฐจ์ด๋ฅผ ์ค๋ช ์ ํด์ฃผ์ ๊ฒ ์ดํดํ๊ธฐ์ ๋งค์ฐ ์ข์๋ค.

merge๋ฅผ ๋ณด๋ฉด, ์ด๋ฏธ์ง์์๋ master ๋ธ๋์น์ feature ๋ธ๋์น๋ฅผ ๋ณํฉํด๋ feature ๋ธ๋์น์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ์๋ ์์น์, ์๋ ๋ชจ์ต ๊ทธ๋๋ก ๋จ์์๋ค.
๊ทธ๋ฐ๋ฐ rebase์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, feature ๋ธ๋์น์ base ์ปค๋ฐ์ด master ์ ์ต์ ์ปค๋ฐ์ด ๋๊ณ , feature ๋ธ๋์น์ ์ปค๋ฐ๋ค์ด master์ ์ต์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๋ฐ์ํ๋(?) ์ปค๋ฐ์ผ๋ก ๋ฐ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ค๋ฅธ ์ฐจ์ด๋, ์์๋ก ํ๋ฉด
master์ feature ๋ฅผ mergeํ ๋๋
$ git checkout master
$ git merge feature
์ด๋ ๊ฒ master ๋ธ๋์น์์ merge๋ฅผ ์คํํ๋๋ฐ,
feature์ base commit์ master๋ก rebaseํ ๋๋
$ git checkout feature
$ git rebase master
์ด๋ฐ ์์ผ๋ก feature ๋ธ๋์น์์ rebase๋ฅผ ์คํํด์ผ ํ๋ค๋ ์ ์ด๋ค.
rebase์ ์ฅ๋จ์
์ฐจ์ด๋ ์๊ฒ ๊ณ ๊ทธ๋ผ rebase๋ฅผ ์ ์ฌ์ฉํ๋์ง ๋ณด๋ฉด,
- ๋จ์ํ ํ์คํ ๋ฆฌ
- ์ฌ๋ฌ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ ๋ธ๋์น๋ฅผ ๊ณต์ ํ ๋ ์ปค๋ฐ์ ํฉ์น๋ ๊ฐ์ฅ ์ง๊ด์ ์ด๊ณ ๊น๋ํ ๋ฐฉ๋ฒ์ด๋ค.
๋จ์ ์ผ๋ก๋
- ์ถฉ๋์ํฉ์์ ๋ค์ ๋ณต์กํ๋ค. ์ปค๋ฐ ์์๋๋ก Rebase๋ฅผ ํ๋๋ฐ, ๊ฐ ์ปค๋ฐ๋ง๋ค ์ถฉ๋ ํด์๋ฅผ ์์๋๋ก ํด์ฃผ์ด์ผ ํ๋ค.
- ํด๋น ์ปค๋ฐ๋ค์ ๋ค๋ฅธ ๊ณณ์ ํธ์ํ ์ ์ด ์๋ค๋ฉด ํ์คํ ๋ฆฌ๋ฅผ ๋ค์ ์ฐ๋ ๊ฒ์ ๋ถ์์ฉ์ด ๋ฐ์ํ๋ค. ๐๐ป ์ด๋ฏธ push ํ๋ค๋ฉด rebase ํ ํธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ฒฐ๋ก
rebase์ merge ๋ฅผ ์ํฉ์ ๋ฐ๋ผ ์ ์ฌ์ฉํด์ผํ๋ค.
- ์ฌ๋ฌ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ ๋ธ๋์น๋ฅผ ๊ณต์ ํ ๋๋
pull&rebase๊ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋๋ฐ ์ข๋ค. - ์๋ฃ๋ ๊ธฐ๋ฅ ๋ธ๋์น๋ฅผ ํฉ์น ๋๋
merge๋ฅผ ์ฌ์ฉํ๋ค. - ๊ธฐ๋ฅ ๋ธ๋์น์ ๋ถ๋ชจ ๋ธ๋์น์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ํ๊ณ ์ถ์ ๋
- ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ๊ณณ์
pushํ ์ ์ด ์์ ๋ ๐๐ปrebase - Git์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ์ฌ๋์ด ์ด ๊ธฐ๋ฅ๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํ ์ผ์ด ์์ ๊ฑฐ๋ผ ํ์ ํ ๋ ๐๐ป
rebase - ์ด์ธ์ ์ํฉ ๐๐ป
merge
- ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ๊ณณ์
7. branch-์ ๋ต
๋ํ์ ์ธ ๋ธ๋์นญ ์ ๋ต์ผ๋ก๋
- Git-flow
- GitHub-flow
๊ฐ ์๋ค.
1. Git-flow
Git-flow๋ ๋ธ๋์น๋ฅผ ํฌ๊ฒ ๋ค ๊ฐ์ง๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ์ ๋ต์ด๋ค.
- Main branch
- Feature branch (Topic branch)
- Release branch
- Hotfix branch
๊ฐ์ฅ ์ค์ฌ์ด ๋๋ ๋ธ๋์น๋ main ๋ธ๋์น์ด๋ฉฐ, ๋จธ์ง๋ feature, release, hotfix ๋ธ๋์น๋ ์ญ์ ํ๋ค.
main branch
master
- ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ง์ ๊ด๋ฆฌํ๋ ๋ธ๋์น
develop
- ๋ค์์ ๋ฐฐํฌํ ๊ฒ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- develop ๋ธ๋์น๋ ํตํฉ ๋ธ๋์น์ ์ญํ ์ ํ๋ฉฐ, ํ์์๋ ์ด ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ๋ค.
Supporting branch
1) feature (topic)
- ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น๋ก,
develop๋ธ๋์น๋ก๋ถํฐ ๋ถ๊ธฐ - feature ๋ธ๋์น๋ ๊ทธ ๊ธฐ๋ฅ์ ๋ค ์์ฑํ ๋๊น์ง ์ ์งํ๊ณ , ์์ฑ ํ
develop์ ๋จธ์ง ํ ์ญ์ - feature ๋ธ๋์น๋ ๋ณดํต ๊ฐ๋ฐ์ ์ ์ฅ์์๋ง ์๋ ๋ธ๋์น์ด๊ณ origin์๋ pushํ์ง ์๋๋ค.
2) release
- ๋ฐฐํฌ๋ฅผ ์ํ ์ต์ข ์ ์ธ ๋ฒ๊ทธ ์์ ๋ฑ์ ๊ฐ๋ฐ์ ์ํํ๋ค
3) hotfix
- ๋ฐฐํฌํ ๋ฒ์ ์์ ๊ธด๊ธํ๊ฒ ์์ ํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ, master ๋ธ๋์น์์ ๋ถ๊ธฐ
2. Github-flow
Git-flow๊ฐ Github์์ ์ฌ์ฉํ๊ธฐ์ ๋ณต์กํด์ ๋์จ ๋ธ๋์นญ ์ ๋ต.
master ๋ธ๋์น์ ๋ํ ์ญํ ๋ง ์ ํํ๋ค๋ฉด ๋๋จธ์ง ๋ธ๋์น๋ค์ ๋ํด์๋ ๊ด์ฌํ์ง ์๋๋ค. ์ฆ, hotfix ๋ธ๋์น๋ feature ๋ธ๋์น๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค. ๋ค๋ง ์ฐ์ ์์๊ฐ ๋ค๋ฅผ ๋ฟ์ด๋ค. ์ด ๋๋ pull request ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ค.
์ด ๋ธ๋์นญ ์ ๋ต์ ์์๋ก ๋ฐฐํฌ๊ฐ ์ผ์ด๋๊ณ , CI์ ๋ฐฐํฌ๊ฐ ์๋ํ๋ผ์๋ ํ๋ก์ ํธ์ ์ ์ฉํ๋ค.
์.. ์์ธํ๊ฑด Git ๋ธ๋์นญ ์ ๋ต - ๊ฐ์ฐ๋ฆฌ์ฝ๋ฉ ์ฌ๊ธฐ์ ๋ณด์ฅ
8. commit์ ์ ์ ๋จ์์ ํ์ , ๋ฉ์์ง
- ์ปค๋ฐ ํ๋๋ ํ๋์ ์์ ๋ง ํ๋ ๊ฒ์ด ์ข๋ค
- ์์ ์ ํ์ํ ํ์ผ๋ค ์ด์ธ์ ํ์ผ์ ๊ฑด๋๋ฆฌ๋ฉด ์ ๋๋ค
- ์ ์ ํ ๋ธ๋์น์ ์ปค๋ฐ์ ํด์ผํ๋ค: ๋น์ฅ ํ์ํ๋ค๊ณ ํ์ฌ ๋ธ๋์น์ ํ๋ ๊ฒ์ ์ข์ง ์๋ค
๋์ ๐
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅ ์ ์ธ์ ๊นํฐ๋ 2์ผ์ฐจ (2)), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@kyy00n/์ ์ธ์-๊นํฐ๋-2์ผ์ฐจ-2์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค