
๐ฏ Git์ ํ์ฉํ ํจ๊ณผ์ ์ธ ํ์ ๊ณผ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ตํ๊ณ , ์ถฉ๋ ํด๊ฒฐ ๋ฅ๋ ฅ์ ํฅ์์์ผ ํ ํ๋ก์ ํธ์์ ์ํํ ๊ฐ๋ฐ ์งํ์ ๋ชฉํํฉ๋๋ค.
feature/login, feature/select-productrelease-1.3, release-1.4hotfix-1.2.1โcommit์ ํ๋ฉด ํ์ฌ ์์นํ ๋ธ๋์น์ ๋ด์ฉ์ด ๋ฐ์๋๋ฏ๋ก, ๋ธ๋์น ์์น ํ์ธ์ด ์ค์ํฉ๋๋ค. (๋ธ๋์น ์์น๋ ์ผ์ชฝ ํ๋จ์ด๋ git bash์์ ํ์ธ ๊ฐ๋ฅ)
![]()
git branch -d ๋ธ๋์น๋ช
: ํด๋น branch๋ฅผ ์ญ์ ํฉ๋๋ค.
git branch -r : ํ์ฌ ์๊ฒฉ์ ์ฅ์์ ์ฐ๊ฒฐ๋ ๋ธ๋์น๋ฅผ ๋ณด์ฌ์ค๋๋ค.
git log : commitํ ๊ธฐ๋ก๋ค์ ๋ณด์ฌ์ค๋๋ค. 
git push ์๊ฒฉ์ ์ฅ์๋ณ์นญ ๋ธ๋์น๋ช
: ํด๋น branch๋ฅผ ์๊ฒฉ์ ์ฅ์์ ์ฌ๋ฆฝ๋๋ค.git branch feature/login์ผ๋ก ๋ง๋ค์๋ branch)
โก๏ธ ์๋ก ์์ฑํ ๋ธ๋์น๊ฐ ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๊ฐ ์ฌ๋ผ๊ฐ ๋ชจ์ต
๋ณํฉ(Merge) : Git์์ ์ฌ๋ฌ branch๋ฅผ ํ๋๋ก ํฉ์น๋ ๊ณผ์ ์ ๋๋ค.


main ๋ธ๋์น์์ feature/login ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์์
์ ์งํํ๊ธฐ ๋๋ฌธ์, main ๋ธ๋์น๋ฅผ ๋ณดํธํ๊ธฐ ์ํด Protect this branch ๋ฒํผ์ ๋๋ฌ ๋ธ๋์น ๋ณดํธ ์ค์ ์ ํด์ค๋๋ค.
(๊ฒฝ๋ก : Repository > Settings > Branches )

๋ณดํธํ ๋ชฉ๋ก๋ค์ ์ ํํ์ฌ์ค๋๋ค.

branch๋ฅผ ๋ณํฉํ๊ธฐ ์ํด compare & pull request ๋ฒํผ์ ํตํด PR(Pull Request)๋ฅผ ํด์ค๋๋ค.
PR(Pull Request)๋?
ํ ๋ธ๋์น์์ ์์ ํ ๋ด์ฉ์ ๋ค๋ฅธ ๋ธ๋์น์ ๋ณํฉ์ ์์ฒญํ๋ ๋ฐฉ์์ ๋๋ค.

(๋ฒํผ์ด ์์ด์ ธ๋ Contribute ๋ฒํผ์ ํตํด์ PR ๊ฐ๋ฅํฉ๋๋ค)

์ถ๊ฐํ ๋ด์ฉ๋ค์ markdown์ผ๋ก ์ ์ ๋ค Create pull request ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.

5.Merge pull request์ ๋๋ฌ merge commit์ ์ ๊ณ ๋ณํฉํด์ค๋๋ค.


Github์์ feature/login branch๋ฅผ ์ญ์ ํ์์ง๋ง ๋ก์ปฌ์์๋ ๊ทธ๋๋ก์ธ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

์ด๋ฅผ ์ํด Github์ ๋๊ธฐํ๊ฐ ํ์ํฉ๋๋ค.
git fetch -p : ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ๋๊ธฐํํฉ๋๋ค. (-p๋ (prune)๊ฐ์ง์น๊ธฐ๋ฅผ ์๋ฏธํฉ๋๋ค.)
git branch -r๋ก ์๊ฒฉ ๋ธ๋์น feature/login branch๊ฐ ํ์ธํ๋ฉด ์ฌ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
โ ๏ธ ๋ฐ์ํ ์ค๋ฅ
๋ก์ปฌ์์๋
feature/loginbranch๋ฅผ ์ญ์ ๋ฅผ ํ๊ธฐ ์ํด main์ผ๋ก ์ฎ๊ฒจ๊ฐ ์ญ์ ๋ฅผ ํ๋ ค ํ์ง๋ง,error: the branch 'feature/login' is not fully merged์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
๐ก ํด๊ฒฐ ๊ณผ์
์๊ฒฉ์ ์ฅ์์์ merge๋ ๊ฒ์ ๊ฐ์ ธ์จ ๋ค์์ผ
feature/loginbranch๋ฅผ ์ญ์ ํ ์ ์์์ต๋๋ค.
Github์์ feature/1, feature/2 branch๋ฅผ ์์ฑํ์์ต๋๋ค.

