Git Branch
๋ชจ๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๋ธ๋์น๋ฅผ ์ง์ํ๋ค. ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ณต์ฌํด์ผ ํ๋ ์ผ์ด ์์ฃผ ์๊ธด๋ค. ์ฝ๋๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ๊ณ ๋์ ์๋ ์ฝ๋์๋ ์๊ด์์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ์ ์งํํ ์ ์๋๋ฐ, ์ด๋ ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ด ๋ธ๋์น๋ค.
๋ฒ์ ๊ด๋ฆฌ ์์คํ ์์ ๋ธ๋์น๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๊ณ ์์ค๋ฝ๋ค. ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ์์ค์ฝ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณต์ฌํด์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ผ ํ๊ณ ์์ค์ฝ๋์ ์์ด ๋ง์ผ๋ฉด ๋ธ๋์น๋ฅผ ๋ง๋๋ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์ฌ๋๋ค์ ๋ธ๋์น ๋ชจ๋ธ์ด Git์ ์ต๊ณ ์ ์ฅ์ ์ด๋ผ๊ณ , Git์ด ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ๊ตฌ๋ถ๋๋ ํน์ง์ด๋ผ๊ณ ๋งํ๋ค. ๋น์ต ์ด๋ค ์ ์ด ๊ทธ๋ ๊ฒ ํน๋ณํ ๊ฒ์ผ๊น? Git์ ๋ธ๋์น๋ ๋งค์ฐ ๊ฐ๋ณ๋ค. ์์๊ฐ์ ๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค๊ณ ๋ธ๋์น ์ฌ์ด๋ฅผ ์ด๋ํ ์ ์๋ค. ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๊ณผ๋ ๋ฌ๋ฆฌ Git์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ์์ ํ๊ณ ๋์ค์ Mergeํ๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅํ๋ค. ์ฌ์ง์ด ํ๋ฃจ์ ์์ญ ๋ฒ์ฉํด๋ ๊ด์ฐฎ๋ค. Git ๋ธ๋์น์ ๋ฅ์ํด์ง๋ฉด ๊ฐ๋ฐ ๋ฐฉ์์ด ์์ ํ ๋ฐ๋๊ณ ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ธ๋์น๋ ๋ฌด์์ธ๊ฐ?
Git์ด ๋ธ๋์นํ๋ ๊ณผ์ ์ ์ดํดํ๋ ค๋ฉด ์ฐ์ Git์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๋์ง ์์์ผ ํ๋ค. Git์ ๋ฐ์ดํฐ๋ฅผ Change Set
์ด๋ ๋ณ๊ฒฝ์ฌํญ(Diff)์ผ๋ก ๊ธฐ๋กํ์ง ์๊ณ ์ผ๋ จ์ ์ค๋
์ท์ผ๋ก ๊ธฐ๋กํ๋ค๋ ๊ฒ์ _1์ฅ_์์ ๋ณด์ฌ์คฌ๋ค.
์ปค๋ฐํ๋ฉด Git์ ํ Staging Area์ ์๋ ๋ฐ์ดํฐ์ ์ค๋ ์ท์ ๋ํ ํฌ์ธํฐ, ์ ์๋ ์ปค๋ฐ ๋ฉ์์ง ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ, ์ด์ ์ปค๋ฐ์ ๋ํ ํฌ์ธํฐ ๋ฑ์ ํฌํจํ๋ ์ปค๋ฐ ๊ฐ์ฒด(์ปค๋ฐ Object)๋ฅผ ์ ์ฅํ๋ค. ์ด์ ์ปค๋ฐ ํฌ์ธํฐ๊ฐ ์์ด์ ํ์ฌ ์ปค๋ฐ์ด ๋ฌด์์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋์๋์ง๋ฅผ ์ ์ ์๋ค. ์ต์ด ์ปค๋ฐ์ ์ ์ธํ ๋๋จธ์ง ์ปค๋ฐ์ ์ด์ ์ปค๋ฐ ํฌ์ธํฐ๊ฐ ์ ์ด๋ ํ๋์ฉ ์๊ณ ๋ธ๋์น๋ฅผ ํฉ์น Merge ์ปค๋ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด์ ์ปค๋ฐ ํฌ์ธํฐ๊ฐ ์ฌ๋ฌ ๊ฐ ์๋ค.
์์ ๋ฅผ ๋ณด์. ํ์ผ์ด 3๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๊ฐ ํ๋ ์๊ณ ์ด ํ์ผ์ Staging Area์ ์ ์ฅํ๊ณ ์ปค๋ฐํด ๋ณด์. ํ์ผ์ Stageํ๋ฉด Git ์ ์ฅ์์ ํ์ผ์ ์ ์ฅํ๊ณ (Git์ ์ด๊ฒ์ Blob์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค) Staging Area์ ํด๋น ํ์ผ์ ์ฒดํฌ์ฌ์ ์ ์ฅํ๋ค(_1์ฅ_์์ ์ดํด๋ณธ SHA-1์ ์ฌ์ฉํ๋ค).
$ git add README test.rb LICENSE
$ git commit -m 'initial commit of my project'
'git commit'์ผ๋ก ์ปค๋ฐํ๋ฉด ๋จผ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๊ฐ ํ์ ๋๋ ํ ๋ฆฌ์ ํธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ฒดํฌ์ฌ๊ณผ ํจ๊ป ์ ์ฅ์์ ์ ์ฅํ๋ค. ๊ทธ๋ค์์ ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ฉํ๋ฐ์ดํฐ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ์ ๋ณด๋ฅผ ์ปค๋ฐ ๊ฐ์ฒด์ ๋ฃ์ด ์ ์ฅํ๋ค. ๊ทธ๋์ ํ์ํ๋ฉด ์ธ์ ๋ ์ง ์ค๋ ์ท์ ๋ค์ ๋ง๋ค ์ ์๋ค.
์ด ์์ ์ ๋ง์น๊ณ ๋๋ฉด Git ์ ์ฅ์์๋ ๋ค์ฏ ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ์๊ธด๋ค. ๊ฐ ํ์ผ์ ๋ํ Blob ์ธ ๊ฐ, ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ค์ด ์๋ ํธ๋ฆฌ ๊ฐ์ฒด ํ๋, ๋ฉํ๋ฐ์ดํฐ์ ๋ฃจํธ ํธ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ๋ด๊ธด ์ปค๋ฐ ๊ฐ์ฒด ํ๋์ด๋ค. ์ด๊ฒ์ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ฆฌ๋ฉด ๊ทธ๋ฆผ 3-1๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ 3-1. ์ ์ฅ์์ ์ปค๋ฐ ๋ฐ์ดํฐ

๋ค์ ํ์ผ์ ์์ ํ๊ณ ์ปค๋ฐํ๋ฉด ์ด์ ์ปค๋ฐ์ด ๋ฌด์์ธ์ง๋ ์ ์ฅํ๋ค. ์ปค๋ฐ์ ๋ ๋ฒ ๋ ํ๋ฉด ๊ทธ๋ฆผ 3-2๊ณผ ๊ฐ์ด ์ ์ฅ๋๋ค.
๊ทธ๋ฆผ 3-2. Git ์ปค๋ฐ์ ๊ฐ์ฒด ๋ฐ์ดํฐ

Git์ ๋ธ๋์น๋ ์ปค๋ฐ ์ฌ์ด๋ฅผ ๊ฐ๋ณ๊ฒ ์ด๋ํ ์ ์๋ ์ด๋ค ํฌ์ธํฐ ๊ฐ์ ๊ฒ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Git์ master
๋ธ๋์น๋ฅผ ๋ง๋ ๋ค. ์ต์ด๋ก ์ปค๋ฐํ๋ฉด Git์ master๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ ์๋์ผ๋ก ๊ฐ์ฅ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
๊ทธ๋ฆผ 3-3. ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น

๋ธ๋์น๋ฅผ ํ๋ ์๋ก ๋ง๋ค๋ฉด ์ด๋จ๊น? ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด์ ๋์. ๋ค์๊ณผ ๊ฐ์ด git branch
๋ช
๋ น์ผ๋ก testing ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค.
$ git branch testing
์๋ก ๋ง๋ ๋ธ๋์น๋ ์ง๊ธ ์์ ํ๊ณ ์๋ ๋ง์ง๋ง ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค(๊ทธ๋ฆผ 3-4).
๊ทธ๋ฆผ 3-4. ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๋ธ๋์น

์ง๊ธ ์์
์ค์ธ ๋ธ๋์น๊ฐ ๋ฌด์์ธ์ง Git์ ์ด๋ป๊ฒ ํ์
ํ ๊น? ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
๊ณผ๋ ๋ฌ๋ฆฌ Git์ 'HEAD'๋ผ๋ ํน์ํ ํฌ์ธํฐ๊ฐ ์๋ค. ์ด ํฌ์ธํฐ๋ ์ง๊ธ ์์
ํ๋ ๋ก์ปฌ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค์์ง๋ง, Git์ ์์ง master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค. git branch
๋ช
๋ น์ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ธฐ๋ง ํ๊ณ ๋ธ๋์น๋ฅผ ์ฎ๊ธฐ์ง ์๋๋ค.
๊ทธ๋ฆผ 3-5. HEAD๋ ํ์ฌ ์์ ์ค์ธ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํด

git checkout
๋ช
๋ น์ผ๋ก ์๋ก ๋ง๋ ๋ธ๋์น๋ก ์ด๋ํ ์ ์๋ค. testing ๋ธ๋์น๋ก ์ด๋ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ค:
$ git checkout testing
์ด๋ ๊ฒ ํ๋ฉด HEAD๋ testing ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๊ทธ๋ฆผ 3-6. HEAD๋ ์ฎ๊ฒจ๊ฐ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค

์, ์ด์ ํต์ฌ์ด ๋ณด์ผ ๊ฑฐ๋ค! ์ปค๋ฐ์ ์๋ก ํ ๋ฒ ํด๋ณด๋ฉด:
$ vim test.rb
$ git commit -a -m 'made a change'
๊ฒฐ๊ณผ๋ ๊ทธ๋ฆผ 3-7๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ 3-7. HEAD๊ฐ ๊ฐ๋ฆฌํค๋ testing ๋ธ๋์น๊ฐ ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค

์ด ๋ถ๋ถ์ด ํฅ๋ฏธ๋กญ๋ค. ์๋ก ์ปค๋ฐํด์ testing ๋ธ๋์น๋ ์์ผ๋ก ์ด๋ํ๋ค. ํ์ง๋ง, master
๋ธ๋์น๋ ์ฌ์ ํ ์ด์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํจ๋ค. master
๋ธ๋์น๋ก ๋๋์๊ฐ๋ฉด:
$ git checkout master
๊ฒฐ๊ณผ๋ ๊ทธ๋ฆผ 3-8๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ 3-8. HEAD๊ฐ Checkoutํ ๋ธ๋์น๋ก ์ด๋ํจ

๋ฐฉ๊ธ ์คํํ ๋ช ๋ น์ด ํ ์ผ์ ๋ ๊ฐ์ง๋ค. master ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ HEAD๊ฐ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ ์ํน ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ ๊ทธ ์์ ์ผ๋ก ๋๋๋ ค ๋์๋ค. ์์ผ๋ก ์ปค๋ฐ์ ํ๋ฉด ๋ค๋ฅธ ๋ธ๋์น์ ์์ ๋ค๊ณผ ๋ณ๊ฐ๋ก ์งํ๋๊ธฐ ๋๋ฌธ์ testing ๋ธ๋์น์์ ์์๋ก ์์ ํ๊ณ ์๋ master ๋ธ๋์น๋ก ๋์์์ ํ๋ ์ผ์ ๊ณ์ํ ์ ์๋ค.
ํ์ผ์ ์์ ํ๊ณ ๋ค์ ์ปค๋ฐ์ ํด๋ณด์:
$ vim test.rb
$ git commit -a -m 'made other changes'
ํ๋ก์ ํธ ํ์คํ ๋ฆฌ๋ ๋ถ๋ฆฌ๋ผ ์งํํ๋ค(๊ทธ๋ฆผ 3-9). ์ฐ๋ฆฌ๋ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด ๊ทธ ๋ธ๋์น์์ ์ผ์ ์ข ํ๊ณ , ๋ค์ ์๋ ๋ธ๋์น๋ก ๋๋์์์ ๋ค๋ฅธ ์ผ์ ํ๋ค. ๋ ์์
๋ด์ฉ์ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ ๋ธ๋์น์ ์กด์ฌํ๋ค. ์ปค๋ฐ ์ฌ์ด๋ฅผ ์์ ๋กญ๊ฒ ์ด๋ํ๋ค๊ฐ ๋๊ฐ ๋๋ฉด ๋ ๋ธ๋์น๋ฅผ Mergeํ๋ค. ๊ฐ๋จํ branch
์ checkout
๋ช
๋ น์ ์จ์ ๋ง์ด๋ค.
๊ทธ๋ฆผ 3-9. ๋ธ๋์น ํ์คํ ๋ฆฌ๊ฐ ์๋ก ๋ ๋ฆฝ์ ์

์ค์ ๋ก Git์ ๋ธ๋์น๋ ์ด๋ค ํ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ 40๊ธ์์ SHA-1 ์ฒดํฌ์ฌ ํ์ผ์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ ๋ง๋ค๊ธฐ๋ ์ฝ๊ณ ์ง์ฐ๊ธฐ๋ ์ฝ๋ค. ์๋ก ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋๋ ๊ฒ์ 41๋ฐ์ดํธ ํฌ๊ธฐ์ ํ์ผ์(40์์ ์ค ๋ฐ๊ฟ ๋ฌธ์) ํ๋ ๋ง๋๋ ๊ฒ์ ๋ถ๊ณผํ๋ค.
๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฉด ํ๋ก์ ํธ๋ฅผ ํต์งธ๋ก ๋ณต์ฌํด์ผ ํ๋ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ์ Git์ ์ฐจ์ด๋ ๊ทน๋ช ํ๋ค. ํต์งธ๋ก ๋ณต์ฌํ๋ ์์ ์ ํ๋ก์ ํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง ์์ญ ์ด์์ ์์ญ ๋ถ๊น์ง ๊ฑธ๋ฆฐ๋ค. ๊ทธ์ ๋นํด Git์ ์์๊ฐ์ด๋ค. ๊ฒ๋ค๊ฐ ์ปค๋ฐ์ ํ ๋๋ง๋ค ์ด์ ์ปค๋ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ Mergeํ ๋ ์ด๋์๋ถํฐ(Merge Base) ํฉ์ณ์ผ ํ๋์ง ์๋ค. ์ด๋ฐ ํน์ง์ ๊ฐ๋ฐ์๋ค์ด ์์๋ก ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๊ฒ ํ๋ค.
์ด์ ์ ๊ทธ๋ ๊ฒ ๋ธ๋์น๋ฅผ ์์๋ก ๋ง๋ค๊ณ ์ฌ์ฉํด์ผ ํ๋์ง ์์๋ณด์.
๋ธ๋์น์ Merge์ ๊ธฐ์ด
์ค์ ๊ฐ๋ฐ๊ณผ์ ์์ ๊ฒช์ ๋งํ ์์ ๋ฅผ ํ๋ ์ดํด๋ณด์. ๋ธ๋์น์ Merge๋ ๋ณดํต ์ด๋ฐ ์์ผ๋ก ์งํํ๋ค:
์์ ์ค์ธ ์น์ฌ์ดํธ๊ฐ ์๋ค.
์๋ก์ด ์ด์๋ฅผ ์ฒ๋ฆฌํ ์ Branch๋ฅผ ํ๋ ์์ฑ.
์๋ก ๋ง๋ Branch์์ ์์ ์ค.
์ด๋ ์ค์ํ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๊ทธ๊ฒ์ ํด๊ฒฐํ๋ Hotfix๋ฅผ ๋จผ์ ๋ง๋ค์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์๋ค:
์๋ก์ด ์ด์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ด์ ์ ์ด์(Production) ๋ธ๋์น๋ก ์ด๋.
Hotfix ๋ธ๋์น๋ฅผ ์๋ก ํ๋ ์์ฑ.
์์ ํ Hotfix ํ ์คํธ๋ฅผ ๋ง์น๊ณ ์ด์ ๋ธ๋์น๋ก Merge.
๋ค์ ์์ ํ๋ ๋ธ๋์น๋ก ์ฎ๊ฒจ๊ฐ์ ํ๋ ์ผ ์งํ.
๋ธ๋์น์ ๊ธฐ์ด
๋จผ์ ์ปค๋ฐ์ ๋ช ๋ฒ ํ๋ค๊ณ ๊ฐ์ ํ์.
๊ทธ๋ฆผ 3-10. ํ์ฌ ์ปค๋ฐ ํ์คํ ๋ฆฌ

์ด์ ๊ด๋ฆฌ ์์คํ
์ ๋ฑ๋ก๋ 53๋ฒ ์ด์๋ฅผ ์ฒ๋ฆฌํ๋ค๊ณ ํ๋ฉด ์ด ์ด์์ ์ง์คํ ์ ์๋ ๋ธ๋์น๋ฅผ ์๋ก ํ๋ ๋ง๋ ๋ค. Git์ ์ด๋ค ์ด์ ๊ด๋ฆฌ ์์คํ
์๋ ์ข
์๋ผ ์์ง ์๋ค. ๋ธ๋์น๋ฅผ ๋ง๋ค๋ฉด์ Checkout๊น์ง ํ ๋ฒ์ ํ๋ ค๋ฉด git checkout
๋ช
๋ น์ -b
๋ผ๋ ์ต์
์ ์ค๋ค.
$ git checkout -b iss53
Switched to a new branch 'iss53'
์ ๋ช ๋ น์ ์๋ ๋ช ๋ น์ ์ค์ฌ๋์ ๊ฒ์ด๋ค:
$ git branch iss53
$ git checkout iss53
๊ทธ๋ฆผ 3-11์ ์ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ธ๋ค.
๊ทธ๋ฆผ 3-11. ๋ธ๋์น ํฌ์ธํฐ๋ฅผ ์๋ก ๋ง๋ฆ

iss53 ๋ธ๋์น๋ฅผ Checkoutํ๊ธฐ ๋๋ฌธ์(์ฆ, HEAD๋ iss53 ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค) ๋ญ๊ฐ ์ผ์ ํ๊ณ ์ปค๋ฐํ๋ฉด iss53 ๋ธ๋์น๊ฐ ์์ผ๋ก ์งํํ๋ค:
$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'
๊ทธ๋ฆผ 3-12. ์งํ ์ค์ธ iss53 ๋ธ๋์น

๋ค๋ฅธ ์ํฉ์ ๊ฐ์ ํด๋ณด์. ๋ง๋๋ ์ฌ์ดํธ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ์ฆ์ ๊ณ ์ณ์ผ ํ๋ค. ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ Hotfix์ 'iss53'์ด ์์ด๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด 'iss53'์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด๋๊ณ ์๋ ์ด์ ํ๊ฒฝ์ ์์ค๋ก ๋ณต๊ตฌํด์ผ ํ๋ค. Git์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ ธ๋ ฅ์ ๋ค์ผ ํ์ ์์ด ๊ทธ๋ฅ master ๋ธ๋์น๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค.
๊ทธ๋ ์ง๋ง, ๋ธ๋์น๋ฅผ ์ด๋ํ๋ ค๋ฉด ํด์ผ ํ ์ผ์ด ์๋ค. ์์ง ์ปค๋ฐํ์ง ์์ ํ์ผ์ด Checkoutํ ๋ธ๋์น์ ์ถฉ๋ ๋๋ฉด ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ ๋์๋ ์ํน ๋๋ ํ ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์(์ฃผ๋ก, Stash์ด๋ ์ปค๋ฐ Amend์ ๋ํด) ๋์ค์ ๋ค๋ฃฐ ๊ฒ์ด๋ค. ์ง๊ธ์ ์์ ํ๋ ๊ฒ์ ๋ชจ๋ ์ปค๋ฐํ๊ณ master ๋ธ๋์น๋ก ์ฎ๊ธด๋ค:
$ git checkout master
Switched to branch 'master'
์ด๋ ์ํน ๋๋ ํ ๋ฆฌ๋ 53๋ฒ ์ด์๋ฅผ ์์ํ๊ธฐ ์ด์ ๋ชจ์ต์ผ๋ก ๋๋๋ ค์ง๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๋ฌธ์ ์ ์ง์คํ ์ ์๋ ํ๊ฒฝ์ด ๋ง๋ค์ด์ง๋ค. Git์ ์๋์ผ๋ก ์ํน ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ค์ ์ถ๊ฐํ๊ณ , ์ง์ฐ๊ณ , ์์ ํด์ Checkoutํ ๋ธ๋์น์ ์ค๋ ์ท์ผ๋ก ๋๋๋ ค ๋๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํ๋ค.
hotfix๋ผ๋ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์๋ก์ด ์ด์๋ฅผ ํด๊ฒฐํ ๋๊น์ง ์ฌ์ฉํ๋ค:
$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
[hotfix 3a0874c] fixed the broken email address
1 files changed, 1 deletion(-)
๊ทธ๋ฆผ 3-13. master ๋ธ๋์น์์ ๊ฐ๋ผ์ ธ ๋์จ hotfix ๋ธ๋์น

