
์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ง์ฃผํ๋ ๋๊ด์ ์ฝ๋ ์์ฑ ๊ทธ ์์ฒด๊ฐ ์๋๋ผ, ๋ฐ๋ก '์ด๋ป๊ฒ ์ฝ๋๋ฅผ ํฉ์น๊ณ ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ'์ ๋ํ ๋ฌธ์ ์ ๋๋ค. ํนํ 6๋ช ์ด์์ ํ์์ด ํจ๊ปํ๋ ํ๋ก์ ํธ๋ผ๋ฉด ํ์๊ด๋ฆฌ์ ์ค์์ฑ์ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ์ง๋์น์ง ์์ต๋๋ค. ์ด๊ธฐ ํ๋ก์ ํธ์์๋ ๋ชจ๋ ํ์์ด main branch ํ๋์ ์ง์ ์์ค๋ฅผ ์ปค๋ฐํ๊ณ ํธ์ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณค ํฉ๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๊ธฐ๋ฅ์ด ๋ค์ํด์ง์๋ก, ์ด ๋ฐฉ์์ ์๊ธฐ์น ๋ชปํ ์ฝ๋ ์ถฉ๋(Conflict)๊ณผ ์์ค ์ ์ค, ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌ ํ๊ฒฝ์ ๋ถ์์ ์ฑ์ด๋ผ๋ ํฐ ๋ฆฌ์คํฌ๋ฅผ ์๊ฒ ๋ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ์๊ด๋ฆฌ ๋๊ตฌ์ธ Git์ ์ฌ์ฉํ๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ ๋จ์ํ ์ฝ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํจ์ด ์๋๋ผ, '์์ ํ๊ฒ ํ์ ํ๊ธฐ ์ํจ' ์ ๋๋ค. ์ด๋ฅผ ์ํด ํ์ํ ๊ฒ์ด ๋ฐ๋ก 'Branch ์ ๋ต'์ ๋๋ค. main ๋ธ๋์น๋ ์ธ์ ๋ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ ์ ์๋ '์์ฑ๋ณธ'์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ฉฐ, ๋ชจ๋ ์คํ์ ์ธ ์ฝ๋์ ๊ฐ๋ณ ์์ ์ ๋ ๋ฆฝ๋ ๊ณต๊ฐ์ธ '๊ฐ๋ณ ๋ธ๋์น'์์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ํ์ฅ์ ์ด ๊ฐ๋ณ ์์ ๋ค์ ๊ฒํ ํ ๋ค ์ต์ข ์ ์ผ๋ก main์ ํฉ์น๋ ์ญํ ์ ์ํํจ์ผ๋ก์จ ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ํ์ง์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
ํ์ ๊ฐ์์ ์ด๋์ ๋ก ๋ ๋ธ๋์น๋ฅผ ๋ง๋ค๋ฉด, ๋ด๊ฐ ์์ ํ ์ฝ๋๊ฐ ํ์ธ์ ์ฝ๋์ ์ฆ๊ฐ์ ์ธ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฏ๋ก ์ฌ๋ฆฌ์ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๊ฐ๋ฐ์ ์ง์คํ ์ ์์ต๋๋ค. ๋ํ ํ์ฅ์ ๋๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ๋์ง ์ง๊ด์ ์ผ๋ก ํ์ ํ ์ ์์ด ๊ด๋ฆฌ ํจ์จ์ด ๊ทน๋ํ๋ฉ๋๋ค. ๋ง์ ์ ๋ฌธ์๊ฐ Git์ ์ด๋ ค์ํ๋ ์ด์ ๋ ํ๊ฒฝ๋ง๋ค ์ฌ์ฉ๋ฒ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ๊ฐ๋ฐ ํ์ฅ์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ค ์ค, 3๊ฐ์ง (GitHub ์น ์ฌ์ดํธ, STS(Eclipse), Git Bash ์ปค๋งจ๋๋ผ์ธ)๋ฅผ ํตํด ๋ธ๋์น๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๊ฐ์ด๋ํฉ๋๋ค.
GitHub ์ฌ์ดํธ์์ ๋ธ๋์น ์์ฑํ๊ธฐ
๊ฐ์ฅ ๋น ๋ฅด๊ณ ๊ฐํธํ ๋ฐฉ๋ฒ์ผ๋ก, ์ ์ฅ์ ๊ด๋ฆฌ์๋ ํ์ฅ์ด ์๊ฒฉ์ง์ ๋ธ๋์น๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด ๋ ๋ ์ ์ฉํฉ๋๋ค.
1. ํ๋ก์ ํธ์์ ์ฌ์ฉ์ค์ธ Repository์ main ๋ธ๋์น๋ก ์ด๋ํด์ฃผ์ธ์. ์ด๋ ํ main ๋ธ๋์น ์ ๋ ํธ ์ 'Branch'๋ฅผ ๋๋ฌ์ฃผ์ธ์.

