๐Ÿฑ Git๊ณผ ์นœํ•ด์ง€๊ธฐ

Nintoยท2022๋…„ 11์›” 24์ผ
18

ํ˜‘์—…๊ณผ ๊ณต์œ 

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

"๊นƒ? ๊นƒํ—ˆ๋ธŒ๋Š” ๋˜ ๋ญ์•ผ..? ์šฐ๋ฆฌ ์นœํ•ด์งˆ ์ˆ˜ ์žˆ๋Š”๊ฑฐ๋‹ˆ?๐Ÿ˜‚"

์ด๋ฒˆ ์šฐํ…Œ์ฝ” 5๊ธฐ ํ”„๋ฆฌ์ฝ”์Šค 1์ฃผ์ฐจ์˜ ๋ฏธ์…˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ

Git๊ณผ Github์— ์ต์ˆ™ํ•ด์ง€๋Š” ๊ฒƒ ์ด์˜€๋‹ค.

์‹ค์ œ๋กœ ์ด๋ฒˆ ํ”„๋ฆฌ์ฝ”์Šค 4์ฃผ๋™์•ˆ
git๊ณผ github๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฏธ์…˜ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•ด์•ผ ํ–ˆ๋‹ค.

๊ทธ ๋™์•ˆ Git์„ ๋ฌด์˜์‹์ ์œผ๋กœ๋งŒ ์‚ฝ์งˆํ•ด๊ฐ€๋ฉฐ
addํ•˜๊ณ  commitํ•˜๊ณ  pushํ•˜๋ฉด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ˆœ๊ฐ„์ด ๋งŽ์•˜๋Š”๋ฐ,
์ด์ฐธ์— Git์— ๋Œ€ํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ํŒŒ๊ณ  ๋“ค๊ณ , ์นœํ•ด์ ธ ๋ณด๋„๋ก ํ•˜์ž.



๐Ÿš‚ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ˆœ์„œ

Git์— ๋Œ€ํ•ด ํŒŒ๊ณ  ๋“ค๊ธฐ ์ „์—,
Git๊ณผ Github๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์ถœํ•˜๋Š” ์ˆœ์„œ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด์ž.

๐Ÿด 1. ํ”„๋กœ์ ํŠธ๋ฅผ ์ž์‹ ์˜ ๊ณ„์ •์œผ๋กœ fork ํ•˜๊ธฐ

fork๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ €์žฅ์†Œ๋ฅผ ์ž์‹ ์˜ ๊ณ„์ •์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋ชจ๋“  ๋ฏธ์…˜์€ ์ž์‹ ์˜ ๊ณ„์ • ์•„๋ž˜์— ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•ด ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.

Github์—์„œ ๋ฏธ์…˜ ์ €์žฅ์†Œ์˜ ๋งํฌ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋ฉด,
์šฐ์ธก ์ƒ๋‹จ์— fork ๋ฒ„ํŠผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด forkํ•˜๋ฉด ๋‚ด github ์ €์žฅ์†Œ์— ๋ณต์‚ฌ๋˜์–ด ์ถ”๊ฐ€๋œ๋‹ค.

fork๋Š” ๋‹จ์–ด์ ์œผ๋กœ๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐ๋จนํ•œ๋‹ค๋Š” ๋Š๋‚Œ์„ ์ค€๋‹ค.
๋ง ๊ทธ๋Œ€๋กœ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋ฅผ ์ฐ์–ด์„œ ๋‚ด ์ €์žฅ์†Œ ์ ‘์‹œ ์œ„์— ์˜ฌ๋ ค๋†“๋Š” ๋Š๋‚Œ์ด๋‹ค.


๐Ÿ‘ฅ 2. forkํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ์— cloneํ•˜๊ธฐ

fork๋ฅผ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด ๋‚ด ์ €์žฅ์†Œ์— ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๊ฐ€ ๋ณต์‚ฌ๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‚ด ๋กœ์ปฌpc(๋ณธ์ธ์˜ ์ปดํ“จํ„ฐ)๋กœ
clone(๋ณต์‚ฌ)ํ•ด๋†“๋Š” ๊ณผ์ •์ด ๋˜ ํ•„์š”ํ•˜๋‹ค.

fork๊ฐ€ ์ €์žฅ์†Œ์— ๋ณต์‚ฌ๋ฅผ ํ•ด๋†“๋Š” ๊ฒƒ ์ด์˜€๋‹ค๋ฉด,
clone์€ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๊ฒƒ์„ ๋กœ์ปฌpc๋กœ ๋ณต์‚ฌํ•ด๋†“๋Š” ๋Š๋‚Œ์ด๋‹ค.

forkํ•œ ์ €์žฅ์†Œ๋Š” github.com์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

clone ๋ช…๋ น์€ github.com์— ์กด์žฌํ•˜๋Š” ์ด ์ €์žฅ์†Œ๋ฅผ ์ž์‹ ์˜ ๋…ธํŠธ๋ถ ๋˜๋Š” PC๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ์ž…๋ ฅํ•œ๋‹ค.

git clone https://github.com/{๋ณธ์ธ_์•„์ด๋””}/{์ €์žฅ์†Œ ์•„์ด๋””}.git
ex) git clone https://github.com/woowacourse/java-baseball.git

// cloneํ•œ ํด๋”๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•
cd {์ €์žฅ์†Œ ์•„์ด๋””}
ex) cd java-baseball

ํด๋ก ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‚ด ๋กœ์ปฌpc์— ๋˜‘๊ฐ™์ด ๋ณต์‚ฌ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ”ง 3. ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜(์ž‘์—…๊ณต๊ฐ„) ์ƒ์„ฑ

git์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด
๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•ด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

git checkout -b {๋ณธ์ธ ์•„์ด๋””}
ex) git checkout -b javajigi

๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด ๋กœ์ปฌpc์— ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ž‘์—…๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป 4. ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋’ค, ๊ธฐ๋Šฅ ๊ตฌํ˜„

๋ฏธ์…˜ ์ง„ํ–‰์„ ์œ„ํ•ด cloneํ•œ ์ €์žฅ์†Œ๋ฅผ
์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ(VS code๋‚˜ IntelliJ ๋“ฑ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.

1. Visual Studio Code๋ฅผ ์‹œ์ž‘
2. Open Project (์•ž์—์„œ cloneํ•œ ํด๋”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.)
3. ๋ฏธ์…˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ฉ 5. ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ›„ add, commit, push ํ•˜๊ธฐ

๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด add, commit ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

git status // ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ํ™•์ธ
git add -A(๋˜๋Š” .) // ๋ณ€๊ฒฝ๋œ ์ „์ฒด ํŒŒ์ผ์„ ํ•œ๋ฒˆ์— ๋ฐ˜์˜
git commit -m "๋ฉ”์‹œ์ง€" // ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๋ฉ”์‹œ์ง€์— ๊ธฐ๋ก

๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•˜๊ณ  add, commit ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„์˜ ์ƒํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ๋กœ์ปฌpc์— ๊ธฐ๋Šฅ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ์ปค๋ฐ‹ํŒŒ์ผ๋“ค์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ๋‚˜์˜ ์›๊ฒฉ ์ €์žฅ์†Œ์— commit๋œ ํŒŒ์ผ๋“ค์„ ์˜ฌ๋ ค์ค˜์•ผํ•œ๋‹ค.
๋กœ์ปฌ์—์„œ commit ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋กœ์ปฌ ์ €์žฅ์†Œ์—๋งŒ ๋ฐ˜์˜๋˜๊ณ ,
์›๊ฒฉ github.com์˜ ์ €์žฅ์†Œ์—๋Š” ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

github.com์˜ ์ €์žฅ์†Œ์—๋„ ๋™์ผํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

git push origin ๋ธŒ๋žœ์น˜์ด๋ฆ„
ex) git push origin javajigi

push ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„์˜ ์ƒํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

push๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ๋‚ด Github์— ๋งŒ๋“ค์—ˆ๋˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์˜ฌ๋ผ์˜จ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ ,
๊ทธ ์•ˆ์— commitํ–ˆ๋˜ ํŒŒ์ผ๋“ค์ด ๊ธฐ๋ก ๋œ ๋ชจ์Šต์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฎ 6. github ์„œ๋น„์Šค์—์„œ Pull Request๋ฅผ ๋ณด๋‚ธ๋‹ค.

Pull Request๋Š” github์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ฝ”๋“œ๋ฆฌ๋ทฐ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Pull Request๋Š” original ์ €์žฅ์†Œ(woowacourse์˜ ์ €์žฅ์†Œ)์˜ main ๋ธŒ๋žœ์น˜์™€
์•ž ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„(์•ž ๋‹จ๊ณ„์˜ ์˜ˆ์—์„œ๋Š” javajigi)์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ex) ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•œ javajigi/java-baseball javajigi ๋ธŒ๋žœ์น˜ => woowacourse/java-baseball main
๋ธŒ๋žœ์น˜๋กœ Pull Request๋ฅผ ๋ณด๋‚ธ๋‹ค.
  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ github ์ €์žฅ์†Œ์— ์ ‘๊ทผ
  2. ๋ธŒ๋žœ์น˜๋ฅผ ์ž‘์—… ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ(์•ž ๋‹จ๊ณ„์˜ ์˜ˆ์—์„œ๋Š” javajigi)
  3. ๋ธŒ๋žœ์น˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” "New pull request" ๋ฒ„ํŠผ ํด๋ฆญ
  4. Pull Request ์ œ๋ชฉ์€ [$๋ฏธ์…˜์ œ๋ชฉ] $์ด๋ฆ„ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  5. ํ˜„์žฌ ๋ฏธ์…˜์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜๊ณ  "Create pull request" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด Pull Request๋ฅผ ๋ณด๋‚ด์ฃผ์„ธ์š”.

ํ’€๋ฆฌํ€˜์ŠคํŠธ๊นŒ์ง€ ๋ชจ๋‘ ๋งˆ์น˜๋ฉด
๋ฏธ์…˜์ €์žฅ์†Œ์— ๋‚ด๊ฐ€ ์ž‘์—…ํ–ˆ๋˜ ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹๋‚ด์šฉ๋“ค์ด PR๋œ ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ๋  ์ ์€,

1. Pull Request๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „ ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค.
๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ž‘์—…์„ fork๋œ Repository์˜ main branch๊ฐ€ ์•„๋‹Œ,
๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์ƒˆ๋กœ ๋งŒ๋“  ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ํ›„ PR์„ ๋ณด๋‚ธ๋‹ค.

2. PR์„ ํ•œ ๋ฒˆ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๋‹ซ์ง€ ๋ง๊ณ  ์ถ”๊ฐ€ ์ปค๋ฐ‹์„ ํ•œ๋‹ค.
PR์„ ์ด๋ฏธ ํ•œ ๋ฒˆ ๋ณด๋ƒˆ๋‹ค๋ฉด, ์ƒˆ๋กœ์šด PR์„ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ถ”๊ฐ€ ์ปค๋ฐ‹์„ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋œ๋‹ค.


๐Ÿšฃ upstream ๊ณผ origin

๋งŒ์•ฝ upstream, origin์ด ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์•„๋ž˜์˜ ๋‚ด์šฉ๋“ค์ด ๋„์›€์„ ์ค„ ๊ฒƒ์ด๋‹ค.

upstream์€ ์ƒ๋ฅ˜, downstream์€ ํ•˜๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ด ์šฉ์–ด๋“ค์€ ๊ต‰์žฅํžˆ ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๋‹ค.
์ ˆ๋Œ€์ ์ธ upstream๊ณผ downstream์€ ์—†๋‹ค.

๊ด€๊ณ„์˜ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ
์ƒ๊ฒจ๋‚œ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ์ถ”๊ฐ€๋กœ ์‚ดํŽด๋ณด์ž.

๋ณดํ†ต ์ €์žฅ์†Œ ์ƒ์„ฑํ•˜๊ณ  remote addํ•˜๊ณ  origin์„ ๋ถ™์—ฌ์ฃผ๊ฑฐ๋‚˜,
pull์„ ํ•˜๊ฑฐ๋‚˜ push๋ฅผ ์‚ฌ์šฉํ• ๋•Œ origin์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ๋‹ค.

remote๋Š” "์›๊ฒฉ" , "์›๊ฒฉ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”" ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์›๊ฒฉ์ €์žฅ์†Œ์˜ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  ๊ฐ€์žฅ ๋จผ์ € clone์„ ํ•˜๋ฉฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
clone์ด ์™„๋ฃŒ๊ฐ€ ๋œ ํ›„ git remote -v ๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด
์ž๋™์ ์œผ๋กœ ์›๊ฒฉ ์ €์žฅ์†Œ๊ฐ€ ๋“ฑ๋ก์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

git remote add origin ๋‚ด ์›๊ฒฉ์ €์žฅ์†Œ ์ฃผ์†Œ

git push -u origin main
//๋‚ด main ๋ธŒ๋žœ์น˜๋กœ pushํ•œ๋‹ค.

์ด๋•Œ origin์€ ๋ง ๊ทธ๋Œ€๋กœ ์›์ฒœ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

๋ฌผ์ด ํ๋ฅด๋Š” ๋ฐฉํ–ฅ์ด ์žˆ์œผ๋ฉด ๊ทธ ๋ฌผ์˜ ์›์ฒœ(origin)์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ origin์ด๋ผ๋Š” ์›์ฒœ์œผ๋กœ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•ด์„œ
๊ด€๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฐ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด -u ๋Š” ๋ฌด์Šจ ๋ง์ผ๊นŒ?

--set-upstream์˜ ์•ฝ์ž๋กœ ์“ฐ๋Š” ๋ง

์•ž์„œ ์–˜๊ธฐํ–ˆ๋“ฏ์ด upstream, downstream์€ ์ƒ๋Œ€์ ์ธ ๊ฐœ๋…์ด๋‹ค.
์ด๋•Œ ์ƒ๋ฅ˜์™€ ํ•˜๋ฅ˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ -u ๋ฅผ ์จ์„œ ๊ด€๊ณ„๋ฅผ ์„ค์ • ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

remote origin์ด๋ผ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€
์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๋ฉด, ๋ณดํ†ต ๊ทธ ์›์ฒœ๋ณด๋‹ค ๋” ์ƒ์œ„์˜ ํ๋ฆ„(์ƒ๋ฅ˜)๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฒŒ ๋งŽ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— origin ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  upstream์€ ์ •๋ง ๊ฐœ๋…์ ์ธ ์˜๋ฏธ๋กœ๋งŒ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ์œ„ ๊ทธ๋ฆผ์„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๊ณ  ๋ณธ๋‹ค๋ฉด
remote upstream -> remote origin -> local
ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ -> ๋‚˜์˜ ์ €์žฅ์†Œ -> ๋‚˜์˜ ๋กœ์ปฌ
์ด๋Ÿฐ ํ๋ฆ„์ด ๋œ๋‹ค.

์ฒ˜์Œ ์ƒ๋ฅ˜๋Š” forkํ•œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์ €์žฅ์†Œ,
๊ฐ€์šด๋ฐ๋Š” ๋‚˜์˜ github ์ €์žฅ์†Œ,
๋งˆ์ง€๋ง‰์€ ๋‚˜์˜ ๋กœ์ปฌpc๊ฐ€ ๋œ๋‹ค.

์ฆ‰, origin์„ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์„๋•Œ ๋” ์œ„๋กœ ๊ฐ€๋Š”๊ฒŒ upstream๊ฐœ๋…์ด ๋œ๋‹ค.

์ƒ๋ฅ˜์—์„œ ํ•˜๋ฅ˜๋กœ ํ๋ฅด๋ฉด์„œ
์ ์ฐจ ์—ฌ๋Ÿฌ ๊ฐˆ๋ž˜์˜ ์ค„๊ธฐ๋กœ ํ˜๋Ÿฌ๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•ด์ฃผ๋ฉด ์ข‹๋‹ค.