์ด์ ํ๊ฒฝ์ ์ ์ฉํ๋ ค๋ฉด ๋ฌธ์ ๋ฅผ ์ ๋๋ก ๊ณ ์ณค๋์ง ํ
์คํธํ๊ณ master ๋ธ๋์น์ ํฉ์ณ์ผ ํ๋ค. git merge
๋ช
๋ น์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ๋ค:
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
README | 1 -
1 file changed, 1 deletion(-)
Merge ๋ฉ์์ง์์ 'Fast-forward'๊ฐ ๋ณด์ด๋๊ฐ? Mergeํ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ปค๋ฐ์ด ํ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฒ๋ณด๋ค '์์ผ๋ก ์งํํ' ์ปค๋ฐ์ด๊ธฐ ๋๋ฌธ์ master ๋ธ๋์น ํฌ์ธํฐ๋ ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋ํ๋ค. ์ด๋ฐ Merge ๋ฐฉ์์ 'Fast forward'๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ค์ ๋งํด์ A ๋ธ๋์น์์ ๋ค๋ฅธ B ๋ธ๋์น๋ฅผ Mergeํ ๋ B๊ฐ A ์ดํ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด ๊ทธ์ A๊ฐ B์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ ๋ฟ์ด๋ค.
์ด์ hotfix๋ master ๋ธ๋์น์ ํฌํจ๋๊ณ ์ด์ํ๊ฒฝ์ ์ ์ฉํ ์ ์๋ค(๊ทธ๋ฆผ 3-14).
๊ทธ๋ฆผ 3-14. Merge ํ hotfix ๋ธ๋์น์ ๊ฐ์ ๊ฒ์ ๊ฐ๋ฆฌํค๋ master ๋ธ๋์น

๋ฌธ์ ๋ฅผ ๊ธํ ํด๊ฒฐํ๊ณ master ๋ธ๋์น์ ์ ์ฉํ๊ณ ๋๋ฉด ๋ค์ ์ผํ๋ ๋ธ๋์น๋ก ๋์๊ฐ์ผ ํ๋ค. ํ์ง๋ง, ๊ทธ์ ์ ํ์์๋ hotfix ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ค. git branch
๋ช
๋ น์ -d
์ต์
์ ์ฃผ๊ณ ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ค.
$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
์ ์ด์ ์ด์ 53๋ฒ์ ์ฒ๋ฆฌํ๋ ํ๊ฒฝ์ผ๋ก ๋๋์๊ฐ์ ํ๋ ์ผ์ ๊ณ์ ํ์(๊ทธ๋ฆผ 3-15):
$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+)
๊ทธ๋ฆผ 3-15. master์ ๋ณ๊ฐ๋ก ์งํํ๋ iss53 ๋ธ๋์น

์์์ ์์
ํ hotfix๊ฐ iss53 ๋ธ๋์น์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค. git merge master
๋ช
๋ น์ผ๋ก master ๋ธ๋์น๋ฅผ iss53 ๋ธ๋์น์ Mergeํ๋ฉด iss53 ๋ธ๋์น์ hotfix๊ฐ ์ ์ฉ๋๋ค. ์๋๋ฉด iss53 ๋ธ๋์น๊ฐ master์ Mergeํ ์ ์๋ ์์ค์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ Mergeํ๋ฉด hotfix์ iss53๊ฐ ํฉ์ณ์ง๋ค.
Merge์ ๊ธฐ์ด
53๋ฒ ์ด์๋ฅผ ๋ค ๊ตฌํํ๊ณ master ๋ธ๋์น์ Mergeํ๋ ๊ณผ์ ์ ์ดํด๋ณด์. master ๋ธ๋์น์ Mergeํ๋ ๊ฒ์ ์์ ์ดํด๋ณธ hotfix ๋ธ๋์น๋ฅผ Mergeํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค. git merge
๋ช
๋ น์ผ๋ก ํฉ์น ๋ธ๋์น์์ ํฉ์ณ์ง ๋ธ๋์น๋ฅผ Mergeํ๋ฉด ๋๋ค:
$ git checkout master
$ git merge iss53
Auto-merging README
Merge made by the 'recursive' strategy.
README | 1 +
1 file changed, 1 insertion(+)
hotfix๋ฅผ Mergeํ์ ๋์ ๋ฉ์์ง๊ฐ ๋ค๋ฅด๋ค. ํ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ด Mergeํ ๋ธ๋์น์ ์กฐ์์ด ์๋๋ฏ๋ก Git์ 'Fast-forward'๋ก Mergeํ์ง ์๋๋ค. ์ด๋ฌ๋ฉด Git์ ๊ฐ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ ๋ ๊ฐ์ ๊ณตํต ์กฐ์ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ 3-way Merge๋ฅผ ํ๋ค. ๊ทธ๋ฆผ 3-16์ ์ด Merge์์ ์ฌ์ฉํ๋ ์ปค๋ฐ ์ธ ๊ฐ๊ฐ ํ์๋๋ค.
๊ทธ๋ฆผ 3-16. Git์ Merge์ ํ์ํ ๊ณตํต ์ปค๋ฐ์ ์๋์ผ๋ก ์ฐพ์

๋จ์ํ ๋ธ๋์น ํฌ์ธํฐ๋ฅผ ์ต์ ์ปค๋ฐ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ ์๋๋ผ 3-way Merge์ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋์ ์ปค๋ฐ์ผ๋ก ๋ง๋ค๊ณ ๋์ ํด๋น ๋ธ๋์น๊ฐ ๊ทธ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋๋ก ์ด๋์ํจ๋ค(๊ทธ๋ฆผ 3-17). ๊ทธ๋์ ์ด๋ฐ ์ปค๋ฐ์ ๋ถ๋ชจ๊ฐ ์ฌ๋ฌ ๊ฐ๊ณ Merge ์ปค๋ฐ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Git์ Mergeํ๋๋ฐ ํ์ํ ์ต์ ์ ๊ณตํต ์กฐ์์ ์๋์ผ๋ก ์ฐพ๋๋ค. ์ด๋ฐ ๊ธฐ๋ฅ๋ Git์ด ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ๋ณด๋ค ๋์ ์ ์ด๋ค. CVS๋ Subversion ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ณตํต ์กฐ์์ ์ฐพ์์ Mergeํด์ผ ํ๋ค. Git์ ๋ค๋ฅธ ์์คํ ๋ณด๋ค Merge๊ฐ ๋๋จํ ์ฝ๋ค.
๊ทธ๋ฆผ 3-17. Git์ Mergeํ ๋ Merge์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด ์๋ ์ปค๋ฐ๋ฅผ ํ๋ ๋ง๋ ๋ค.

iss53 ๋ธ๋์น๋ฅผ master์ Mergeํ๊ณ ๋๋ฉด ๋๋ iss53 ๋ธ๋์น๊ฐ ํ์ ์๋ค. ๋ค์ ๋ช ๋ น์ผ๋ก ๋ธ๋์น๋ฅผ ์ญ์ ํ๊ณ ์ด์์ ์ํ๋ฅผ ์ฒ๋ฆฌ ์๋ฃ๋ก ํ์ํ๋ค:
$ git branch -d iss53
์ถฉ๋์ ๊ธฐ์ด
๊ฐ๋์ฉ 3-way Merge๊ฐ ์คํจํ ๋๋ ์๋ค. Mergeํ๋ ๋ ๋ธ๋์น์์ ๊ฐ์ ํ์ผ์ ํ ๋ถ๋ถ์ ๋์์ ์์ ํ๊ณ Mergeํ๋ฉด Git์ ํด๋น ๋ถ๋ถ์ Mergeํ์ง ๋ชปํ๋ค. ์๋ฅผ ๋ค์ด, 53๋ฒ ์ด์์ hotfix๊ฐ ๊ฐ์ ๋ถ๋ถ์ ์์ ํ๋ค๋ฉด Git์ Mergeํ์ง ๋ชปํ๊ณ ๋ค์๊ณผ ๊ฐ์ ์ถฉ๋(Conflict) ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค:
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Git์ ์๋์ผ๋ก Mergeํ์ง ๋ชปํด์ ์ ์ปค๋ฐ์ด ์๊ธฐ์ง ์๋๋ค. ๋ณ๊ฒฝ์ฌํญ์ ์ถฉ๋์ ๊ฐ๋ฐ์๊ฐ ํด๊ฒฐํ์ง ์๋ ํ Merge ๊ณผ์ ์ ์งํํ ์ ์๋ค. Merge ์ถฉ๋์ด ์ผ์ด๋ฌ์ ๋ Git์ด ์ด๋ค ํ์ผ์ Mergeํ ์ ์์๋์ง ์ดํด๋ณด๋ ค๋ฉด git status
๋ช
๋ น์ ์ด์ฉํ๋ค:
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
์ถฉ๋์ด ์ผ์ด๋ ํ์ผ์ unmerged ์ํ๋ก ํ์๋๋ค. Git์ ์ถฉ๋์ด ๋ ๋ถ๋ถ์ ํ์ค ํ์์ ๋ฐ๋ผ ํ์ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ์๋ ํด๋น ๋ถ๋ถ์ ์๋์ผ๋ก ํด๊ฒฐํ๋ค. ์ถฉ๋ ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋๋ค.
<<<<<<< HEAD
<div id='footer'>contact : [email protected]</div>
=======
<div id='footer'>
please contact us at [email protected]
</div>
>>>>>>> iss53
=======
์์ชฝ์ ๋ด์ฉ์ HEAD ๋ฒ์ (merge ๋ช
๋ น์ ์คํํ ๋ ์์
ํ๋ master ๋ธ๋์น)์ ๋ด์ฉ์ด๊ณ ์๋์ชฝ์ iss53 ๋ธ๋์น์ ๋ด์ฉ์ด๋ค. ์ถฉ๋์ ํด๊ฒฐํ๋ ค๋ฉด ์์ชฝ์ด๋ ์๋์ชฝ ๋ด์ฉ ์ค์์ ๊ณ ๋ฅด๊ฑฐ๋ ์๋ก ์์ฑํ์ฌ Mergeํ๋ค. ๋ค์์ ์์ ์๋ก ์์ฑํ์ฌ ์ถฉ๋์ ํด๊ฒฐํ๋ ์์ ๋ค:
<div id='footer'>
please contact us at [email protected]
</div>
์ถฉ๋ํ ์์ชฝ์์ ์กฐ๊ธ์ฉ ๊ฐ์ ธ์์ ์๋ก ์์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ <<<<<<<
, =======
, >>>>>>>
๊ฐ ํฌํจ๋ ํ์ ์ญ์ ํ์๋ค. ์ด๋ ๊ฒ ์ถฉ๋ํ ๋ถ๋ถ์ ํด๊ฒฐํ๊ณ git add
๋ช
๋ น์ผ๋ก ๋ค์ Git์ ์ ์ฅํ๋ค. ์ถฉ๋์ ์ฝ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค๋ฅธ Merge ๋๊ตฌ๋ ์ด์ฉํ ์ ์๋ค. git mergetool
๋ช
๋ น์ผ๋ก ์คํํ๋ค:
$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html
Normal merge conflict for 'index.html':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
Mac์์๋ opendiff
๊ฐ ์คํ๋๋ค. ๊ธฐ๋ณธ ๋๊ตฌ ๋ง๊ณ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ Merge ๋๊ตฌ๋ ์๋๋ฐ, "โฆ one of the following tools:" ๋ถ๋ถ์ ๋ณด์ฌ์ค๋ค. ์ฌ๊ธฐ์ ํ์๋ ๋๊ตฌ ์ค ํ๋๋ฅผ ๊ณ ๋ฅผ ์ ์๋ค. Merge ๋๊ตฌ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ _7์ฅ_์์ ๋ค๋ฃฌ๋ค.
Merge ๋๊ตฌ๋ฅผ ์ข
๋ฃํ๋ฉด Git์ ์ Mergeํ๋์ง ๋ฌผ์ด๋ณธ๋ค. ์ ๋ง์ณค๋ค๊ณ ์
๋ ฅํ๋ฉด ์๋์ผ๋ก git add
๊ฐ ์ํ๋๊ณ ํด๋น ํ์ผ์ด Staging Area์ ์ ์ฅ๋๋ค.
git status
๋ช
๋ น์ผ๋ก ์ถฉ๋์ด ํด๊ฒฐ๋ ์ํ์ธ์ง ๋ค์ ํ๋ฒ ํ์ธํด๋ณผ ์ ์๋ค.
$ git status
On branch master
Changes to be committed:
(use 'git reset HEAD <file>...' to unstage)
modified: index.html
์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋์ ํด๋น ํ์ผ์ด Staging Area์ ์ ์ฅ๋๋์ง ํ์ธํ์ผ๋ฉด git commit
๋ช
๋ น์ผ๋ก Merge ํ ๊ฒ์ ์ปค๋ฐํ๋ค. ์ถฉ๋์ ํด๊ฒฐํ๊ณ Mergeํ ๋์๋ ์ปค๋ฐ ๋ฉ์์ง๊ฐ ์๋์ ๊ฐ๋ค.
Merge branch 'iss53'
Conflicts:
index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
#
์ด๋ป๊ฒ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ์ข ๋ ํ์ธํด์ผ ํ๋ ๋ถ๋ถ์ ๋ฌด์์ ์ด๋ป๊ฒ ํ๋์ง ์์ธํ๊ฒ ๊ธฐ๋กํ๋ค. ์์ธํ ๊ธฐ๋ก์ ๋์ค์ ์ด Merge ์ปค๋ฐ์ ์ดํดํ๋๋ฐ ๋์์ ์ค ๊ฒ์ด๋ค.
๋ธ๋์น ๊ด๋ฆฌ
์ง๊ธ๊น์ง ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ , Mergeํ๊ณ , ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ดํด๋ดค๋ค. ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ค๋ฅธ ๋ช ๋ น๋ ์ดํด๋ณด์.
git branch
๋ช
๋ น์ ๋จ์ํ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ญ์ ํด ์ฃผ๊ธฐ๋ง ํ๋ ๊ฒ์ด ์๋๋ค. ์๋ฌด๋ฐ ์ต์
์์ด ์คํํ๋ฉด ๋ธ๋์น์ ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค:
$ git branch
iss53
* master
testing
*
๊ธฐํธ๊ฐ ๋ถ์ด ์๋ master๋ธ๋์น๋ ํ์ฌ Checkoutํด์ ์์
ํ๋ ๋ธ๋์น๋ฅผ ๋ํ๋ธ๋ค. ์ฆ, ์ง๊ธ ์์ ํ ๋ด์ฉ์ ์ปค๋ฐํ๋ฉด master ๋ธ๋์น์ ์ปค๋ฐ๋๊ณ ํฌ์ธํฐ๊ฐ ์์ผ๋ก ํ ๋จ๊ณ ๋์๊ฐ๋ค. git branch -v
๋ช
๋ น์ ์คํํ๋ฉด ๋ธ๋์น๋ง๋ค ๋ง์ง๋ง ์ปค๋ฐ ๋ฉ์์ง๋ ํจ๊ป ๋ณด์ฌ์ค๋ค:
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readmes
๊ฐ ๋ธ๋์น๊ฐ ์ง๊ธ ์ด๋ค ์ํ์ธ์ง ํ์ธํ๊ธฐ์ ์ข์ ์ต์
๋ ์๋ค. ํ์ฌ Checkoutํ ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก Merge๋ ๋ธ๋์น์ธ์ง ๊ทธ๋ ์ง ์์์ง ํํฐ๋งํด ๋ณผ ์ ์๋ค. --merged
์ --no-merged
์ต์
์ ์ฌ์ฉํ์ฌ ํด๋น ๋ชฉ๋ก์ ๋ณผ ์ ์๋ค. git branch --merged
๋ช
๋ น์ผ๋ก ์ด๋ฏธ Mergeํ ๋ธ๋์น ๋ชฉ๋ก์ ํ์ธํ๋ค:
$ git branch --merged
iss53
* master
iss53 ๋ธ๋์น๋ ์์์ ์ด๋ฏธ Mergeํ๊ธฐ ๋๋ฌธ์ ๋ชฉ๋ก์ ๋ํ๋๋ค. *
๊ธฐํธ๊ฐ ๋ถ์ด ์์ง ์์ ๋ธ๋์น๋ git branch -d
๋ช
๋ น์ผ๋ก ์ญ์ ํด๋ ๋๋ ๋ธ๋์น๋ค. ์ด๋ฏธ ๋ค๋ฅธ ๋ธ๋์น์ Merge ํ๊ธฐ ๋๋ฌธ์ ์ญ์ ํด๋ ์ ๋ณด๋ฅผ ์์ง ์๋๋ค.
๋ฐ๋๋ก ํ์ฌ Checkoutํ ๋ธ๋์น์ Mergeํ์ง ์์ ๋ธ๋์น๋ฅผ ์ดํด๋ณด๋ ค๋ฉด git branch --no-merged
๋ช
๋ น์ ์ฌ์ฉํ๋ค:
$ git branch --no-merged
testing
์์๋ ์์๋ ๋ค๋ฅธ ๋ธ๋์น๊ฐ ๋ณด์ธ๋ค. ์์ง Mergeํ์ง ์์ ์ปค๋ฐ์ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ git branch -d
๋ช
๋ น์ผ๋ก ์ญ์ ๋์ง ์๋๋ค:
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
Mergeํ์ง ์์ ๋ธ๋์น๋ฅผ ๊ฐ์ ๋ก ์ญ์ ํ๋ ค๋ฉด -D
์ต์
์ผ๋ก ์ญ์ ํ๋ค.
๋ธ๋์น Workflow
๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ Mergeํ๋ ๊ฒ์ ์ด๋์ ์จ๋จน์ด์ผ ํ ๊น? ์ด ์ ์์๋ Git์ ๋ธ๋์น๊ฐ ์ ์ฉํ ๋ช ๊ฐ์ง Workflow๋ฅผ ์ดํด๋ณธ๋ค. ์ฌ๊ธฐ์ ์ค๋ช ํ๋ Workflow๋ฅผ ๊ฐ๋ฐ์ ์ ์ฉํ๋ฉด ๋์์ด ๋ ๊ฒ์ด๋ค.
Long-Running ๋ธ๋์น
Git์ ๊ผผ๊ผผํ๊ฒ 3-way Merge๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ์ ํ ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ๋ธ๋์น์ ์ฌ๋ฌ ๋ฒ Mergeํ๋ ๊ฒ๋ ์ด๋ ต์ง ์๋ค. ๊ทธ๋์ ๊ฐ๋ฐ ๊ณผ์ ์์ ํ์ํ ์ฉ๋์ ๋ฐ๋ผ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๋๊ณ ๊ณ์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ธฐ์ ์ผ๋ก ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ๋ธ๋์น๋ก Mergeํ๋ค:
์ด๋ฐ ์ ๊ทผ๋ฒ์ ๋ฐ๋ผ์ Git ๊ฐ๋ฐ์๊ฐ ๋ง์ด ์ ํธํ๋ Workflow๊ฐ ํ๋ ์๋ค. ๋ฐฐํฌํ๊ฑฐ๋ ๋ฐฐํฌํ ์ฝ๋๋ง master ๋ธ๋์น์ Mergeํด์ ์์ ๋ฒ์ ์ ์ฝ๋๋ง master ๋ธ๋์น์ ๋๋ค. ๊ฐ๋ฐ์ ์งํํ๊ณ ์์ ํํ๋ ๋ธ๋์น๋ develop์ด๋ next๋ผ๋ ์ด๋ฆ์ผ๋ก ์ถ๊ฐ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ค. ์ด ๋ธ๋์น๋ ์ธ์ ๊ฐ ์์ ์ํ๊ฐ ๋๊ฒ ์ง๋ง, ํญ์ ์์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒ์ด ์๋๋ค. ํ ์คํธ๋ฅผ ๊ฑฐ์ณ์ ์์ ์ ์ด๋ผ๊ณ ํ๋จ๋๋ฉด master ๋ธ๋์น์ Mergeํ๋ค. ํ ํฝ ๋ธ๋์น(์์ ์ดํด๋ณธ iss53 ๋ธ๋์น ๊ฐ์ ์งง์ ํธํก ๋ธ๋์น)์๋ ์ ์ฉํ ์ ์๋๋ฐ, ํด๋น ํ ํฝ์ ์ฒ๋ฆฌํ๊ณ ํ ์คํธํด์ ๋ฒ๊ทธ๋ ์๊ณ ์์ ์ ์ด๋ฉด ๊ทธ๋ Mergeํ๋ค.
์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์๊ธฐํ๋ ๊ฒ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋ํ ์๊ธฐ๋ค. ๊ฐ๋ฐ ๋ธ๋์น๋ ๊ณต๊ฒฉ์ ์ผ๋ก ํ์คํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋์๊ฐ๊ณ ์์ ๋ธ๋์น๋ ์ด๋ฏธ ๋ง๋ ํ์คํ ๋ฆฌ๋ฅผ ๋ค๋ฐ๋ฅด๋ฉฐ ๋์๊ฐ๋ค.
๊ทธ๋ฆผ 3-18. ์์ ์ ์ธ ๋ธ๋์น์ผ์๋ก ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ค์ณ์ง๋ค

์คํ์ค์์ ์ถฉ๋ถํ ํ ์คํธํ๊ณ ์ค์ ์ ๋ฐฐ์นํ๋ ๊ณผ์ ์ผ๋ก ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค(๊ทธ๋ฆผ 3-19).
๊ทธ๋ฆผ 3-19. ๊ฐ ๋ธ๋์น๋ฅผ ํ๋์ ์คํ์ค๋ก ์๊ฐํ๋ผ

์ฝ๋๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋์ด ์์ ์ฑ์ ๋์ฌ๊ฐ๋ฉฐ ์ด์ํ ์ ์๋ค. ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ผ๋ฉด proposed ํน์ pu(proposed updates)๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ๋์ด next๋ master ๋ธ๋์น์ ์์ง Mergeํ ์ค๋น๊ฐ ๋์ง ์์ ๊ฒ์ ์ผ๋จ Merge์ํจ๋ค.
์ค์ํ ๊ฐ๋ ์ ๋ธ๋์น๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ๋จ๊ณ์ ๊ฑธ์ณ์ ์์ ํํด ๋์๊ฐ๋ฉด์ ์ถฉ๋ถํ ์์ ํ๊ฐ ๋์ ๋ ์์ ๋ธ๋์น๋ก Mergeํ๋ค๋ ์ ์ด๋ค. ๋ค์ ๋งํด์ ๋ฐ๋์ Long-Running์ ๋ธ๋์น๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ๋ ๊ฒ์ ์๋์ง๋ง ์ ๋ง ์ ์ฉํ๋ค. ํนํ ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์ผ์๋ก ๊ทธ ์ ์ฉ์ฑ์ด ๋ฐ์ง๋ฐ์ง ๋น๋๋ค.
ํ ํฝ ๋ธ๋์น
ํ ํฝ ๋ธ๋์น๋ ํ๋ก์ ํธ ํฌ๊ธฐ์ ์๊ด์์ด ์ ์ฉํ๋ค. ํ ํฝ ๋ธ๋์น๋ ์ด๋ค ํ ๊ฐ์ง ์ฃผ์ ๋ ์์ ์ ์ํด ๋ง๋ ์งง์ ํธํก์ ๋ธ๋์น๋ค. ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์์ ์ด๋ฐ ๋ธ๋์น๋ฅผ ๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. Git์ด ์๋ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ์์๋ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋๋ ๋ฐ ํฐ ๋น์ฉ์ด ๋ ๋ค. Git์์๋ ๋งค์ฐ ์ผ์์ ์ผ๋ก ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ Mergeํ๊ณ ์ญ์ ํ๋ค.
์์ ์ฌ์ฉํ iss53์ด๋ hotfix ๋ธ๋์น๊ฐ ํ ํฝ ๋ธ๋์น๋ค. ์ฐ๋ฆฌ๋ ๋ธ๋์น๋ฅผ ์๋ก ๋ง๋ค๊ณ ์ด๋ ์ ๋ ์ปค๋ฐํ๊ณ ๋์ ๋ค์ master ๋ธ๋์น์ Mergeํ๊ณ ๋ธ๋์น ์ญ์ ๋ ํด ๋ณด์๋ค. ๋ณดํต ์ฃผ์ ๋ณ๋ก ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ๊ฐ๊ฐ์ ๋ ๋ฆฝ๋ผ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฝ๊ฒ ์ปจํ ์คํธ ์ฌ์ด๋ฅผ ์ฎ๊ฒจ ๋ค๋ ์ ์๋ค. ๋ฌถ์๋ณ๋ก ๋๋ ์ ์ผํ๋ฉด ๋ด์ฉ๋ณ๋ก ๊ฒํ ํ๊ธฐ์๋, ํ ์คํธํ๊ธฐ์๋ ๋ ํธํ๋ค. ๊ฐ ์์ ์ ํ๋ฃจ๋ ํ ๋ฌ์ด๋ ์ ์งํ๋ค๊ฐ master ๋ธ๋์น์ Mergeํ ์์ ์ด ๋๋ฉด ์์์ ๊ด๊ณ์์ด ๊ทธ๋ Mergeํ๋ฉด ๋๋ค.
master ๋ธ๋์น๋ฅผ checkoutํ ์ํ์์ ์ด๋ค ์์ ์ ํ๋ค๊ณ ํด๋ณด์. ํ ์ด์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ iss91๋ผ๋ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ํด๋น ์์ ์ ํ๋ค. ๊ฐ์ ์ด์๋ฅผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํด๋ณด๊ณ ์ถ์ ๋๋ ์๋ค. iss91v2๋ผ๋ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ํด ๋ณธ๋ค. ํ์ ํ ์ ์๋ ์์ด๋์ด๋ฅผ ์ ์ฉํด๋ณด๊ธฐ ์ํด ๋ค์ master ๋ธ๋์น๋ก ๋๋์๊ฐ์ dumbidea ๋ธ๋์น๋ฅผ ํ๋ ๋ ๋ง๋ ๋ค. ์ง๊ธ๊น์ง ๋งํ๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ๊ทธ๋ฆผ 3-20๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ 3-20. ์ฌ๋ฌ ํ ํฝ ๋ธ๋์น์ ๋ํ ์ปค๋ฐ ํ์คํ ๋ฆฌ

์ด์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ค ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ iss91v2 ๋ธ๋์น๊ฐ ๊ด์ฐฎ์์ ์ ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ์ ๋ด๋ ธ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ด๋์ด๋ฅผ ํ์ ํ ์ ์์๋ dumbidea ๋ธ๋์น๋ฅผ ๊ฐ์ด ์ผํ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ ๋ณด์ฌ์คฌ๋๋ ์ฉ ๊ด์ฐฎ๋ค๋ ๋ฐ์์ ์ป์๋ค. iss91 ๋ธ๋์น๋ (C5, C6 ์ปค๋ฐ๋ ํจ๊ป) ๋ฒ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ ๋ธ๋์น๋ฅผ Mergeํ๋ฉด ๊ทธ๋ฆผ 3-21๊ณผ ๊ฐ์ด ๋๋ค.
๊ทธ๋ฆผ 3-21. dumbidea์ iss91v2 ๋ธ๋์น๋ฅผ Mergeํ๊ณ ๋ ํ์ ๋ชจ์ต

์ง๊ธ๊น์ง ํ ์์ ์ ์ ๋ถ ๋ก์ปฌ์์๋ง ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ๊ผญ ๊ธฐ์ตํ์. ๋ก์ปฌ ์ ์ฅ์์์๋ง ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ Mergeํ์ผ๋ฉฐ ์๋ฒ์ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ์ผ์ ์์๋ค.
๋ฆฌ๋ชจํธ ๋ธ๋์น
๋ฆฌ๋ชจํธ ๋ธ๋์น๋ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ์๋ ๋ธ๋์น๋ฅผ ๋งํ๋ค. ์ฌ์ค ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ ๋ก์ปฌ์ ์์ง๋ง ๋ฉ๋๋ก ์ฎ๊ธฐ๊ฑฐ๋ ํ ์ ์๊ณ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ํต์ ํ๋ฉด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค. ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ ๋ธ๋์น ์ํ๋ฅผ ์๋ ค์ฃผ๋ ์ฑ ๊ฐํผ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด ์ฑ ๊ฐํผ๋ก ๋ฆฌ๋ชจํธ ์ ์ฅ์์์ ๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ์์ ์ ์ํ๋ฅผ ์ ์ ์๋ค.
๋ฆฌ๋ชจํธ ๋ธ๋์น์ ์ด๋ฆ์ (remote)/(branch) ํ์์ผ๋ก ๋์ด ์๋ค. ์๋ฅผ ๋ค์ด ๋ฆฌ๋ชจํธ ์ ์ฅ์ origin์ master ๋ธ๋์น๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด origin/master๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ธ๋์น๋ฅผ ํ์ธํ๋ฉด ๋๋ค. ๋ค๋ฅธ ํ์๊ณผ ํจ๊ป ์ด๋ค ์ด์๋ฅผ ๊ตฌํํ ๋ ๊ทธ ํ์์ด iss53 ๋ธ๋์น๋ฅผ ์๋ฒ๋ก Pushํ๊ณ ๋น์ ๋ ๋ก์ปฌ์ iss53 ๋ธ๋์น๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์. ์ด๋ ์๋ฒ๊ฐ ๊ฐ๋ฆฌํค๋ iss53 ๋ธ๋์น๋ ๋ก์ปฌ์์ origin/iss53์ด ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ด๋ค.
๋ค์ ํท๊ฐ๋ฆด ์ ์์ผ๋ ์์ ๋ฅผ ์ข ๋ ์ดํด๋ณด์. git.ourcompany.com
์ด๋ผ๋ Git ์๋ฒ๊ฐ ์๊ณ ์ด ์๋ฒ์ ์ ์ฅ์๋ฅผ ํ๋ Cloneํ๋ฉด Git์ ์๋์ผ๋ก origin์ด๋ผ๋ ์ด๋ฆ์ ๋ถ์ธ๋ค. origin์ผ๋ก๋ถํฐ ์ ์ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ด๋ ค๋ฐ๊ณ master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๋ง๋ ๋ค. ์ด ํฌ์ธํฐ๋ origin/master๋ผ๊ณ ๋ถ๋ฅด๊ณ ๋ฉ๋๋ก ์กฐ์ข
ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Git์ ๋ก์ปฌ์ master ๋ธ๋์น๊ฐ origin/master๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. ์ด์ ์ด master ๋ธ๋์น์์ ์์
์ ์์ํ ์ ์๋ค.
๊ทธ๋ฆผ 3-22. ์ ์ฅ์๋ฅผ Cloneํ๋ฉด ๋ก์ปฌ master ๋ธ๋์น, ๋ฆฌ๋ชจํธ ์ ์ฅ์์ master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ origin/master ๋ธ๋์น๊ฐ ์๊น

๋ก์ปฌ ์ ์ฅ์์์ ์ด๋ค ์์
์ ํ๊ณ ์๋๋ฐ ๋์์ ๋ค๋ฅธ ํ์์ด git.ourcompany.com
์๋ฒ์ Pushํ๊ณ master ๋ธ๋์น๋ฅผ ์
๋ฐ์ดํธํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ํ์ ๊ฐ์ ํ์คํ ๋ฆฌ๋ ์๋ก ๋ฌ๋ผ์ง๋ค. ์๋ฒ ์ ์ฅ์๋ก๋ถํฐ ์ด๋ค ๋ฐ์ดํฐ๋ ์ฃผ๊ณ ๋ฐ์ง ์์์ origin/master ํฌ์ธํฐ๋ ๊ทธ๋๋ก๋ค.
๊ทธ๋ฆผ 3-23. ๋ก์ปฌ๊ณผ ์๋ฒ์ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ๋ ๋ฆฝ์ ์