2. 'New branch' ๋ฒํผ์ ๋๋ฌ์ฃผ์ธ์.

3. New branch name ํญ๋ชฉ์ ์ํ๋ ๋ธ๋์น๋ช ์ ์์ฑ ํ, 'Create new branch' ๋ฒํผ์ ๋๋ฌ์ฃผ์ธ์.

4. ๋ธ๋์น๋ช ์ผ๋ก ์์ฑํ 'member1' ๋ธ๋์น๊ฐ ํ์ ๋ธ๋์น๋ก ์์ฑ๋๋๊ฑธ ํ์ธ ํ ์ ์์ต๋๋ค.

5. 1-4๋ฒ ๋ฐฉ๋ฒ ์ธ์ ๋๋ ํด๋น Repository์์ 'main' ๋ธ๋์น ์ ๋ ํธ ํญ๋ชฉ์ ์ด์ด์ ๋ํ๋๋ ๊ฒ์๋์ ์ถ๊ฐํ ๋ธ๋์น๋ช ์ ์ ๋ ฅ ํ, ์๋๋ก ์ถ๋ ฅ๋๋ 'Create branch member2 from main' ๋ฌธ๊ตฌ๋ฅผ ํด๋ฆญํ๋ฉด main ํ์ ๋ธ๋์น๋ก ์ ๋ ฅํ member2 ๋ธ๋์น๊ฐ ๋ง๋ค์ด์ง๋๋ค.

1-4๋ฒ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ์ ๋ธ๋์น๋ฅผ ์์ฑํ ์ ์๊ณ , 5๋ฒ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ๋จํ๊ฒ ๋ธ๋์น๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
STS Git GUI๋ก ๋ธ๋์น ์์ฑํ๊ธฐ
IDE ํ๊ฒฝ์ ๋ฒ์ด๋์ง ์๊ณ ๊ฐ๋ฐ ํ๋ฆ ์์์ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
1. STS์์ Window > Show View > Other๋ฅผ ํด๋ฆญํฉ๋๋ค.

2. 'git'์ ๊ฒ์ ํ, Git Repositories View๋ฅผ ์ ํ ํ Open ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

3. Git Repositories View๊ฐ ์ด๋ฆฝ๋๋ค.

4. ํด๋น Repository์ ๋ง์ฐ์ค ์ฐ ํด๋ฆญํ, Switch To > New Branch ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

5. main ๋ธ๋์น ํ์๋ก ์๋กญ๊ฒ ๋ง๋ค๊ธฐ ์ํด 'Select' ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

6. Remote Trackingํญ๋ชฉ์ 'origin/main'์ ์ ํ ํ, OK ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