๊ทธ๋ฆฌ๊ณ  git clone์„ ํ•˜๊ฒŒ ๋˜๋ฉด
์ด๋ฏธ origin์„ ์•Œ๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ƒํ•˜๊ด€๊ณ„๊ฐ€ ์ƒ์„ฑ์ด ๋œ๋‹ค.



๐Ÿ•ต git ๋ช…๋ น์–ด์™€ ๊ฐ์ฒด๋“ค

Q. ํ˜น์‹œ add, commit, puch๋ฅผ ๊ธฐ๊ณ„์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ๋‚˜์š”?๐Ÿค”

๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด
ํ„ฐ๋ฏธ๋„์˜ ๋‚ด์žฅ ๊ฐ์ฒด์ธ Git์„ ๋„๊ตฌ๋กœ์„œ ์ž˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณด์ž.

๊ฐ€์žฅ ์ถ”์ฒœํ•ด์ฃผ๊ณ  ์‹ถ์€ ๋ฐฉ๋ฒ•์€
git ์•ˆ์˜ ์‚ฌ์šฉ์„ค๋ช…์ด๋‚˜ ๋„์›€๋ง ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

git์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ๋“ค๋งŒ ์ž˜ ์‚ดํŽด๋ณด์•„๋„ ๋„์›€์„ ๋งŽ์ด ๋ฐ›์„์ˆ˜์žˆ๋‹ค.

์•ž์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์‚ฌ์šฉํ–ˆ๋˜ Git ๋ช…๋ น์–ด๋“ค๊ณผ
๊ทธ ์™ธ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋“ค์„ ์‚ดํŽด๋ณด์ž.

Git ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ๋ช…๋ นํ”„๋กฌํ”„ํŠธ(CMD)
  • ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ํ„ฐ๋ฏธ๋„
  • Git์„ ์„ค์น˜ํ•  ๋•Œ ๋”ธ๋ ค์˜ค๋Š” Git Bash, Git GUI

๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋“  ๋ช…๋ น์–ด๋Š” ๊ฐ™์œผ๋‹ˆ ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.


๐Ÿ“Œ git init

์ƒˆ๋กœ์šด ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

์œ„์—์„œ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ• ๋•Œ ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฏธ์…˜ ์ €์žฅ์†Œ๋ฅผ forkํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ,
์•„์˜ˆ ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

๋จผ์ € ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , cd ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ํด๋” ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค.

cd ํด๋”๊ฒฝ๋กœ

๊ทธ๋ฆฌ๊ณ  git init์„ ์ณ๋ด…์‹œ๋‹ค.

git init

์ƒˆ๋กœ์šด git ์ €์žฅ์†Œ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

Q. ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ git init์„ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋กœ์ปฌ ์ €์žฅ์†Œ๊ฐ€ ๋œ๋‹ค.

์ •๋‹ต์€ yes ์ด๋‹ค.

git์˜ ๋กœ์ปฌ์ €์žฅ์†Œ๋Š” .git ์•ˆ์— ์žˆ๋‹ค.
.git์•ˆ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์žฌ๋ฐŒ๋Š”๋ฐ

tree .git/ ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์“ฐ๋ฉด ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

git init์„ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฉ”์„ธ์ง€๋กœ ํ‘œ์‹œ๋ฅผ ํ•ด์ค€๋‹ค.
๊ฐ€๋Šฅํ•˜๋ฉด ์ด ํ”ผ๋“œ๋ฐฑ ์ฃผ๋Š” ๋ฉ”์„ธ์ง€๋“ค์„ ์ดํ•ดํ•ด ๋ณด๋ คํ•œ ๋‹ค์Œ
์ฐพ์•„๋ณด๋ฉด ํ›จ์”ฌ ๋” git์„ ๋„๊ตฌ๋กœ์„œ ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ช…๋ น์–ด์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด
git init -help ๋ฅผ ์น˜๋ฉด ์„ค๋ช…์ด ์ž˜ ๋‚˜์™€์žˆ๋‹ค.

๋ช…๋ น์–ด๋ฅผ ์ž˜ ์“ธ ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป๊ธฐ์—๋„ ์ข‹๋‹ค.


๐Ÿ“Œ git clone

์ €์žฅ์†Œ ๋ฐ›์•„์˜ค๊ธฐ

๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ(clone)ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

git clone /๋กœ์ปฌ/์ €์žฅ์†Œ/๊ฒฝ๋กœ

์›๊ฒฉ ์„œ๋ฒ„์˜ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

git clone ์‚ฌ์šฉ์ž๋ช…@ํ˜ธ์ŠคํŠธ:/์›๊ฒฉ/์ €์žฅ์†Œ/๊ฒฝ๋กœ

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์‹œ ๋‹ค๋ฅธ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•ด์˜ฌ ๋• ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์˜€๋‹ค.

git clone https://github.com/{๋ณธ์ธ_์•„์ด๋””}/{์ €์žฅ์†Œ ์•„์ด๋””}.git
ex) git clone https://github.com/woowacourse/java-baseball.git

๐Ÿ“Œ git ์ž‘์—… ํ๋ฆ„ tree ๊ฐ์ฒด

๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” git์ด ๊ด€๋ฆฌํ•˜๋Š” ์„ธ ๊ทธ๋ฃจ์˜ ๋‚˜๋ฌด๋กœ ๊ตฌ์„ฑ๋˜์žˆ๋‹ค.

tree๋Š” blob๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค.(๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ์œ ์‚ฌ)
blob์€ git์˜ ํŒŒ์ผ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ git์—๋Š” blob๊ฐ์ฒด(ํŒŒ์ผ)์ด ์žˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋‚˜๋ฌด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ(working directory) ๋Š” ์‹ค์ œ ํŒŒ์ผ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
๋‘๋ฒˆ์งธ ๋‚˜๋ฌด ์ธ๋ฑ์Šค(Index)๋Š” ์ค€๋น„์˜์—ญ(staging area)์˜ ์—ญํ• ์„ ํ•œ๋‹ค.
๋งˆ์ง€๋ง‰ ๋‚˜๋ฌด HEAD๋Š” ์ตœ์ข… ํ™•์ •๋ณธ(commit)์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.


๐Ÿ“Œ git status

ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ

git status

๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ˜„์žฌ git ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€/์‚ญ์ œ ๋œ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
git status๋ฅผ ์น˜๋ฉด git์—๊ฒŒ ์ธ์‚ฌ๋ฅผ ํ•˜์—ฌ ์•ˆ๋ถ€๋ฅผ ๋ฌป๋Š” ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์„ ์ค€๋‹ค.


๐Ÿ“Œ git add

๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ

add๋ฅผ ๋น„์œ  ํ•˜์ž๋ฉด ๋Œ(์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„)์„ ๋“  ๊ฒ€๋Œ•์ด๋“ค(index)๊ณผ ๊ฐ™๋‹ค.

๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์€ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ (์ธ๋ฑ์Šค์—) ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

//ํ•œ๊ฐœ์˜ ํŠน์ • ํŒŒ์ผ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„๋•,
git add ํŒŒ์ผ์ด๋ฆ„

//ํ•œ๋ฒˆ์— ๋ชจ๋“  ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„๋•,
git add .

์ด๊ฒƒ์ด ๋ฐ”๋กœ git์˜ ๊ธฐ๋ณธ ์ž‘์—… ํ๋ฆ„์—์„œ ์ฒซ๋‹จ๊ณ„์— ํ•ด๋‹น๋œ๋‹ค.

ํ•˜์ง€๋งŒ add์„ ํ•˜๋Š” ๊ฒƒ์€ index(์Šคํ…Œ์ด์ง€)์—๋งŒ ์˜ฌ๋ ค๋‘” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—,
commit๊ณผ push๋ฅผ ํ†ตํ•ด HEAD์— ์ตœ์ข…์ ์œผ๋กœ ์˜ฌ๋ ค ๋†“์•„์•ผ ํ•œ๋‹ค.