๋ฆฌ๋ชจํธ ์๋ฒ๋ก๋ถํฐ ์ ์ฅ์ ์ ๋ณด๋ฅผ ๋๊ธฐํํ๋ ค๋ฉด git fetch origin
๋ช
๋ น์ ์ฌ์ฉํ๋ค. ๋ช
๋ น์ ์คํํ๋ฉด ์ฐ์ origin ์๋ฒ์ ์ฃผ์ ์ ๋ณด(์ด ์์์๋ git.ourcompany.com
)๋ฅผ ์ฐพ์์, ํ์ฌ ๋ก์ปฌ์ ์ ์ฅ์๊ฐ ๊ฐ๊ณ ์์ง ์์ ์๋ก์ด ์ ๋ณด๊ฐ ์์ผ๋ฉด ๋ชจ๋ ๋ด๋ ค๋ฐ๊ณ , ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์
๋ฐ์ดํธํ๊ณ ๋์, origin/master ํฌ์ธํฐ์ ์์น๋ฅผ ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋์ํจ๋ค.
๊ทธ๋ฆผ 3-24. Git์ Fetch ๋ช ๋ น์ ๋ฆฌ๋ชจํธ ๋ธ๋์น ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ค

๋ฆฌ๋ชจํธ ์ ์ฅ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ด์ํ๋ ์ํฉ์ ์ดํดํ ์ ์๋๋ก ๊ฐ๋ฐ์ฉ์ผ๋ก ์ฌ์ฉํ Git ์ ์ฅ์๋ฅผ ํ ๋ด๋ถ์ ํ๋ ์ถ๊ฐํด ๋ณด์.
์ด ์ ์ฅ์์ ์ฃผ์๊ฐ git.team1.ourcompany.com
์ด๋ฉด _2์ฅ_์์ ์ดํด๋ณธ git remote add
๋ช
๋ น์ผ๋ก ํ์ฌ ์์
์ค์ธ ํ๋ก์ ํธ์ ํ์ ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ฆ์ teamone์ผ๋ก ์ง๊ณ ๊ธด ์๋ฒ ์ฃผ์ ๋์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆผ 3-25. ์๋ฒ๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ์ถ๊ฐํ๊ธฐ

์๋ฒ๋ฅผ ์ถ๊ฐํ๊ณ ๋๋ฉด git fetch teamone ๋ช ๋ น์ผ๋ก teamone ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ๋๋ค. ๋ช ๋ น์ ์คํํด๋ teamone ์๋ฒ์ ๋ฐ์ดํฐ๋ ๋ชจ๋ origin ์๋ฒ์๋ ์๋ ๊ฒ๋ค์ด๋ผ์ ์๋ฌด๊ฒ๋ ๋ด๋ ค๋ฐ์ง ์๋๋ค. ํ์ง๋ง, ์ด ๋ช ๋ น์ teamone/master ๋ธ๋์น๊ฐ teamone ์๋ฒ์ master ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
๊ทธ๋ฆผ 3-26. ๋ก์ปฌ ์ ์ฅ์์ ๋ง๋ค์ด์ง teamone์ master ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ

Pushํ๊ธฐ
๋ก์ปฌ์ ๋ธ๋์น๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ ค๋ฉด ์ฐ๊ธฐ ๊ถํ์ด ์๋ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ Pushํด์ผ ํ๋ค. ๋ก์ปฌ ์ ์ฅ์์ ๋ธ๋์น๋ ์๋์ผ๋ก ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ์ ์ก๋์ง ์๋๋ค. ๋ช ์์ ์ผ๋ก ๋ธ๋์น๋ฅผ Pushํด์ผ ์ ๋ณด๊ฐ ์ ์ก๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ์ ์กํ์ง ์๊ณ ๋ก์ปฌ ๋ธ๋์น์๋ง ๋๋ ๋น๊ณต๊ฐ ๋ธ๋์น๋ฅผ ๋ง๋ค ์ ์๋ค. ๋ ๋ค๋ฅธ ์ฌ๋๊ณผ ํ์ ํ๊ธฐ ์ํด ํ ํฝ ๋ธ๋์น๋ง ์ ์กํ ์๋ ์๋ค.
serverfix๋ผ๋ ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ ๋์๋ ๋ธ๋์น๋ฅผ ์ฒ์ Pushํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก Pushํ๋ค. ๋ค์๊ณผ ๊ฐ์ด git push (remote) (branch)
๋ช
๋ น์ ์ฌ์ฉํ๋ค:
$ git push origin serverfix
Counting objects: 20, done.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 1.74 KiB, done.
Total 15 (delta 5), reused 0 (delta 0)
To [email protected]:schacon/simplegit.git
* [new branch] serverfix -> serverfix
์ด ๋ฉ์์ง์๋ ์จ๊ฒจ์ง ๋ด์ฉ์ด ๋ง๋ค.
Git์ serverfix๋ผ๋ ๋ธ๋์น ์ด๋ฆ์ refs/heads/serverfix:refs/heads/serverfix
๋ก ํ์ฅํ๋ค. ์ด๊ฒ์ serverfix๋ผ๋ ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์๋ฒ๋ก Pushํ๋๋ฐ ๋ฆฌ๋ชจํธ์ serverfix ๋ธ๋์น๋ก ์
๋ฐ์ดํธํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋์ค์ _9์ฅ_์์ refs/heads/
์ ๋ป์ ์์ธํ ์์๋ณผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋จ ๋์ด๊ฐ๋๋ก ํ๋ค. git push origin serverfix:serverfix
๋ผ๊ณ Pushํ๋ ๊ฒ๋ ๊ฐ์ ์๋ฏธ์ธ๋ฐ ์ด๊ฒ์ '๋ก์ปฌ์ serverfix ๋ธ๋์น๋ฅผ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ serverfix ๋ธ๋์น๋ก Pushํ๋ผ'๋ผ๋ ๋ป์ด๋ค. ๋ก์ปฌ ๋ธ๋์น์ ์ด๋ฆ๊ณผ ๋ฆฌ๋ชจํธ ์๋ฒ์ ๋ธ๋์น ์ด๋ฆ์ด ๋ค๋ฅผ ๋ ํ์ํ๋ค. ๋ฆฌ๋ชจํธ ์ ์ฅ์์ serverfix๋ผ๋ ์ด๋ฆ ๋์ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ๋ ค๋ฉด git push origin serverfix:awesomebranch
์ฒ๋ผ ์ฌ์ฉํ๋ค.
๋์ค์ ๋๊ตฐ๊ฐ ์ ์ฅ์๋ฅผ Fetchํ๊ณ ๋์ ์๋ฒ์ ์๋ serverfix ๋ธ๋์น์ ์ ๊ทผํ ๋ origin/serverfix๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ๊ทผํ ์ ์๋ค:
$ git fetch origin
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (15/15), done.
From [email protected]:schacon/simplegit
* [new branch] serverfix -> origin/serverfix
์ฌ๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๊ฒ ์๋ค. Fetch ๋ช ๋ น์ผ๋ก ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ ๋ด๋ ค๋ฐ๋๋ค๊ณ ํด์ ๋ก์ปฌ ์ ์ฅ์์ ์์ ํ ์ ์๋ ๋ธ๋์น๊ฐ ์๋ก ์๊ธฐ๋ ๊ฒ์ด ์๋๋ค. ๋ค์ ๋งํด์ serverfix๋ผ๋ ๋ธ๋์น๊ฐ ์๊ธฐ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ์ ์์ ๋ชป ํ๋ origin/serverfix ๋ธ๋์น ํฌ์ธํฐ๊ฐ ์๊ธฐ๋ ๊ฒ์ด๋ค.
์๋ก ๋ฐ์ ๋ธ๋์น์ ๋ด์ฉ์ Mergeํ๋ ค๋ฉด git merge origin/serverfix
๋ช
๋ น์ ์ฌ์ฉํ๋ค. Mergeํ์ง ์๊ณ ๋ฆฌ๋ชจํธ ๋ธ๋์น์์ ์์ํ๋ ์ ๋ธ๋์น๋ฅผ ๋ง๋ค๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
๊ทธ๋ฌ๋ฉด origin/serverfix์์ ์์ํ๊ณ ์์ ํ ์ ์๋ serverfix๋ผ๋ ๋ก์ปฌ ๋ธ๋์น๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ธ๋์น ์ถ์
๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ ๋ก์ปฌ ๋ธ๋์น๋ก Checkoutํ๋ฉด ์๋์ผ๋ก ํธ๋ํน(Tracking) ๋ธ๋์น๊ฐ ๋ง๋ค์ด์ง๋ค. ํธ๋ํน ๋ธ๋์น๋ ๋ฆฌ๋ชจํธ ๋ธ๋์น์ ์ง์ ์ ์ธ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ ์๋ ๋ก์ปฌ ๋ธ๋์น์ด๋ค. ํธ๋ํน ๋ธ๋์น์์ git push
๋ช
๋ น์ ๋ด๋ ค๋ Git์ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ ์์ด์ ์ด๋ค ๋ฆฌ๋ชจํธ ์ ์ฅ์์ Pushํด์ผ ํ๋์ง ์ ์ ์๋ค. ๋ํ git pull
๋ช
๋ น์ ๋ด๋ฆฌ๋ฉด ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค๋ฐ์ ์ฐ๊ฒฐ๋ ๋ฆฌ๋ชจํธ ๋ธ๋์น์ ์๋์ผ๋ก Mergeํ๋ค.
์๋ฒ๋ก๋ถํฐ ์ ์ฅ์๋ฅผ Cloneํด์ฌ ๋๋ Git์ ์๋์ผ๋ก master ๋ธ๋์น๋ฅผ origin/master ๋ธ๋์น์ ํธ๋ํน ๋ธ๋์น๋ก ๋ง๋ ๋ค. ๊ทธ๋์ git push
, git pull
๋ช
๋ น์ด ์ถ๊ฐ์ ์ธ ์๊ท๋จผํธ ์์ด๋ ๋์ํ๋ค. ํธ๋ํน ๋ธ๋์น๋ฅผ ์ง์ ๋ง๋ค ์ ์๋๋ฐ origin/master๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ ์ฅ์์ ๋ค๋ฅธ ๋ธ๋์น๋ ์ถ์ ํ๊ฒ(Tracking) ํ ์ ์๋ค. git checkout -b [branch] [remotename]/[branch]
๋ช
๋ น์ผ๋ก ๊ฐ๋จํ ํธ๋ํน ๋ธ๋์น๋ฅผ ๋ง๋ค ์ ์๋ค. Git 1.6.2 ๋ฒ์ ์ด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ --track ์ต์
๋ ์ฌ์ฉํ ์ ์๋ค.
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
๋ฆฌ๋ชจํธ ๋ธ๋์น์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ธ๋์น๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ก์ปฌ ๋ธ๋์น์ ์ด๋ฆ์ ์๋์ ๊ฐ์ด ๋ค๋ฅด๊ฒ ์ง์ ํ๋ค:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
์ด์ sf
๋ธ๋์น์์ Push๋ Pullํ๋ฉด ์๋์ผ๋ก origin/serverfix
์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฑฐ๋ ๊ฐ์ ธ์จ๋ค.
๋ฆฌ๋ชจํธ ๋ธ๋์น ์ญ์
๋๋ฃ์ ํ์
ํ๊ธฐ ์ํด ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ ๋ง๋ค์๋ค๊ฐ ์์
์ ๋ง์น๊ณ master ๋ธ๋์น๋ก Mergeํ๋ค. ํ์
ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ทธ ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ ์ด์ ์์ ํ๋์ผ๋ฏ๋ก ์ญ์ ํ ์ ์๋ค. git push [remotename] :[branch]
๋ผ๊ณ ์คํํด์ ์ญ์ ํ ์ ์๋๋ฐ ์ด ๋ช
๋ น์ ์ข ํน์ดํ๊ฒ ์๊ฒผ๋ค. serverfix๋ผ๋ ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ค:
$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
- [deleted] serverfix
์ ๋ช
๋ น์ ์คํํ๊ณ ๋๋ฉด ์๋ฒ์ ๋ธ๋์น๋ ์ญ์ ๋๋ค. ์ด ๋ช
๋ น์ ์์ด๋ฒ๋ฆด ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ ํ์ด์ง ๊ทํ์ด๋ฅผ ์ ์ด๋๊ณ ํ์ํ ๋ ํด๋ณด๋ ๊ฒ ์ข์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ์ด ๋ช
๋ น์ ์์ ์ดํด๋ณธ git push [remotename] [localbranch]:[remotebranch]
ํ์์ผ๋ก ๊ธฐ์ตํ๋ ๊ฒ์ด ์ข๋ค. [localbranch]
๋ถ๋ถ์ ๋น์ ๋ ์ฑ๋ก ์คํํ๋ฉด '๋ก์ปฌ์์ ๋น ๋ด์ฉ์ ๋ฆฌ๋ชจํธ์ [remotebranch]
์ ์ฑ์ ๋ฃ์ด๋ผ' ๋ผ๋ ๋ป์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Rebaseํ๊ธฐ
Git์์ ํ ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก ํฉ์น๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์๋ค. ํ๋๋ Merge์ด๊ณ ๋ค๋ฅธ ํ๋๋ Rebase๋ค. ์ด ์ ์์๋ Rebase๊ฐ ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง, ์ข์ ์ ์ ๋ญ๊ณ , ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๊ณ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋์ง ์์ ๋ณธ๋ค.
Rebase์ ๊ธฐ์ด
์์ Merge ์ ์์ ์ดํด๋ณธ ์์ ๋ก ๋ค์ ๋์๊ฐ ๋ณด์(๊ทธ๋ฆผ 3-27). ๋ ๊ฐ์ ๋๋์ด์ง ๋ธ๋์น์ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฆผ 3-27. ๋ ๊ฐ์ ๋ธ๋์น๋ก ๋๋์ด์ง ์ปค๋ฐ ํ์คํ ๋ฆฌ