์๊ฒฉ์ ์ฅ์์ ์๋ branch๋ฅผ git fetch -p ๋ก ๋๊ธฐํํด์ค๋๋ค.

์๊ฒฉ ์ ์ฅ์์ feature/1 ๋ธ๋์น๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ฐ๊ฒฐํด์ค๋๋ค.
git checkout -t origin/๋ธ๋์น์ด๋ฆ : ์๊ฒฉ ์ ์ฅ์์์ ์๋ก์ด ๋ธ๋์น๋ฅผ ๋ก์ปฌ ๋ธ๋์น๋ก ์ถ์ ํฉ๋๋ค.
(-t๋ (track)์ถ์ ์ ์๋ฏธํฉ๋๋ค.)
๐ค ์
origin/์ ๋ถ์ฌ์ผ ํ ๊น?
origin/์ ์๊ฒฉ ์ ์ฅ์์ ๊ธฐ๋ณธ ์ด๋ฆ์ ๋๋ค.git checkout -t ๋ธ๋์น์ด๋ฆ์์๋ ๋ก์ปฌ ์ ์ฅ์๋ก ๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํ๋ ๊ฒ์ด๋ฏ๋ก, ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ๋ก์ปฌ์์ ์ถ์ ํ๋ ค๋ฉด ์๊ฒฉ ์ ์ฅ์ ์ด๋ฆorigin/์ ๋ถ์ฌ์ผ ํฉ๋๋ค.
์ถฉ๋์ ๊ฐ์ ํ๊ธฐ ์ํด clone์ ํ์ฌ feature/2 ๋ธ๋์น์์ ์์
ํ๊ฒ ์ต๋๋ค.

๋์ผํ ํ์ผ์ ๋์ผํ ๊ณต๊ฐ์ ๋ค๋ฅธ ๋ด์ฉ์ ์จ์ ๊ฐ ๋ธ๋์น(feature/1, feature/2)์ pushํฉ๋๋ค.

feature/1์ ์์ ํ๋ pull request ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋ธ๋์น๊น์ง ์ญ์ ํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ main์ผ๋ก checkout์ ํ ๋ค git pull origin main์ ํตํด main์ ์ ์ฅ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ git branch -d feature/1์ ํตํด ๋ก์ปฌ ๋ธ๋์น๋ ์ญ์ ํด์ค๋๋ค.

์ด์ feature/2๋ฅผ pull request๋ฅผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋์ ์ผ๋ก ๋ณํฉํ ์ ์๋ค๊ณ ๋์ต๋๋ค.

create pull request ๋ฒํผ์ ๋๋ฅด๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๋ค๊ณ ๋น๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด resolve conflicts ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.

๊ทธ๋ฌ๋ฉด ์ถฉ๋์ด ์๊ฒจ๋ ๋ถ๋ถ์ด ํ์๋ฉ๋๋ค.

์ถฉ๋์ด ์ผ์ด๋ ๋ถ๋ถ์์ ๋จ๊ธธ ๋ด์ฉ๋ง์ ๋จ๊ธด ํ mark as resolved ๋ฒํผ์ ๋๋ฅด๊ณ commit merge ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.

๊ทธ๋ฌ๋ฉด ์ ์์ ์ผ๋ก ๋ณํฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ณํฉ์ ํ๊ณ ๋๊ฐ์ด branch๋ฅผ ์ญ์ ํด์ค๋๋ค.

๋ฉ์ธ ํ๋ฉด์๋ feature/2์ผ๋ก ๋ณํฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ผํ๊ฒ git pull origin main์ ํตํด main์ ์ ์ฅ๋ ๋ด์ฉ์ ๋ถ๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ git branch -d feature/2์ ํตํด ๋ก์ปฌ ๋ธ๋์น๋ ์ญ์ ํด์ค๋๋ค.

feature1 ๋ด์ฉ์ ์ ์๋ ์๋์ฐ์์๋ ๋ค๋ฅธ main์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค์ git pull origin main์ผ๋ก ๋ฌ๋ผ์ง main ๋ด์ฉ์ ๊ฐ์ง๊ณ ์ต๋๋ค. โก๏ธ ๋์ผํ๊ฒ ๋ด์ฉ์ด ๋ง์ถฐ์ง ๊ฒ์ ์ ์ ์์ต๋๋ค.
PR(Pull Request) ๊ณผ์ , Git Conflicts ์ง์ ๋ฐ์์ํค๋ฉฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์๊ณ , ๋ branch๋ฅผ ์์ฑํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๊ณผ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋ธ๋์น ์์ฑ๊ณผ ๋ณํฉ, ์ถฉ๋ ํด๊ฒฐ ๊ณผ์ ์ ์ค์ตํ๋ฉด์ ์ถฉ๋ ๊ณผ์ ์์ ์ด๋ ค์ํ์ง ์๊ณ ํด๋ผ ์ ์๋ ์์ ๊ฐ์ ์ป์ ๊ฒ ๊ฐ๋ค.