๐Ÿ“Œ git commit, git push

ํ™•์ •(commit), ๋ณ€๊ฒฝ๋‚ด์šฉ ๋ฐœํ–‰(push)

์šฉ๊ด‘๋กœ(HEAD)๊นŒ์ง€ ๊ฐ€์„œ ์ง‘์–ด๋„ฃ๋Š”๊ฒƒ์ด commit์ด๋ผ๋ฉด, ์šฉ๊ด‘๋กœ์—์„œ ๋…น์ด๋Š” ๊ฒƒ(์›๊ฒฉ์ €์žฅ์†Œ๋กœ ๋ฐ˜์˜)์ด push์ด๋‹ค.

๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ™•์ •ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ๋‚ด๋ ค์•ผ ํ•œ๋‹ค.

git commit -m "์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ž‘์„ฑ"

์ž, ์ด์ œ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์ด HEAD์— ๋ฐ˜์˜๋๋‹ค.
ํ•˜์ง€๋งŒ ์•„์ง ๋กœ์ปฌ์—๋งŒ ์ €์žฅ๋˜์—ˆ๊ณ , ์›๊ฒฉ ์ €์žฅ์†Œ์—๋Š” ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

ํ˜„์žฌ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ์•„์ง ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ HEAD์•ˆ์— ๋จธ๋ฌผ๊ณ  ์žˆ๋‹ค.
์ด์ œ ์ด ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์˜ฌ๋ ค๋ณด์ž.
์•„๋ž˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

git push origin master
(๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ๋ฐœํ–‰ํ•˜๋ ค๋ฉด master ๋Œ€์‹  ์›ํ•˜๋Š” ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.)

๋งŒ์•ฝ ๊ธฐ์กด์— ์žˆ๋˜ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด,
์›๊ฒฉ ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ git์—๊ฒŒ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค.

git remote add origin ์›๊ฒฉ์„œ๋ฒ„์ฃผ์†Œ

์ด์ œ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์›๊ฒฉ ์„œ๋ฒ„๋กœ ๋ฐœํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ตญ status, add, commit, push๋Š” ์ˆœ์ฐจ์  ํ๋ฆ„์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


์•„๋ž˜์—์„œ commit์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ๋‚ด์šฉ์„ ๋” ์•Œ์•„๋ณด์ž.

commit์€ git์˜ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ๊ฐ์ฒด์ด๋‹ค.

๋ณดํ†ต "์ €์žฅ๋‹จ์œ„ ์Šค๋ƒ…์ƒท์„ ์ฐ๋Š”๋‹ค"๋ผ๊ณ  ๋งŽ์ด ์–˜๊ธฐํ•œ๋‹ค.
๋งˆ์ง€๋ง‰ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋”ฑ ์‚ฌ์ง„์„ ์ฐ์€๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด๋Š”๊ฒŒ ์Šค๋ƒ…์ƒท์ด๋‹ค.

commit์€ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์Šค๋ƒ…์ƒท,
๊ฒŒ์ž„์—์„œ์˜ ์„ธ์ด๋ธŒ ํฌ์ธํŠธ์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค.

๊ฒŒ์ž„์—์„œ ์„ธ์ด๋ธŒ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?
๋ถ€ํ™œํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‚ด๊ฐ€ ์‚ฝ์งˆ์„ ํ•˜๊ฑฐ๋‚˜ ๋ง์น˜๊ฑฐ๋‚˜ ํ–ˆ์„๋•Œ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

commit ๊ฐ์ฒด์—๋Š” ์„ธ์ด๋ธŒํฌ์ธํŠธ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•œ ์ •๋ณด๋“ค์ด ํฌํ•จ ๋˜์•ผํ•œ๋‹ค.

์Šคํ…Œ์ด์ง€(index)์˜ ๋‚ด์šฉ์œผ๋กœ tree ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
commit๊ฐ์ฒด๋Š” tree ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

์ปค๋ฐ‹ ๊ฐ์ฒด์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ตœ์ƒ์œ„ ํŠธ๋ฆฌ ๊ฐ์ฒด์˜ ์ฐธ์กฐ
  • ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€
  • ๋ถ€๋ชจ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ

์ฆ‰, ์ €์žฅํ•œ ๋‹จ์œ„์— tree+blob+๋ฉ”ํƒ€์ •๋ณด ๋“ฑ์˜ ์ •๋ณด๋“ค์ด ํฌํ•จ๋œ๋‹ค.

Q. git add๋‚˜ commit ๋ช…๋ น์–ด๋ฅผ ๋‚˜๋ˆˆ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋จผ์ € ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  git add๋ฅผ ํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

tree .git์„ ์ž…๋ ฅํ•ด์„œ tree๊ตฌ์กฐ๋กœ git ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด
index์™€ object๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
git์ด ๊ด€๋ฆฌ๋Œ€์ƒ์ด ๋˜์„œ ํŒŒ์ผ๋‹จ์œ„๋กœ ํŒŒ์ผ์„ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ดํ›„, git commit์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๊ธฐ์„œ ๊ฐ์ฒด๊ฐ€ 2๊ฐœ๊ฐ€ ๋” ์ƒ์„ฑ์ด ๋œ๋‹ค.

๋‚ด๊ฐ€ ์ถ”์ ํ•  ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋œ๋‹ค.
์ด๊ฒƒ์„ commit์„ ํ•˜๊ฒŒ ๋˜๋ฉด tree๊ฐ์ฒด์™€ commit๊ฐ์ฒด๋ฅผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์„œ
์ด 3๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰ git add๋ฅผ ํ–ˆ์„๋•Œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์žˆ๊ณ ,
git commit์„ ํ–ˆ์„๋•Œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒํ•˜๊ด€๊ณ„๊ฐ€ ์ƒ๊ธฐ๊ณ 
๊ด€๋ฆฌํ•˜๋Š” ์ž…์žฅ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•ด์•ผํ•˜๋Š” ์‹œ์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—
๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ์“ฐ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด
"์•„..์ด๋ž˜์„œ ์ด๋Ÿฐ ๊ด€๊ณ„๋“ค์„ ๋งŒ๋“ค๊ณ  ์ฐธ์กฐ๋ฅผ ํ•˜๊ฒŒํ•˜๊ณ  ๋ช…๋ น์–ด๋ฅผ ๋‚˜๋ˆ ๋†จ๊ตฌ๋‚˜!" ๋ผ๊ณ  ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Q. ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ณ  commitํ•˜๋ฉด git์€ ๊ณต๊ฐ„ํšจ์œจ์„ ์œ„ํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ €์žฅํ•œ๋‹ค?

์ •๋‹ต์€ no ์ด๋‹ค.
๊นƒ์€ ์ ˆ๋Œ€๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋งŒ์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.(ํŒŒ์ผ์„ ํ†ต์ฒด๋กœ ์ €์žฅํ•จ)

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๋ฉด ์šฉ๋Ÿ‰์ด ์œ ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ,
git์€ ์†๋„์ ์ธ ์ธก๋ฉด์—์„œ ํ†ต์ฑ„๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ๊ฐ์˜ ํŒŒ์ผ๋“ค๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š”๋ฐ
๊ทธ๊ฒƒ๋“ค์„ ๋งค๋ฒˆ ๋‹ค ๊ด€๋ฆฌํ•˜๋ฉด ๋ถ€๋‹ด๋˜๊ธฐ ๋•Œ๋ฌธ์—
๊ทธ๊ฑธ tree๊ฐ์ฒด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
๊ทธ tree๊ฐ์ฒด๋ฅผ commit๊ฐ์ฒด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

์ผ๋ถ€๋Ÿฌ commit์„ resetํ•˜๊ฑฐ๋‚˜ ์—†์• ๋Š”๊ฒŒ ์•„๋‹Œ ์ด์ƒ
git์€ ๊ต‰์žฅํžˆ ์•ˆ์ „ํ•œ ๋„๊ตฌ์ด๋‹ค.


๐Ÿ“Œgit branch(๊ฐ€์ง€)

