๐ฅ ์ ์ธ์ ๊นํฐ๋ 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๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค