[Git] Git์ ์ด๋ป๊ฒ ํฉ์น์ง? : Git Merging
์๋ณธ ๊ฒ์๊ธ: https://velog.io/@euisuk-chung/๊น-๋จธ์ง๊ณผ-ํจ์คํธํฌ์๋ฉ-์ดํด์-ํ์ฉ
๊น(Git)์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๋์์ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋, ์ด๋ค์ ์์ ์ ํจ์จ์ ์ผ๋ก ํตํฉํ๊ธฐ ์ํด์๋ ๊น์ ๋จธ์ง(merging)๊ณผ ํจ์คํธํฌ์๋ฉ(fast-forwarding) ๊ธฐ๋ฅ์ ๋ํ ์ดํด๊ฐ ํ์์ ์ ๋๋ค.
์ด ๋ธ๋ก๊ทธ ํฌ์คํธ์์๋ ๋จธ์ง๊ณผ ํจ์คํธํฌ์๋ฉ์ ๊ฐ๋ ์ ์ค๋ช ํ๊ณ , ๋ณดํธ์ ์ธ ์์๋ฅผ ํตํด ์ด๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๊น ๋จธ์ง(Merging)
๋จธ์ง์ ๋ ๊ฐ ์ด์์ ๊ฐ๋ฐ ๋ธ๋์น๋ฅผ ํตํฉํ๋ ๊ณผ์ ์ ๋๋ค. ๊ฐ์ฅ ํํ ์๋๋ฆฌ์ค๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ๋ธ๋์น(feature branch)์์์ ์์ ์ ๋ฉ์ธ ๋ธ๋์น(main branch)๋ก ํตํฉํ๋ ๊ฒ์ ๋๋ค. ๋จธ์ง ๊ณผ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค:
- ๋ชฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์ํ๊ธฐ: ๋จธ์งํ ๋ชฉํ ๋ธ๋์น๋ก ์ฒดํฌ์์ํฉ๋๋ค.
1
git checkout main
- ๋จธ์ง ์คํํ๊ธฐ: ๊ฐ๋ฐํ ๊ธฐ๋ฅ์ด ์๋ ๋ธ๋์น๋ฅผ ํ์ฌ ๋ธ๋์น์ ๋จธ์งํฉ๋๋ค.
1
git merge feature-branch
๋จธ์ง ๊ณผ์ ์์ ์ถฉ๋(conflict)์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ ๋ธ๋์น์์ ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ์์ ํ์ ๋ ์ฃผ๋ก ๋ฐ์ํฉ๋๋ค. ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ๊น์ ๊ฐ๋ฐ์์๊ฒ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋จธ์ง์ ์๋ฃํ ๊ฒ์ ์์ฒญํฉ๋๋ค.
ํจ์คํธํฌ์๋ฉ(Fast-Forwarding)
ํจ์คํธํฌ์๋ฉ์ ๋จธ์ง์ ํ ํํ๋ก, ๋ธ๋์น๋ฅผ ํตํฉํ ๋ ๊ธฐ์กด์ ํ์คํ ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์ ๋ธ๋์น์ ํฌ์ธํฐ๋ง ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ๊ธฐ๋ฅ ๋ธ๋์น์์ ๋ฉ์ธ ๋ธ๋์น๋ก์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ํ์ ์ธ ๊ฒฝ์ฐ(์ฆ, ๋ฉ์ธ ๋ธ๋์น์์ ๊ธฐ๋ฅ ๋ธ๋์น๊ฐ ๋ถ๊ธฐ๋ ์ดํ ๋ฉ์ธ ๋ธ๋์น์ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋)์ ๊ฐ๋ฅํฉ๋๋ค.
ํจ์คํธํฌ์๋ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ธฐ๋ฅ ๋ธ๋์น์์ ์์
ํ๊ธฐ:
feature-branch์์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์์ ์ ์๋ฃํฉ๋๋ค. -
๋ฉ์ธ ๋ธ๋์น๋ก ์ฒดํฌ์์ํ๊ธฐ: ์์ ์ ํตํฉํ ๋ฉ์ธ ๋ธ๋์น๋ก ์ ํํฉ๋๋ค.
1
git checkout main
-
ํจ์คํธํฌ์๋ฉ ๋จธ์ง ์คํํ๊ธฐ: ๋ฉ์ธ ๋ธ๋์น์์
feature-branch์ ๋ณ๊ฒฝ ์ฌํญ์ ํจ์คํธํฌ์๋ ๋ฐฉ์์ผ๋ก ๋จธ์งํฉ๋๋ค.1
git merge feature-branch
ํจ์คํธํฌ์๋ฉ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๊น์ ๋ฉ์ธ ๋ธ๋์น์ ํค๋๋ฅผ feature-branch์ ์ต์ ์ปค๋ฐ์ผ๋ก ์ด๋์ํค๊ณ , ๋ณ๋์ ๋จธ์ง ์ปค๋ฐ์ ์์ฑํ์ง ์์ต๋๋ค. ์ด ๋ฐฉ์์ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ ์ ์์ด ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ ํธํฉ๋๋ค.
git fetch๋?
git fetch ๋ช
๋ น์ด๋ ์๊ฒฉ ์ ์ฅ์์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก์ปฌ ์ ์ฅ์์ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ๋ค์ด๋ก๋ํ๋, ํ์ฌ ์์
์ค์ธ ๋ธ๋์น์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํ์ง๋ ์์ต๋๋ค. git fetch๋ ์๊ฒฉ ์ ์ฅ์์ ์ํ๋ฅผ ํ์ธํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ๋ก์ปฌ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ์๊ฒฉ ๋ธ๋์น์ ์ต์ ์ํ์ ๋๊ธฐํํ๊ธฐ ์ํ ์ฒซ ๋จ๊ณ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ๋ฒ
git fetch ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1
git fetch origin
์ฌ๊ธฐ์ origin์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋ ์๊ฒฉ ์ ์ฅ์์ ์ด๋ฆ์
๋๋ค. ์ด ๋ช
๋ น์ origin์์ ๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ธ๋์น ์ ๋ณด๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์จ ์ ๋ณด๋ ๋ก์ปฌ์ ์๊ฒฉ ์ถ์ ๋ธ๋์น์ ์ ์ฅ๋๋ฉฐ, ์ด๋ origin/main, origin/feature-branch ๋ฑ์ผ๋ก ํ์๋ฉ๋๋ค.
git fetch ํ์ ์์
git fetch๋ฅผ ์คํํ ํ, ๋ณ๊ฒฝ ์ฌํญ์ ํ์ฌ ๋ธ๋์น์ ์ ์ฉํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น์์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ํ์ฌ ์ฒดํฌ์์๋ main ๋ธ๋์น์ ์ ์ฉํ๊ณ ์ ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค:
- ๋ก์ปฌ
main๋ธ๋์น๋ก ์ ํํ๊ธฐ:1
git checkout main
- ๋ณ๊ฒฝ ์ฌํญ ๋จธ์งํ๊ธฐ:
1
git merge origin/main
์ด ๊ณผ์ ์ origin/main์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก์ปฌ์ main ๋ธ๋์น์ ํตํฉํฉ๋๋ค.
git fetch์ git pull์ ์ฐจ์ด
git fetch์ ๋น์ทํ ๋ช
๋ น์ด๋ก git pull์ด ์์ต๋๋ค. git pull์ git fetch๋ฅผ ์คํํ ํ, ๋ฐ๋ก git merge๋ฅผ ์คํํ์ฌ ์๊ฒฉ ๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ฌ ๋ธ๋์น์ ์๋์ผ๋ก ๋จธ์งํฉ๋๋ค. ์ฆ, git pull์ git fetch ํ git merge๋ฅผ ํ ๋ฒ์ ์ํํ๋ ๋ช
๋ น์ด์
๋๋ค.
๊ฐ๋ฐ์๊ฐ ์๊ฒฉ ์ ์ฅ์์ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ณ ์ถ์ง๋ง, ์ฆ์ ํ์ฌ ๋ธ๋์น์ ํตํฉํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ git fetch๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋จธ์งํ ์ ์์ต๋๋ค.
์ฒดํฌ์์ํ ๋ธ๋์น๊ฐ ์๋๋ฐ?!
git fetch origin๊ณผ git checkout -b project1 origin/project1 ๋ช
๋ น์ด๋ ๋ ๋จ๊ณ์ ์๊ฒฉ ์ ์ฅ์์ ๋ด์ฉ์ ์
๋ฐ์ดํธ๋ก ์ด๋ฅผ ๋ธ๋ ์น๋ก ์ ์ํ๋ฉด ๋ฉ๋๋ค. ๊ฐ๊ฐ์ ๋จ๊ณ์ ๋ํด์ ์ดํด๋ณด์์ฃ .
1. git fetch origin
- ์ด ๋ช
๋ น์ด๋ ์๊ฒฉ ์ ์ฅ์
origin์ผ๋ก๋ถํฐ ์ต์ ์ ๋ณด๋ฅผ ๋ก์ปฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์ต๋๋ค(fetch). ์ฌ๊ธฐ์origin์ ๋ก์ปฌ ์ ์ฅ์์ ๋ฑ๋ก๋ ์๊ฒฉ ์ ์ฅ์์ ๊ธฐ๋ณธ ์ด๋ฆ์ ๋๋ค. git fetch๋ ์๊ฒฉ ์ ์ฅ์์ ๋ชจ๋ ๋ธ๋์น ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ์ง๋ง, ํ์ฌ ์ฒดํฌ์์๋ ๋ธ๋์น์ ์์ ํธ๋ฆฌ๋ ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ์ฆ, ๋ก์ปฌ์์ ์์ ์ค์ธ ์ฝ๋์๋ ์ํฅ์ ์ฃผ์ง ์๊ณ , ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ํ๋ง์ ๋ก์ปฌ์ ๋ฐ์ํฉ๋๋ค.- ์ด ๊ณผ์ ์ ํตํด ์๊ฒฉ ์ ์ฅ์์ ์๋ก์ด ๋ธ๋์น๋ ์ ๋ฐ์ดํธ๋ ๋ธ๋์น ์ ๋ณด๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
2. git checkout -b project1 origin/project1
- ์ด ๋ช
๋ น์ด๋
project1์ด๋ผ๋ ์๋ก์ด ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผorigin/project1์๊ฒฉ ๋ธ๋์น์ ์ต์ ์ปค๋ฐ์ผ๋ก ์ค์ ํ ํ, ํด๋น ๋ธ๋์น๋ก ์ ํ(checkout)ํฉ๋๋ค. - ์ฌ๊ธฐ์
git checkout -b๋ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ํด๋น ๋ธ๋์น๋ก ์ ํํ๋ ๋ช ๋ น์ด์ ๋๋ค.project1์ ์์ฑํ ์๋ก์ด ๋ก์ปฌ ๋ธ๋์น์ ์ด๋ฆ์ด๋ฉฐ,origin/project1์ ๋ณต์ (clone)ํ๊ฑฐ๋ ์ ๋ฐ์ดํธ(fetch)ํ ์๊ฒฉ ๋ธ๋์น๋ฅผ ์ง์ ํฉ๋๋ค. - ์ด ๊ณผ์ ์ ํนํ ์๊ฒฉ ์ ์ฅ์์ ์๋ก ์์ฑ๋๊ฑฐ๋ ์
๋ฐ์ดํธ๋ ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ก์ปฌ์์ ์์
์ ์์ํ๊ณ ์ ํ ๋ ์ ์ฉํฉ๋๋ค. ์๋ก์ด ๋ธ๋์น
project1์ ์๊ฒฉ ๋ธ๋์นorigin/project1์ ์ํ๋ฅผ ๊ทธ๋๋ก ๋ฐ์ํ์ฌ ์์ฑ๋ฉ๋๋ค.
์์ฝํ๋ฉด, ์ด ๋ ๋ช
๋ น์ด๋ ์๊ฒฉ ์ ์ฅ์ origin์์ project1 ๋ธ๋์น์ ์ต์ ์ํ๋ฅผ ๋ก์ปฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์(git fetch origin), ๊ทธ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ก์ปฌ ๋ธ๋์น project1์ ์์ฑํ๊ณ ํด๋น ๋ธ๋์น๋ก ์ ํ(git checkout -b project1 origin/project1)ํ๋ ์์
์ ์ํํฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํตํด ๊ฐ๋ฐ์๋ ์๊ฒฉ ์ ์ฅ์์ ํน์ ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ก์ปฌ์์ ์๋ก์ด ์์
์ ์์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ถ๊ฐ ์ค๋ช
git checkout -b ์ฌ์ฉ ์๋๋ฆฌ์ค
git checkout -b ๋ช
๋ น์ด๋ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ํด๋น ๋ธ๋์น๋ก ๋ฐ๋ก ์ ํํ๋ ์์
์ ํ ๋ฒ์ ์ํํฉ๋๋ค. ์ด ๋ช
๋ น์ด๋ ํนํ ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ, ๋ฒ๊ทธ ์์ , ์คํ์ ์ธ ์๋ ๋ฑ์ ์ํ ์๋ก์ด ์์
๋ธ๋์น๋ฅผ ์์ํ ๋ ์ ์ฉํฉ๋๋ค. git checkout -b ๋ช
๋ น์ด์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1
git checkout -b [์๋ก์ด ๋ธ๋์น ์ด๋ฆ]
์ด ๋ช
๋ น์ ํ์ฌ ๋ธ๋์น์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก [์๋ก์ด ๋ธ๋์น ์ด๋ฆ]์ผ๋ก ๋ช
๋ช
๋ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ , ์ด ์๋ก์ด ๋ธ๋์น๋ก ์ ํ(checkout)ํฉ๋๋ค.
์์: ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ๋ธ๋์น ์์ฑ
์๋ฅผ ๋ค์ด, ์๋ก์ด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ํด feature-login์ด๋ผ๋ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ ํ ๋, ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค:
1
git checkout -b feature-login
์ด ๋ช
๋ น์ด๋ ํ์ฌ ์์นํ ๋ธ๋์น(์: main ๋๋ develop)์ ์ต์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก feature-login ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ , ์๋์ผ๋ก ํด๋น ๋ธ๋์น๋ก ์ ํํฉ๋๋ค. ์ด๋ก์จ ๊ฐ๋ฐ์๋ ์ ๊ธฐ๋ฅ์ ๋ํ ์์
์ ์ฆ์ ์์ํ ์ ์์ต๋๋ค.
git checkout -b์ ์๊ฒฉ ๋ธ๋์น
git checkout -b ๋ช
๋ น์ด๋ ์๊ฒฉ ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ก์ปฌ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ถ์ ๋๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ช
๋ น์ด ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1
git checkout -b [์๋ก์ด ๋ก์ปฌ ๋ธ๋์น ์ด๋ฆ] origin/[์๊ฒฉ ๋ธ๋์น ์ด๋ฆ]
์๋ฅผ ๋ค์ด, ์๊ฒฉ ์ ์ฅ์์ ์๋ feature-login ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ก์ปฌ์์ ๋์ผํ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ์์ฑํ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์คํํฉ๋๋ค:
1
git checkout -b feature-login origin/feature-login
์ด๋ ์๊ฒฉ์ feature-login ๋ธ๋์น ์ํ๋ฅผ ๋ณต์ ํ์ฌ ๋ก์ปฌ์ feature-login ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋ธ๋์น๋ก ์ ํํฉ๋๋ค.