Q. ๋‹ค์Œ์ค‘ Git์˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ๊ฒƒ์€?

1. blob
2. commit
3. tree
4. tag
5. branch

์ •๋‹ต์€ 5.branch ์ด๋‹ค.

๋ธŒ๋žœ์น˜๋Š” commit ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ(๋ ˆํผ๋Ÿฐ์Šค)์ผ ๋ฟ์ด๋‹ค.

blob : ํŒŒ์ผ
commit: ์ €์žฅ ๋‹จ์œ„, tree+blob+๋ฉ”ํƒ€์ •๋ณด
tree: blob๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌ(๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ์œ ์‚ฌ)
tag: ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์ฐธ์กฐ์ด์ง€๋งŒ ์„ค๋ช…์ด ์ถ”๊ฐ€๋˜๋Š” ๊ฐ์ฒด
branch : commit ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ(๋ ˆํผ๋Ÿฐ์Šค)

๊ทธ๋ž˜์„œ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ญ”๊ฐ€์š”?

branch๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ
๊ฐœ๋ฐœ์ž๋“ค ๊ฐ„์— ๋™์ผํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๊ณต์œ ํ•˜๊ณ ์ž ํ•  ๋•Œ ๊ทธ๋•Œ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ‘จโ€๐Ÿ”ง๐Ÿ‘ฉโ€๐Ÿ”ง

์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์ผํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ• ๋•Œ
๋™์‹œ์— ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๊ฐ์ž ๋…๋ฆฝ์ ์ธ ์ž‘์—… ์˜์—ญ์„ ์ƒ์„ฑํ•˜๊ณ 
๊ทธ ๊ณณ์—์„œ ์ž‘์—… ํ›„ ์›๋ž˜ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•ด์„œ
์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

branch(๊ฐ€์ง€) ๋งŒ๋“ค๊ธฐ/์‚ญ์ œํ•˜๊ธฐ

๋ธŒ๋žœ์น˜๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๊ฒฉ๋ฆฌ๋œ ์ƒํƒœ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.(์•ˆ์ „ํ•œ ์ž‘์—…๊ณต๊ฐ„)
์ €์žฅ์†Œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ์œผ๋กœ master ํ˜น์€ main ๋ธŒ๋žœ์น˜๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

์ด์ œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ณ , ๋‚˜์ค‘์— ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด
master๋กœ ๋Œ์•„์™€ ๋ณ‘ํ•ฉํ•˜๋ฉด ๋œ๋‹ค.

๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋ฌด์—‡์„ ๋จผ์ € ํ•ด์•ผํ• ๊นŒ?

  • ๋จผ์ € ํ„ฐ๋ฏธ๋„์„ ์—ฐ๋‹ค.
  • ์•„๋ž˜ ๋ช…๋ น์œผ๋กœ "feature_x"(์˜ˆ์‹œ)๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐˆ์•„ํƒˆ์ˆ˜์žˆ๋‹ค.
git branch feature_x(๋ธŒ๋žœ์น˜์ด๋ฆ„)

//์ด์™ธ์—๋„ checkout์ด๋‚˜ switch๋“ฑ์œผ๋กœ ์ƒ์„ฑ์„ ํ•˜๊ณ  ๋ฐ”๋กœ checkout ํ•˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
git checkout -b feature_x
git switch feature_x

//์•„๋ž˜ ๋ช…๋ น(์ค‘ ํ•˜๋‚˜)์œผ๋กœ master ๊ฐ€์ง€๋กœ ๋Œ์•„์˜ฌ์ˆ˜์žˆ๋‹ค.
git branch -m master
git checkout master
git switch master

//์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ๊ฐ€์ง€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
git branch -d feature_x

์ƒˆ๋กœ ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์ „์†กํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

//์ƒˆ๋กœ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋กœ ์›๊ฒฉ์ €์žฅ์†Œ์— ์ „์†กํ•˜๊ธฐ
git push origin feature_x

๐Ÿ“Œ HEAD์™€ ์ƒ๋Œ€์ฐธ์กฐ

์•ž์„œ ์‚ดํŽด๋ณธ branch์—๋Š” HEAD๋ผ๋Š” ์ˆจ๊ฒจ์ง„ ๋…€์„์ด ์žˆ๋‹ค.
HEAD๋Š” ํ˜„์žฌ checkout ๋œ commit์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
์ฆ‰, ํ˜„์žฌ ์ž‘์—… ์ค‘ ์ธ commit์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

HEAD๋Š” ํ•ญ์ƒ ์ž‘์—…ํŠธ๋ฆฌ์˜ ์ตœ์‹ , ์ตœ๊ทผ ์ปค๋ฐ‹(๋ธŒ๋žœ์น˜ ์ด๋ฆ„)์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

์ž‘์—…ํŠธ๋ฆฌ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” Git ๋ช…๋ น์–ด๋“ค์€ ๋Œ€๋ถ€๋ถ„
HEAD๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

์ด๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช‡ ๋ฒˆ์งธ ์ด์ „ ์ปค๋ฐ‹์€?(์ƒ๋Œ€์ฐธ์กฐ)

์ƒ๋Œ€์ฐธ์กฐ๋ฅผ ์•Œ์•„๋‘๋ฉด ์ •๋ง ์œ ์šฉํ•˜๋‹ค.

์ฃผ๋กœ caret(์บ๋Ÿฟ) ^ ๊ณผ tilde(ํ‹ธ๋“œ) ~ ๊ฐ€ ์“ฐ์ธ๋‹ค.

//์•„๋ž˜์™€ ๊ฐ™์ด ์บ๋Ÿฟ์„ ๋ถ™์ด๋ฉด ํ•œ๋ฒˆ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
git switch HEAD^

์บ๋Ÿฟ์€ ๋ถ™์ธ ๋งŒํผ ๋’ค๋กœ ๊ฐ„๋‹ค.

//2๋ฒˆ ๋’ค๋กœ ๊ฐ€๊ธฐ
git switch HEAD^^

์ด ๋•Œ ๋” ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
๋ฐ”๋กœ ํ‹ธ๋“œ ๋’ค์— ์ˆซ์ž๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
๊ทธ ์ˆซ์ž๋งŒํผ ์ด์ „ ๋ถ€๋ชจ ์ปค๋ฐ‹์„ ์ฐพ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค.

//HEAD๋กœ๋ถ€ํ„ฐ 2๋ฒˆ์งธ ๋ถ€๋ชจ์ปค๋ฐ‹
git switch HEAD~2

์ด๋ ‡๊ฒŒ ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ปค๋ฐ‹์˜ ์œ„์น˜๋„ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.


๐Ÿ“Œ git pull, git merge

๊ฐฑ์‹ (pull)๊ณผ ๋ณ‘ํ•ฉ(merge)

"๋ธŒ๋žœ์น˜๋“ค ํ•ฉ์ฒด ์ง„ํ™”!"

๋งŒ์•ฝ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ํ˜„์žฌ ๋ธŒ๋žœ์น˜(์˜ˆ๋ฅผ ๋“ค๋ฉด, main)์— ๋ณ‘ํ•ฉํ•˜๋ ค๋ฉด?

๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ๊นƒ์—์„œ๋Š” merge๋ผ๋Š” ๊ธฐ๋Šฅ์ด ๋„์™€์ค€๋‹ค.

๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ main์— mergeํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด์ž.

git merge ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜์ด๋ฆ„

mergeํ•  ๋•Œ ๋‘ ๋ธŒ๋žœ์น˜์˜ base๊ฐ€ ๊ฐ™์œผ๋ฉด Fast-forward ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Fast-forward

๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋˜ commit์„ mergeํ•  ๋ธŒ๋žœ์น˜์˜ commit์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด
merge์˜ ๋ฐฉ๋ฒ•์ค‘์˜ ํ•˜๋‚˜์ธ Fast-forward์ด๋‹ค.