์ด ๋ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์์ ์ดํด๋ณธ ๋๋ก Merge ๋ช ๋ น์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๋ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ ๋ ๊ฐ(C3, C4)์ ๊ณตํต ์กฐ์(C2)์ ์ฌ์ฉํ๋ 3-way Merge๋ก ๊ทธ๋ฆผ 3-28์ฒ๋ผ ์๋ก์ด ์ปค๋ฐ์ ๋ง๋ค์ด ๋ธ๋ค.
๊ทธ๋ฆผ 3-28. ๋๋ ๋ธ๋์น๋ฅผ Mergeํ๊ธฐ

๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก, C3์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ํจ์น(Patch)๋ก ๋ง๋ค๊ณ ์ด๋ฅผ ๋ค์ C4์ ์ ์ฉ์ํค๋ ๋ฐฉ๋ฒ์ด ์๋ค. Git์์๋ ์ด๋ฐ ๋ฐฉ์์ Rebase ๋ผ๊ณ ํ๋ค. Rebase ๋ช ๋ น์ผ๋ก ํ ๋ธ๋์น์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ๋ค๋ฅธ ๋ธ๋์น์ ์ ์ฉํ ์ ์๋ค.
์์ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ผ๋ก Rebaseํ๋ค:
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
์ค์ ๋ก ์ผ์ด๋๋ ์ผ์ ์ค๋ช ํ์๋ฉด ์ผ๋จ ๋ ๋ธ๋์น๊ฐ ๋๋๊ธฐ ์ ์ธ ๊ณตํต ์ปค๋ฐ์ผ๋ก ์ด๋ํ๊ณ ๋์ ๊ทธ ์ปค๋ฐ๋ถํฐ ์ง๊ธ Checkoutํ ๋ธ๋์น๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ๊น์ง diff๋ฅผ ์ฐจ๋ก๋ก ๋ง๋ค์ด ์ด๋๊ฐ์ ์์๋ก ์ ์ฅํด ๋๋๋ค. Rebaseํ ๋ธ๋์น(์ญ์ฃผ - experiment)๊ฐ ํฉ์น ๋ธ๋์น(์ญ์ฃผ - master)๊ฐ ๊ฐ๋ฆฌํค๋ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ ์๊น ์ ์ฅํด ๋์๋ ๋ณ๊ฒฝ์ฌํญ์ ์ฐจ๋ก๋๋ก ์ ์ฉํ๋ค. ๊ทธ๋ฆผ 3-29๋ ์ด๋ฌํ ๊ณผ์ ์ ๋ํ๋ด๊ณ ์๋ค.
๊ทธ๋ฆผ 3-29. C3์ ๋ณ๊ฒฝ์ฌํญ์ C4์ ์ ์ฉํ๋ Rebase ๊ณผ์

๊ทธ๋ฆฌ๊ณ ๋์ master ๋ธ๋์น๋ฅผ Fast-forward ์ํจ๋ค.
๊ทธ๋ฆผ 3-30. master ๋ธ๋์น๋ฅผ Fast-forward์ํค๊ธฐ

C3'๋ก ํ์๋ ์ปค๋ฐ์์์ ๋ด์ฉ์ Merge ์์ ์์ ์ดํด๋ณธ C5 ์ปค๋ฐ์์์ ๋ด์ฉ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. Merge์ด๋ Rebase๋ ๋ ๋ค ํฉ์น๋ ๊ด์ ์์๋ ์๋ก ๋ค๋ฅผ ๊ฒ ์๋ค. ํ์ง๋ง, Rebase๊ฐ ์ข ๋ ๊นจ๋ํ ํ์คํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค. Rebaseํ ๋ธ๋์น์ Log๋ฅผ ์ดํด๋ณด๋ฉด ํ์คํ ๋ฆฌ๊ฐ ์ ํ์ ์ด๋ค. ์ผ์ ๋ณ๋ ฌ๋ก ๋์์ ์งํํด๋ Rebaseํ๊ณ ๋๋ฉด ๋ชจ๋ ์์ ์ด ์ฐจ๋ก๋๋ก ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
Rebase๋ ๋ณดํต ๋ฆฌ๋ชจํธ ๋ธ๋์น์ ์ปค๋ฐ์ ๊น๋ํ๊ฒ ์ ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ์๋ง ์ด๋ ๊ฒ Rebaseํ๋ ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ ์ง์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฅ ์ฐธ์ฌํ๋ ๋ธ๋์น์ผ ๊ฒ์ด๋ค. ๋ฉ์ธ ํ๋ก์ ํธ์ ํจ์น๋ฅผ ๋ณด๋ผ ์ค๋น๊ฐ ๋๋ฉด ํ๋ ๊ฒ์ด Rebase์ด๋๊น ๋ธ๋์น์์ ํ๋ ์ผ์ ์์ ํ ๋ง์น๊ณ origin/master๋ก Rebaseํ๋ค. ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ ์ด๋ ํ ํตํฉ์์ ๋ ํ์ ์๋ค. ๊ทธ๋ฅ master ๋ธ๋์น๋ฅผ Fast-forward ์ํค๋ฉด ๋๋ค.
Rebase๋ฅผ ํ๋ ์ง, Merge๋ฅผ ํ๋ ์ง ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ๊ณ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ง ๋ค๋ฅด๋ค๋ ๊ฒ์ด ์ค์ํ๋ค. Rebase์ ๊ฒฝ์ฐ๋ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ์์๋๋ก ๋ค๋ฅธ ๋ธ๋์น์ ์ ์ฉํ๋ฉด์ ํฉ์น๊ณ Merge์ ๊ฒฝ์ฐ๋ ๋ ๋ธ๋์น์ ์ต์ข ๊ฒฐ๊ณผ๋ง์ ๊ฐ์ง๊ณ ํฉ์น๋ค.
์ข ๋ Rebase
Rebase๋ ๋จ์ํ ๋ธ๋์น๋ฅผ ํฉ์น๋ ๊ฒ๋ง ์๋๋ผ ๋ค๋ฅธ ์ฉ๋๋ก๋ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฆผ 3-31๊ณผ ๊ฐ์ ํ์คํ ๋ฆฌ๊ฐ ์๋ค๊ณ ํ์. server ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ ์๋ฒ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ๊ทธ ๋ธ๋์น์์ ๋ค์ client ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค. ๋ง์ง๋ง์ผ๋ก server ๋ธ๋์น๋ก ๋์๊ฐ์ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆผ 3-31. ๋ค๋ฅธ ํ ํฝ ๋ธ๋์น์์ ๊ฐ๋ผ์ ธ ๋์จ ํ ํฝ ๋ธ๋์น

์ด๋ ํ
์คํธ๊ฐ ๋ ๋ server ๋ธ๋์น๋ ๊ทธ๋๋ก ๋๊ณ client ๋ธ๋์น๋ง master๋ก ํฉ์น๋ ค๋ ์ํฉ์ ์๊ฐํด๋ณด์. server์๋ ์๋ฌด ๊ด๋ จ์ด ์๋ client ์ปค๋ฐ์ C8, C9์ด๋ค. ์ด ๋ ์ปค๋ฐ์ master ๋ธ๋์น์ ์ ์ฉํ๊ธฐ ์ํด์ --onto
์ต์
์ ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ ๋ช
๋ น์ ์คํํ๋ค:
$ git rebase --onto master server client
์ด ๋ช ๋ น์ client ๋ธ๋์น๋ฅผ Checkoutํ๊ณ server์ client์ ๊ณตํต์กฐ์ ์ดํ์ ํจ์น๋ฅผ ๋ง๋ค์ด master์ ์ ์ฉํ๋ค. ์กฐ๊ธ ๋ณต์กํ๊ธด ํด๋ ๊ฝค ์ธ๋ชจ ์๋ค. ๊ทธ๋ฆผ 3-32๋ฅผ ๋ณด์.
๊ทธ๋ฆผ 3-32. ๋ค๋ฅธ ํ ํฝ ๋ธ๋์น์์ ๊ฐ๋ผ์ ธ ๋์จ ํ ํฝ ๋ธ๋์น๋ฅผ Rebaseํ๊ธฐ

