.gitignore ํ์ผ์ ๋ญ๊ฐ์?ammend, squash : ์ปค๋ฐ ๊ฐ๊ณ ๋๊ธฐstash : working tree๋ฅผ ์ ๊น๋ง ์ ์ฅmergerebasemergeMerge 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์
์ ์๊ธด๋ค.
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 ํด๊ฒฐ๋ ๊นํฌ๋ผ์ผ์ผ๋ก ํ๋ฉด ๋๋ฌด ์ฝ๋น ๐
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์ merge ๋ฅผ ์ํฉ์ ๋ฐ๋ผ ์ ์ฌ์ฉํด์ผํ๋ค.
pull & rebase ๊ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๋๋ฐ ์ข๋ค.merge๋ฅผ ์ฌ์ฉํ๋ค.pushํ ์ ์ด ์์ ๋ ๐๐ป rebaserebasemerge๋ํ์ ์ธ ๋ธ๋์นญ ์ ๋ต์ผ๋ก๋
Git-flow๋ ๋ธ๋์น๋ฅผ ํฌ๊ฒ ๋ค ๊ฐ์ง๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ์ ๋ต์ด๋ค.
๊ฐ์ฅ ์ค์ฌ์ด ๋๋ ๋ธ๋์น๋ main ๋ธ๋์น์ด๋ฉฐ, ๋จธ์ง๋ feature, release, hotfix ๋ธ๋์น๋ ์ญ์ ํ๋ค.
master
develop
1) feature (topic)
develop ๋ธ๋์น๋ก๋ถํฐ ๋ถ๊ธฐdevelop์ ๋จธ์ง ํ ์ญ์ 2) release
3) hotfix
Git-flow๊ฐ Github์์ ์ฌ์ฉํ๊ธฐ์ ๋ณต์กํด์ ๋์จ ๋ธ๋์นญ ์ ๋ต.
master ๋ธ๋์น์ ๋ํ ์ญํ ๋ง ์ ํํ๋ค๋ฉด ๋๋จธ์ง ๋ธ๋์น๋ค์ ๋ํด์๋ ๊ด์ฌํ์ง ์๋๋ค. ์ฆ, hotfix ๋ธ๋์น๋ feature ๋ธ๋์น๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค. ๋ค๋ง ์ฐ์ ์์๊ฐ ๋ค๋ฅผ ๋ฟ์ด๋ค. ์ด ๋๋ pull request ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ค.
์ด ๋ธ๋์นญ ์ ๋ต์ ์์๋ก ๋ฐฐํฌ๊ฐ ์ผ์ด๋๊ณ , CI์ ๋ฐฐํฌ๊ฐ ์๋ํ๋ผ์๋ ํ๋ก์ ํธ์ ์ ์ฉํ๋ค.
์.. ์์ธํ๊ฑด Git ๋ธ๋์นญ ์ ๋ต - ๊ฐ์ฐ๋ฆฌ์ฝ๋ฉ ์ฌ๊ธฐ์ ๋ณด์ฅ
๋์ ๐