์ตœ์‹  ์ •๋ณด๋“ค์„ ๋ชจ๋‘ ๋”ฐ๋ผ๊ฐ€๋Š” ๋‘ ๋ธŒ๋žœ์น˜์˜ base๊ฐ€ ๊ฐ™์„ ๋•Œ
Fast-forward๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

์ฆ‰ A๋ธŒ๋žœ์น˜์— B๋ธŒ๋žœ์น˜๋ฅผ mergeํ• ๋•Œ,
B๋ธŒ๋žœ์น˜๊ฐ€ ์˜จ์ „ํžˆ A๋ธŒ๋žœ์น˜ ์ดํ›„์˜ commit๋“ค์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉด
A๋ธŒ๋žœ์น˜๋ฅผ B๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๊ธฐ๋งŒ ํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

fast-forward๋ผ๋Š” ๋ช…๋ น์–ด์—๋Š” ์˜ต์…˜์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ญ์ƒ fast-forward ๋™์ž‘์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ง„ํ–‰ํ•˜๋˜ ๋„์ค‘,
๊ธฐ์กด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๊ฐฑ์‹  ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.๐Ÿ˜‚

์‹ค์ œ๋กœ 4์ฃผ์ฐจ ํ”„๋ฆฌ์ฝ”์Šค ๋„์ค‘ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ,
์ด๋Ÿด๋•Œ๋Š” ์ž‘์—…ํ•˜๊ณ  ์žˆ๋˜ ๋‚ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋งž์ถฐ์„œ ๊ฐฑ์‹ ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๋งž์ถฐ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด ์•„๋ž˜๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

git pull

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ๋กœ์ปฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐ›์•„์ง€๊ณ (fetch),
๋ณ‘ํ•ฉ(merge)๋œ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋ช…๋ น์ด๋“  ๋‘๋ฒˆ์งธ ๋ช…๋ น์ด๋“ , git์€ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ณ‘ํ•ฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค.

  • 3-way-merge

์œ„ ๋ฉ”์ผ์˜ ์ƒํ™ฉ์ฒ˜๋Ÿผ ๊ธฐ์กด ๋ธŒ๋žœ์น˜์˜ base๊ฐ€ ๋‹ฌ๋ผ์กŒ๋‹ค๋ฉด
์ƒˆ๋กœ ๋งŒ๋“  ๋ธŒ๋žœ์น˜์— upstream/main์˜ ๋ณ€๊ฒฝ์ ์„ ๋ฐ˜์˜ํ•ด์•ผํ•œ๋‹ค.

upstream/main์˜ ๋ณ€๊ฒฝ์ ์„ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋กœ์ปฌ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์— ์ ์šฉ์„ ํ•ด์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜์— ์ด ํ”ฝ์Šค๋œ commit์„ ํ•ฉ์ณ์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์„œ upstream์— ์žˆ๋Š” ์ •๋ณด๋“ค์„ ๋ชจ๋‘ mergeํ•ด์„œ ํ•ฉ์ณ์ค˜์•ผ ํ•œ๋‹ค.

mergeํ•  ๋•Œ base๊ฐ€ ๋‹ค๋ฅด๋ฉด merge commit์„ ์ƒ์„ฑํ•˜์—ฌ auto mergeํ•ด์•ผํ•œ๋‹ค.

fast-forward์˜ ์กฐ๊ฑด์ธ ๋‘ ๋ธŒ๋žœ์น˜์˜ ๋ฒ ์ด์Šค๊ฐ€ ๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—
git์ด ๋ณ„๋„์˜ ์ตœ์  ๊ณตํ†ต ์กฐ์ƒ์„ ์ž๋™์œผ๋กœ ์ฐพ๋Š” auto merge๋กœ commit์„
ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น commit์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

Github์—์„œ ์ œ๊ณตํ•˜๋Š” pull request๋Š”
์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ merge ๋ฐฉ๋ฒ•์„ ๋”ฐ๋กœ ์ œ๊ณต์„ ํ•œ๋‹ค.
์ด ์„ธ๊ฐ€์ง€ ๋™์ž‘์„ ์ง€๊ธˆ๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ์•Œ์•„๋ณด์ž.

pull request ์‹œ์—๋Š” ๊ฐ๊ฐ์˜ merge๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ํŒŒ์•…ํ•ด์„œ
ํ˜„์žฌ ํŒ€์—์„œ ๊ฐ€์žฅ ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” merge ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

1. Create merge commit

๋ฒ ์ด์Šค ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ™๋”๋ผ๋„ fast-forward๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
ํ•˜๋‚˜์˜ merge commit ์„ ์ƒ์„ฑํ•ด์„œ merge๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ
๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ• ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ commit๋“ค์ด ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ด์•„์žˆ์–ด
์ด๋ฅผ ์‚ฌ์šฉํ•  ์—ฌ์ง€๋ฅผ ๋‚จ๊น€๊ณผ ๋™์‹œ์— ๋งŒ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ merge ๋ถ„๊ธฐ์ ์ด ์ƒ๊น€์œผ๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด main์— mergeํ–ˆ๋Š”์ง€ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.

2. Squash and merge

ํ•˜๋‚˜์˜ merge commit์„ ์ƒ์„ฑํ•ด์„œ ํ•ด๋‹น commit์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•˜๋Š”๋ฐ
ํ”ผ์ฒ˜์—์„œ ์ž‘์—…ํ–ˆ๋˜ ๋ชจ๋“  commit์„ ํ•˜๋‚˜์˜ commit์œผ๋กœ ํ†ตํ•ฉํ•ด์„œ mergeํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋  ๊ฒฝ์šฐ
commit์ด ๋„ˆ๋ฌด ๊ธธ์–ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์žˆ์„๋•Œ ์•Œ์•„๋ณด๊ธฐ ํž˜๋“  ์ ์„
ํŠน์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ commit์„ ํ•˜๋‚˜๋งŒ ๋‘์–ด์„œ ์ด์ „๋ณด๋‹ค๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ž‘์—…ํ–ˆ๋Š”์ง€ ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹์•„์ง„๋‹ค.

pull request ๊ฐ๊ฐ์— ๋Œ€ํ•œ commit์„ ํ•˜๋‚˜๋ฅผ ๋‚จ๊ธฐ๊ณ 
ํ•ด๋‹น commit์ด ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
PR ๋‹จ์œ„๋งˆ๋‹ค commit์ด ์ž‘์„ฑ๋˜์–ด ๋ˆ„๊ฐ€ ๊ณ„ํš์„ ์™„๋ฃŒํ–ˆ๋Š”์ง€ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„ ๋ชจ์Šต์ด ๋œ๋‹ค.

3. Rebase and merge

๊ฐ„๋‹จํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ๋ฒ ์ด์Šค๋ฅผ ๋‹ค์‹œ ์กฐ์ •์„ ํ•˜๋Š”,
์ฆ‰ ํ”ผ์ฒ˜์—์„œ ์ž‘์—…ํ–ˆ๋˜ commit ๋“ค์„ ๋ชจ๋‘ ํ˜„์žฌ main ๋ธŒ๋žœ์น˜์—์„œ ์ตœ์ƒ๋‹จ์— ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ๋  ๊ฒฝ์šฐ commit์ด ๋งŽ์„ ๋•Œ ํ•œ ์ค„๋กœ ๋ชจ๋“  commit์ด ์ €์žฅ๋˜์–ด ์˜คํžˆ๋ ค ๋” ๋‚œ์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ“Œ conflicts (์ถฉ๋Œ)

merge๋Š” ํ•ญ์ƒ ์„ฑ๊ณตํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฐ€๋” ์ถฉ๋Œ(conflicts)์ด ์ผ์–ด๋‚˜๊ธฐ๋„ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ conflict(์ถฉ๋Œ)์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

git์ด ์•Œ๋ ค์ฃผ๋Š” ํŒŒ์ผ์˜ ์ถฉ๋Œ ๋ถ€๋ถ„์„ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ˆ˜์ •ํ•ด์„œ ๋ณ‘ํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

merge๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ IDE์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