์ด์ master ๋ธ๋์น๋ก ๋์๊ฐ์ Fast-forward ์ํฌ ์ ์๋ค:
$ git checkout master
$ git merge client
๊ทธ๋ฆผ 3-33. master ๋ธ๋์น๋ฅผ client ๋ธ๋์น ์์น๋ก ์งํ ์ํค๊ธฐ

server ๋ธ๋์น์ ์ผ์ด ๋ค ๋๋๋ฉด git rebase [basebranch] [topicbranch]
๋ผ๋ ๋ช
๋ น์ผ๋ก Checkoutํ์ง ์๊ณ ๋ฐ๋ก server ๋ธ๋์น๋ฅผ master ๋ธ๋์น๋ก rebaseํ ์ ์๋ค. ์ด ๋ช
๋ น์ ํ ํฝ(server) ๋ธ๋์น๋ฅผ Checkoutํ๊ณ ๋ฒ ์ด์ค(master) ๋ธ๋์น์ Rebaseํ๋ค:
$ git rebase master server
server ๋ธ๋์น์ ์์ ์ฌํญ์ master ๋ธ๋์น์ ์ ์ฉํ๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ๊ทธ๋ฆผ 3-34์ ๊ฐ๋ค.
๊ทธ๋ฆผ 3-34. master ๋ธ๋์น์ server ๋ธ๋์น์ ์์ ์ฌํญ์ ์ ์ฉ

๊ทธ๋ฆฌ๊ณ ๋์ master ๋ธ๋์น๋ฅผ Fast-forward ์ํจ๋ค:
$ git checkout master
$ git merge server
๋ชจ๋ ๊ฒ์ด master ๋ธ๋์น์ ํตํฉ๋๊ธฐ ๋๋ฌธ์ ๋ ํ์ํ์ง ์๋ค๋ฉด client๋ server ๋ธ๋์น๋ ์ญ์ ํด๋ ๋๋ค. ๋ธ๋์น๋ฅผ ์ญ์ ํด๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ๊ทธ๋ฆผ 3-35์ ๊ฐ์ด ์ฌ์ ํ ๋จ์ ์๋ค:
$ git branch -d client
$ git branch -d server
๊ทธ๋ฆผ 3-35. ์ต์ข ์ปค๋ฐ ํ์คํ ๋ฆฌ

Rebase์ ์ํ์ฑ
Rebase๊ฐ ์ฅ์ ์ด ๋ง์ ๊ธฐ๋ฅ์ด์ง๋ง ๋จ์ ์ด ์๋ ๊ฒ์ ์๋๋ ์กฐ์ฌํด์ผ ํ๋ค. ๊ทธ ์ฃผ์์ฌํญ์ ๋ค์ ํ ๋ฌธ์ฅ์ผ๋ก ํํํ ์ ์๋ค:
์ด๋ฏธ ๊ณต๊ฐ ์ ์ฅ์์ Pushํ ์ปค๋ฐ์ Rebaseํ์ง ๋ง๋ผ
์ด ์ง์นจ๋ง ์งํค๋ฉด Rebase๋ฅผ ํ๋ ๋ฐ ๋ฌธ์ ๋ ๊ฒ ์๋ค. ํ์ง๋ง, ์ด ์ฃผ์์ฌํญ์ ์งํค์ง ์์ผ๋ฉด ์ฌ๋๋ค์๊ฒ ์์ ๋จน์ ๊ฒ์ด๋ค(์ญ์ฃผ - ์๋ง๋ ๊ฐ์นด์ ํธ์ฐ์ง๊ธฐ๊ฐ ํ์ํด์ง ๊ฒ์ด๋ค).
Rebase๋ ๊ธฐ์กด์ ์ปค๋ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ด์ฉ์ ๊ฐ์ง๋ง ๋ค๋ฅธ ์ปค๋ฐ์ ์๋ก ๋ง๋ ๋ค. ์ ์ปค๋ฐ์ ์๋ฒ์ Pushํ๊ณ ๋๋ฃ ์ค ๋๊ตฐ๊ฐ๊ฐ ๊ทธ ์ปค๋ฐ์ Pullํด์ ์์
์ ํ๋ค๊ณ ํ์. ๊ทธ๋ฐ๋ฐ ๊ทธ ์ปค๋ฐ์ git rebase
๋ก ๋ฐ๊ฟ์ Pushํด๋ฒ๋ฆฌ๋ฉด ๋๋ฃ๊ฐ ๋ค์ Pushํ์ ๋ ๋๋ฃ๋ ๋ค์ Mergeํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฃ๊ฐ ๋ค์ Mergeํ ๋ด์ฉ์ Pullํ๋ฉด ๋ด ์ฝ๋๋ ์ ๋ง ์๋ง์ด ๋๋ค.
์ด๋ฏธ ๊ณต๊ฐ ์ ์ฅ์์ Pushํ ์ปค๋ฐ์ Rebaseํ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ์ด๋๋๋์ง ์์ ๋ฅผ ํตํด ์์๋ณด์. ์ค์ ์ ์ฅ์์์ Cloneํ๊ณ ์ผ๋ถ ์์ ์ ํ๋ฉด ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ๊ทธ๋ฆผ 3-36๊ณผ ๊ฐ์ ์ง๋ค.
๊ทธ๋ฆผ 3-36. ์ ์ฅ์๋ฅผ Cloneํ๊ณ ์ผ๋ถ ์์ ํจ

์ด์ ํ์ ์ค ๋๊ตฐ๊ฐ ์ปค๋ฐ, Mergeํ๊ณ ๋์ ์๋ฒ์ Push ํ๋ค. ์ด ๋ฆฌ๋ชจํธ ๋ธ๋์น๋ฅผ Fetch, Mergeํ๋ฉด ๊ทธ๋ฆผ 3-37๊ณผ ๊ฐ์ด ๋๋ค.
๊ทธ๋ฆผ 3-37. Fetchํ ํ Mergeํจ

๊ทธ๋ฐ๋ฐ Pushํ๋ ํ์์ Mergeํ ์ผ์ ๋๋๋ฆฌ๊ณ ๋ค์ Rebaseํ๋ค. ์๋ฒ์ ํ์คํ ๋ฆฌ๋ฅผ ์๋ก ๋ฎ์ด์์ฐ๋ ค๋ฉด git push --force
๋ช
๋ น์ ์ฌ์ฉํด์ผ ํ๋ค. ์ดํ์ ์ ์ฅ์์์ Fetchํ๊ณ ๋๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ํ๊ฐ ๋๋ค:
๊ทธ๋ฆผ 3-38. ํ ํ์์ด ๋ค๋ฅธ ํ์์ด ์์กดํ๋ ์ปค๋ฐ์ ์์ ๊ณ Rebaseํ ์ปค๋ฐ์ ๋ค์ Pushํจ

๊ธฐ์กด ์ปค๋ฐ์ด ์ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์ฒ๋ฆฌํ ์ผ์ด๋ผ๊ณ ํด๋ ๋ค์ Mergeํด์ผ ํ๋ค. Rebase๋ ์ปค๋ฐ์ SHA-1 ํด์๋ฅผ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ Git์ ์๋ก์ด ์ปค๋ฐ์ผ๋ก ์๊ฐํ๋ค. ์ฌ์ค C4๋ ์ด๋ฏธ ํ์คํ ๋ฆฌ์ ์ ์ฉ๋์ด ์์ง๋ง, Git์ ๋ชจ๋ฅธ๋ค.
๊ทธ๋ฆผ 3-39. ๊ฐ์ Merge๋ฅผ ๋ค์ ํ๋ค

๋ค๋ฅธ ๊ฐ๋ฐ์์ ๊ณ์ ๊ฐ์ด ์ผํ๋ ค๋ฉด ์ด๋ฐ Merge๋ ํด์ผ๋ง ํ๋ค. Mergeํ๋ฉด C4์ C4' ์ปค๋ฐ ๋ ๋ค ํ์คํ ๋ฆฌ์ ๋จ๊ฒ ๋๋ค. ์ค์ ๋ด์ฉ๊ณผ ๋ฉ์์ง๊ฐ ๊ฐ์ง๋ง SHA-1 ํด์ ๊ฐ์ด ์ ํ ๋ค๋ฅด๋ค. git log
๋ก ํ์คํ ๋ฆฌ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์, ์ปค๋ฐ ๋ ์ง, ๋ฉ์์ง๊ฐ ๊ฐ์ ์ปค๋ฐ์ด ๋ ๊ฐ ์์ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด ํผ๋์ค๋ฝ๋ค. ๊ฒ๋ค๊ฐ ์ด ํ์คํ ๋ฆฌ๋ฅผ ์๋ฒ์ Pushํ๋ฉด ๊ฐ์ ์ปค๋ฐ์ด ๋ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋๋ค๋ ํผ๋์ค๋ฌ์ํ๋ค.
Pushํ๊ธฐ ์ ์ ์ ๋ฆฌํ๋ ค๊ณ Rebaseํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค. ๋ ์ ๋ ๊ณต๊ฐํ์ง ์๊ณ ํผ์ Rebaseํ๋ ๊ฒฝ์ฐ๋ ๊ด์ฐฎ๋ค. ํ์ง๋ง, ์ด๋ฏธ ๊ณต๊ฐํ์ฌ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ ์ปค๋ฐ์ Rebaseํ๋ฉด ํ๋ฆผ์์ด ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ์ด๋ค.
์์ฝ
์ฐ๋ฆฌ๋ ์ด ์ฅ์์ Git์ผ๋ก ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ Merge ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ ๋ค๋ฃจ์๋ค. ์ด์ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ฎ๊ฒจ๋ค๋๊ณ Mergeํ๋ ๊ฒ์ ์ต์ํด์ก์ ๊ฒ์ผ๋ก ์๊ฐํ๋ค. ๋ธ๋์น๋ฅผ Pushํ์ฌ ๊ณต์ ํ๊ฑฐ๋ Pushํ๊ธฐ ์ ์ ๋ธ๋์น๋ฅผ Rebaseํ๋ ๊ฒ ์ ๋๋ ์ด๋ ต์ง ์๊ฒ ํ ์ ์์ ๊ฒ์ด๋ค.
Last updated