Source๋ฅผ์ ํํ๋ ๊ณผ์ ์ '์ด๋ค ์์ ์ ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ์ ๋ธ๋์น๋ฅผ ๋ง๋ค ๊ฒ์ธ์ง'๋ฅผ ๊ฒฐ์ ํ๋ ์ค์ํ ๋จ๊ณ์ ๋๋ค.
๐ ์ค์!
1. Local (๋ก์ปฌ)
- ํ์ฌ ๋ด ์ปดํจํฐ(Local)์ ์ ์ฅ๋์ด ์๋ ๋ธ๋์น๋ค์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
- main ๋ธ๋์น๋ฅผ pull ๋ฐ์์ ๋ด ์ปดํจํฐ์ ์ต์ ์ํ๋ก ๊ฐ์ง๊ณ ์๋ค๋ฉด, Local ์๋์ refs/heads/main์ ์ ํํ๋ฉด ๋ฉ๋๋ค.
2. Remote Tracking (์๊ฒฉ ์ถ์ )
- ์๊ฒฉ ์ ์ฅ์(GitHub)์ ์๋ ๋ธ๋์น ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. ๋ณดํต origin/main ๊ณผ ๊ฐ์ ํํ๋ก ํ์๋ฉ๋๋ค.
- ๋ด ๋ก์ปฌ main์ด ์ต์ ์ธ์ง ํ์ ํ ์ ์์ ๋, GitHub ์๋ฒ์ ์๋ ์ต์ main์ ๊ธฐ์ค์ผ๋ก ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ํด๋น ํญ๋ชฉ์ ์ ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ํฉ๋๋ค.
3. Tags (ํ๊ทธ)
- ์ปค๋ฐ ๊ธฐ๋ก ์ค ํน์ ์์ ์ ์ฐ์ด๋์ ์ด์ ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
- ํ์ฌ ์งํ์ค์ธ ์ฝ๋๊ฐ ์๋๋ผ, ๊ณผ๊ฑฐ์ ํน์ ์ถ์ ๋ฒ์ (Tag) ์์ ์ผ๋ก ๋์๊ฐ์ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
4. References (์ฐธ์กฐ)
- Git์ ๋ด๋ถ์ ์ธ ๋ชจ๋ ์ฐธ์กฐ ๊ธฐ๋ก(HEAD, ๊ธฐํ ๋ฉํ๋ฐ์ดํฐ ๋ฑ)์ ์ง์ ์ ํํ๋ ๋ฐฉ์์ ๋๋ค.
- ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์๋ณด๋ค๋ Git์ ๊ตฌ์กฐ๋ฅผ ๊น๊ฒ ๋ค๋ฃจ๋ ๊ณ ๊ธ ์ฌ์ฉ์๊ฐ ํน์ ์ง์ ์ ์ฐพ์ ๋ ์ฌ์ฉํฉ๋๋ค.
7. Source๋ฅผ ์ ํ ํ, Branch name ํญ๋ชฉ์ ์ถ๊ฐํ ๋ธ๋์น๋ช ์ ์ ๋ ฅ ํ Finish ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

8. ํด๋น Repository์ ๋ง์ฐ์ค ์ฐ ํด๋ฆญ ํ, 'Push Branch member3...' ๋๋ฌ ์๊ฒฉ ์ ์ฅ์๋ก ๋ฐ์ํฉ๋๋ค.

9. Remote, Branch ์ ๋ณด๋ฅผ ํ์ธ ํ, Branch ํญ๋ชฉ์์ ์๊น ๋ง๋ค์๋ member3 ๋ธ๋์น๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ์๋ ์์ฑ๋ ํญ๋ชฉ๋ค ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค. ์ ํ ํ, Push ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

โ Branch ํญ๋ชฉ์์ ๋ธ๋์น๋ฅผ ์ ํํ๋ฉด 'refs/heads/...' ๋ผ๊ณ ๋์ค๋๋ฐ ์๋ชป๋ ๊ฑธ๊น์?
์ ์์ ๋๋ค! 'refs/heads/'๋ Git์ด ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํ๋ ๋ด๋ถ ํด๋ ๊ฒฝ๋ก๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. 'refs/heads/member3'๋ member3๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์์น์ ํํ์ด๋ฏ๋ก GitHub์์๋ member3๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๊ฐ ์์ฑ๋๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
10. ์ ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ ํ, Log In ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

11. Push ๋ฉ์ธ์ง๋ฅผ ํ์ธ ํ Close ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.

12. GitHub์ ํด๋น Repository์์ Branch๋ฅผ ํ์ธํด๋ณด๋ฉด ์ถ๊ฐํ member3 ๋ธ๋์น๊ฐ ์์ฑ๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.