merge๋ฅผ ํ• ๋•Œ ๊ฐ™์€ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๋‘ ์ฝ”๋“œ ์ค‘์—์„œ ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ฝ”๋“œ๋งŒ ์‚ด๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ง€์›Œ์•ผํ•œ๋‹ค.

๋จผ์ € git switch ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜ ๋กœ ๊ฐ€์„œ
git merge ๊ธฐ์กด๋ธŒ๋žœ์น˜ ๋กœ merge ์‹œ์ผœ์ค˜์•ผ

๋‹ค๋ฅธ ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ๊ธฐ์กด๋ธŒ๋žœ์น˜์™€ ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜๊ฐ€ ๊ฐ™์€ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ›„ git add๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์Šคํ…Œ์ด์ง• ํ•ด๋‘๋ฉด
๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ํšŒ์ƒ‰ merge commit์— ํฌํ•จ์ด ๋œ๋‹ค.
์•„๋ž˜ ๋ช…๋ น์œผ๋กœ git์—๊ฒŒ ์•„๊นŒ์˜ ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜๋ผ๊ณ  ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

git add ํŒŒ์ผ์ด๋ฆ„

//๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์—, ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋น„๊ตํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
git diff ์›๋ž˜๋ธŒ๋žœ์น˜ ๋น„๊ต๋Œ€์ƒ๋ธŒ๋žœ์น˜

์ด์ œ git commit์„ ํ•˜๋ฉด
merge commit์ด ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ git rebase

Rebase๋ž€?

merge์™€๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅธ rebase์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

merge์™€์˜ ๊ณตํ†ต์ ์€ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์นœ๋‹ค๋Š” ์ ์ด๋‹ค.
ํ•˜์ง€๋งŒ rebase๋Š” merge๋ณด๋‹ค ๊นจ๋—ํ•œ commit history๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

์ด ๋‘˜์˜ ๋ชฉ์ ์€ ํ•œ ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค๋งŒ merge๋Š” ์ƒˆ๋กœ์šด commit์„ ๋งŒ๋“ค์–ด์„œ ํ•ฉ์น˜๋Š” ๊ฑฐ๊ณ 

rebase๋Š” ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋ฒ ์ด์Šค๋ฅผ ์žฌ์„ค์ •ํ•ด์„œ ํ•ฉ์น˜๊ฒ ๋‹ค๋Š” ๊ฑด๋ฐ
๋ฒ ์ด์Šค๊ฐ€ ๋ฐ”๋€” commit๋“ค์˜ ๋‚ด์šฉ์€ ๊ฐ™์ง€๋งŒ
์ƒˆ๋กญ๊ฒŒ ๋ณต์‚ฌํ•˜์—ฌ ์—ฐ์ด์–ด ๋ถ™์ด๋Š” ๊ฒƒ์ด๋‹ค. (์„ ํ˜•์ ์ธ ๋ชจ์Šต์œผ๋กœ ๋ฐ”๋€œ)
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ก์ด ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

rebase ์ „์˜ commit๋“ค์€ rebase ํ›„์˜ commit๋“ค๊ณผ id๊ฐ€ ๋‹ค๋ฅด๋‹ค.

commit ๋ฉ”์„ธ์ง€๋Š” ๊ฐ™์€๋ฐ commit id๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณด๋ฉด
๋ณต์‚ฌ๊ฐ€ ๋˜์–ด์„œ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ merge๋ฅผ ํ•œ ์ฝ”๋“œ ๊ฒฐ๊ณผ์™€
rebase๋ฅผ ํ•œ ์ฝ”๋“œ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์•„์•ผ ํ•œ๋‹ค.


๐Ÿ“Œ git cherry-pick

์ฒด๋ฆฌ ์ผ€์ดํฌ ๊ฐ™์€ ๊ฒƒ์—์„œ ์œ„์— ์˜ฌ๋ผ๊ฐ„ ์ฒด๋ฆฌ๋งŒ ์™์™ ๊ณจ๋ผ๋จน๋Š” ํ–‰์œ„๋ฅผ
์ฒด๋ฆฌํ”ผํ‚น์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, cherry-pick์˜ ์–ด์›์€ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณจ๋ผ์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป

๊ทธ๋Ÿฌ๋ฉด Git์—์„œ ์ข‹์€๊ฒŒ ๊ณผ์—ฐ ๋ญ˜๊นŒ?

๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ์žˆ๋Š” commit์„ ์„ ํƒ์ ์œผ๋กœ
๋‚ด ๋ธŒ๋žœ์น˜์— ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์ฒด๋ฆฌํ”ฝ์€ ์ฃผ๋กœ ๋ฌด์Šจ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ• ๊นŒ?

์ฒด๋ฆฌํ”ฝ์„ ํ†ตํ•ด ๋ฉ”์ธ์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ปค๋ฐ‹์ด ๋จธ์ง€๋˜๋Š” ์ƒํ™ฉ์„ ์ฒœ์ฒœํžˆ ์‚ดํŽด๋ณด์ž.
๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์ž‡๋‹ค.

  • 1. main๋ธŒ๋žœ์น˜์— ์ฒด๋ฆฌํ”ฝ์„ ํ•˜๊ณ  ๋ฐ”๋กœ origin main์— pushํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ main์— ์ง์ ‘์ ์œผ๋กœ ํ‘ธ์‰ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
์ฃผ๋กœ ๊ธฐ๋Šฅ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•ด์„œ main๋ธŒ๋žœ์น˜๋กœ merge PR์„ ์š”์ฒญํ•œ ํ›„์— merge๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

  • 2. ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๊ณณ์—์„œ ํ•ด๋‹น ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•

git log๋ผ๋Š” ๋ช…๋ น์„ ํ†ตํ•ด ์ปค๋ฐ‹๋“ค์˜ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ
์—ฌ๊ธฐ์—์„œ ์ฒด๋ฆฌํ”ฝ๊ณผ ์ปค๋ฐ‹์˜ ํ•ด์‰ฌ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด
ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๊ณณ์—์„œ ํ•ด๋‹น ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปค๋ฐ‹์˜ ํ•ด์‰ฌ ์•ž๋ถ€๋ถ„์— ๋Œ€์—ฌ์„ฏ ๊ธ€์ž๋งŒ ๋‹ค ์ž…๋ ฅํ•  ํ•„์š”์—†์ด ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

ํ•œ๊ฐœ์˜ ์ปค๋ฐ‹๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด
git cherry-pick ๋ช…๋ น์–ด ๋‹ค์Œ์— ๊ฐ€์ง€๊ณ  ์˜ค๊ณ  ์‹ถ์€ ์ปค๋ฐ‹์˜ id๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๋‹น์—ฐํžˆ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๊ณ ์‹ถ๋‹ค๋ฉด
commit id๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๋˜ ํŠน์ • ๊ตฌ๊ฐ„์— ์žˆ๋Š” ์—ฐ์†๋œ commit์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ€์ ธ์˜ค๊ณ ์‹ถ์€ ์—ฐ์†๋œ commit๋“ค ์ค‘
์‹œ์ž‘ ์ปค๋ฐ‹์˜ id์™€ ๋งˆ์ง€๋ง‰ id์˜ ์•„์ด๋””๋ฅผ ์ ๊ณ 
์ด ๋‘˜ ์‚ฌ์ด์— ..ํ‘œ์‹œ๋กœ ์ด์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ์ปค๋ฐ‹๋งŒ ์†์† ๊ณจ๋ผ์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

์ฒด๋ฆฌํ”ฝ์„ ์ด์šฉํ•ด์„œ ๋ธŒ๋žœ์น˜์˜ ์ถฉ๋Œ๋œ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

    1. conflict์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
    1. git add ๋ช…๋ น์œผ๋กœ ์ˆ˜์ •๋œ ์ฝ”๋“œ๋ฅผ addํ•œ๋‹ค.
    1. git cherry-pick --continue ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฒด๋ฆฌํ”ฝ ๋ช…๋ น์–ด ์ดํ›„์— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋œจ๋ฉด
์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •์„ ํ•˜๊ณ  git add๋ฅผ ํ†ตํ•ด ์Šคํ…Œ์ด์ง€ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
๊ทธ ํ›„ git cherry-pick --continue ๋ช…๋ น์–ด๋กœ
๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์ถฉ๋Œ์ด ํ•ด๊ฒฐ๋˜๊ณ  ์ •์ƒ์ ์œผ๋กœ commit์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.


๐Ÿ“Œ git tag, git log

๊ผฌ๋ฆฌํ‘œ(tag) ๋‹ฌ๊ธฐ, ํ™•์ •๋ณธ ์‹๋ณ„์žid ์–ป๊ธฐ (log)

์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒˆ ๋ฒ„์ „์„ ๋ฐœํ‘œํ• ๋•Œ๋งˆ๋‹ค tag๋ฅผ ๋‹ฌ์•„ ๋†“์œผ๋ฉด ์ข‹๋‹ค.
(๋ฌผ๋ก  ๊ผฌ๋ฆฌํ‘œ๋Š” SVN ๋“ฑ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.)

์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ผฌ๋ฆฌํ‘œ์ธ 1.0.0์„ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค.

git tag 1.0.0 1b2e1d63ff
//์œ„ ๋ช…๋ น์—์„œ 1b2e1d63ff๋ถ€๋ถ„์€ ๊ผฌ๋ฆฌํ‘œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ํ™•์ •๋ณธ ์‹๋ณ„์ž์ด๋‹ค.

์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ํ™•์ •๋ณธ ์‹๋ณ„์ž๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

git log

ํ™•์ •๋ณธ ์‹๋ณ„์ž์˜ ์•ž๋ถ€๋ถ„ ์ผ๋ถ€๋งŒ ์ž…๋ ฅํ•ด๋„ ๊ผฌ๋ฆฌํ‘œ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์ง€๋งŒ,
๊ทธ ์ผ๋ถ€๋ถ„์ด ๋ฐ˜๋“œ์‹œ ๊ณ ์œ ํ•˜๋‹ค๋Š” ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.


๐Ÿ“Œ git reset, git revert

๋กœ์ปฌ ๋ณ€๊ฒฝ ๋‚ด์šฉ ์‚ญ์ œ/๋˜๋Œ๋ฆฌ๊ธฐ

์ด๋ฒˆ์—๋Š” ๋” ์œ ์šฉํ•œ ์ž‘์—… ๋˜๋Œ๋ฆฌ๊ธฐ๋ฅผ ์•Œ์•„๋ณด์ž.
(์ด ๋ฐฉ๋ฒ•์€ ๋กœ์ปฌ์—์„œ ํ˜ผ์ž ์ž‘์—…ํ• ๋•Œ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ ์™„์ „ํžˆ ๊ธฐ๋ก์„ ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.)

๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ˆ˜๋กœ ๋ฌด์–ธ๊ฐ€ ์ž˜๋ชปํ•œ ๊ฒฝ์šฐ,
์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ๋กœ์ปฌ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

git checkout --ํŒŒ์ผ์ด๋ฆ„
//์œ„ ๋ช…๋ น์€ ๋กœ์ปฌ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ ์ „ ์ƒํƒœ(HEAD)๋กœ ๋˜๋Œ๋ ค์ค€๋‹ค.

๋‹ค๋งŒ, ์ด๋ฏธ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€๋œ ๋ณ€๊ฒฝ ๋‚ด์šฉ๊ณผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ๋‚จ๋Š”๋‹ค.

๋งŒ์•ฝ ๋กœ์ปฌ์— ์žˆ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ๋‚ด์šฉ๊ณผ ํ™•์ •๋ณธ์„ ํฌ๊ธฐํ•˜๋ ค๋ฉด,
์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ์ด๋ ฅ์„ ๊ฐ€์ ธ์˜ค๊ณ ,
๋กœ์ปฌ master๋ธŒ๋žœ์น˜๊ฐ€ ์ „ ์ด๋ ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

git fetch origin
git reset --hard origin/master

๊น”๋”ํ•˜๊ฒŒ ์ตœ๊ทผ ์ปค๋ฐ‹ 1๊ฐœ ์ง€์šฐ๊ธฐ

git reset HEAD~1

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์• ์ดˆ์— ์ปค๋ฐ‹์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์ง„,
์ฆ‰ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ณ ์ณ ์“ด๋‹ค๋Š” ์ ๋•Œ๋ฌธ์—
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” remote ๋ธŒ๋žœ์น˜์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋Œ€์‹ ์— ์ด๋•Œ๋Š” revert๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ,

git revert HEAD

ํ˜„์žฌ HEAD๊ฐ€ ์žˆ๋Š” ๊ณณ์„ revert ์‹œ์ผœ์ฃผ๊ฒŒ ๋˜๋ฉด
๊ธฐ์กด์˜ ์ปค๋ฐ‹์€ ์‚ด์•„์žˆ์œผ๋ฉด์„œ ๋‹ค์‹œ ์ปค๋ฐ‹์ด ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ revert๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” ์‚ญ์ œํ•œ ์ปค๋ฐ‹๊ณผ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

ํ•œ๊ฐ€์ง€ ์•Œ์•„๋‘ฌ์•ผ ํ• ์ ์€
๋ช…๋ น์–ด๊ฐ€ ์ž…๋ ฅ๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ํ–‰์œ„์—๋Š” ๋ชจ๋‘ ํ•ด์‰ฌ๊ฐ’์ด ์ƒ๊ธด๋‹ค๋Š” ์ ์ด๋‹ค.

์ œ๊ฑฐ๋ฅผ ํ–ˆ์–ด๋„ ์ œ๊ฑฐ๋ฅผ ํ•˜๊ธฐ ์ „, ์ œ๊ฑฐ๋ฅผ ํ•˜๋Š” ํ–‰์œ„ ๋ชจ๋‘๊ฐ€
๊ธฐ๋ก์— ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์ ์„ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ํ•ด์‹œ๊ฐ’์„ ์ฐพ๊ณ 
๊ทธ ํ•ด์‰ฌ๊ฐ’์„ reset ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋ณด์ž.

git reflog๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ชจ๋“  log๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ ๋ชจ๋“  ๋กœ๊ทธ์—๋Š” ํ•ด์‰ฌ๊ฐ’๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํŠน์ • ์ปค๋ฐ‹์„ ์‚ญ์ œํ•˜๊ธฐ ์ „ ํ•ด์‰ฌ๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด
๋†€๋ž๊ฒŒ๋„ ํŠน์ •์ปค๋ฐ‹์ด ๋‹ค์‹œ ์‚ด์•„๋‚˜๊ฒŒ ๋œ๋‹ค.

git reset --hard ํŠน์ •์ปค๋ฐ‹์˜Hash

๋ธŒ๋žœ์น˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์‹œ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

git switch -c ๋ธŒ๋žœ์น˜ ๋ธŒ๋žœ์น˜์ปค๋ฐ‹์˜Hash 

๐Ÿ“Œ ๊ทธ ์™ธ ์œ ์šฉํ•œ ๋ช…๋ น์–ด๋“ค

git์˜ ๋‚ด์žฅ GUI

gitk

์ฝ˜์†”์—์„œ git output์„ ์ปฌ๋Ÿฌ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

git config color.ui true

์ด๋ ฅ(log)์—์„œ ํ™•์ •๋ณธ 1๊ฐœ๋ฅผ ๋”ฑ ํ•œ ์ค„๋กœ๋งŒ ํ‘œ์‹œํ•˜๊ธฐ

git config format.pretty oneline

ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋Œ€ํ™”์‹์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ

git add -i

์ฐธ๊ณ ์ž๋ฃŒ
https://rogerdudler.github.io/git-guide/index.ko.html
https://www.youtube.com/watch?v=b72mDco4g78
https://www.youtube.com/watch?v=JsRD2AWxxFg
https://www.inflearn.com/course/git-and-github#reviews

profile
์„ฑ์žฅ์—๋Š” ์„ฑ์žฅํ†ต์ด ์žˆ๊ธฐ ๋งˆ๋ จ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€