Git Bash(Terminal) ๋ช ๋ น์ด๋ก ์์ฑํ๊ธฐ
๋ช ๋ น์ด๋ฅผ ์ง์ ์ ๋ ฅํ๋ฉฐ Git์ ์๋ฆฌ๋ฅผ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ฉฐ ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ์ ํํ ๋ฐฉ๋ฒ์ ๋๋ค.
1. Git Bash์์ ํด๋น ํ๋ก์ ํธ ํ์ผ์ด ์๋ ์์น๋ก ์ด๋ํด์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ main ๋ธ๋์น๋ก ์ ํ ํ, ์ต์ ๋ฐ์ดํฐ ํ์ผ๋ก ๋๊ธฐํ๋ฅผ ์งํํฉ๋๋ค. (์ต์ ์ ๋ฐ์ดํธ)

# ์ฌ์ฉ ๋ช ๋ น์ด
cd 999.NEW_CLASS/03.SPRING2\(STS4\)/workspace_spring2/GitPushTest01
git checkout main
git pull origin main
cd {ํ๋ก์ ํธ ํ์ผ ์์น ๊ฒฝ๋ก}
- Git์ ์ฌ์ฉํ๊ธฐ ์ํ ํ๋ก์ ํธ ์์น๊น์ง cd ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ์ด๋ํฉ๋๋ค.
git checkout main
- ๋ธ๋์น๋ฅผ main์ผ๋ก ์ ํํฉ๋๋ค.
git pull origin main
- ํด๋น ํ๋ก์ ํธ ํ์ผ์ ์๊ฒฉ ์ ์ฅ์์ ์ ์ฅ๋์ด ์๋ ์ต์ ํ์ผ๋ก์ ๋๊ธฐํ๋ฅผ ์งํํฉ๋๋ค. (์ ๋ฐ์ดํธ)
๐ ์ค์!
Git ํ์ ์์ ๊ฐ์ฅ ๋ฌด์์ด ์ ์ '์ถฉ๋(Conflict)'์ ๋๋ค. ๋ณธ์ธ์ด ์ด์ ํ๋ก์ ํธ๋ฅผ ๋ด๋ ค๋ฐ์๋๋ผ๋, ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํ์์ด ๊ธฐ๋ฅ์ ์์ฑํด์ main์ ์ฝ๋๋ฅผ Commit & Push๋ฅผ ํ์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ์ํ์์ ๋ด๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ์ด์ ์ ํ์ผ์ ์์ ์, ์ถฉ๋์ด ๋ ํ๋ฅ ์ด ๋งค์ฐ ๋์ต๋๋ค. ๋ฐ๋ผ์ ์๋ก์ด ์์ ์ ์์ํ๊ธฐ ์ง์ ์ ์๋ฒ์ ์ต์ ์ํ๋ฅผ ๋ด ์ปดํจํฐ๋ก ๊ฐ์ ธ์ ๋๊ธฐํ๋ฅผ ์งํํด์ผ ํฉ๋๋ค.
2. 'git checkout -b member4' ๋ช ๋ น์ด๋ก ์๋ก์ด ๋ธ๋์น member4๋ฅผ ๋ง๋ค๊ณ ์ง์ ํฉ๋๋ค.

# ์ฌ์ฉ ๋ช ๋ น์ด
git checkout -b member4
git checkout -b member4
- ์๋ก์ด ๋ธ๋์น member4๋ฅผ ๋ง๋ค๊ฒ ๋ค๋ ๋ช ๋ น์ด์ ๋๋ค. ์ด๋, '-b' ์ต์ ์ Branch์ ์ฝ์๋ก ๋ธ๋์น ์์ฑ๊ณผ checkout ๋ช ๋ น์ด๋ก ์ด๋์ ๋์์ ์ํํ๋ผ๋ ๋ช ๋ น์ด์ ๋๋ค.
3. 'git push origin member4' ๋ช ๋ น์ด๋ก ์๋กญ๊ฒ ๋ง๋ member4 ๋ธ๋์น๋ฅผ main ๋ธ๋์น ํ์๋ก pushํฉ๋๋ค.

# ์ฌ์ฉ ๋ช ๋ น์ด
git push origin member4
git push origin member4
- ๋ด Local์ ์๋ member4 ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ํ๊ฒ ๋ค๋ ๋ช ๋ น์ด์ ๋๋ค.
4. ์๋กญ๊ฒ ์ถ๊ฐ๋ member4 ๋ธ๋์น๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.

@Junesker