Skip to content

Latest commit

ย 

History

History
346 lines (205 loc) ยท 17.1 KB

File metadata and controls

346 lines (205 loc) ยท 17.1 KB

Git


Git?

๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (DVCS)

๋กœ์ปฌ ๋ฒ„์ „ ๊ด€๋ฆฌ > ์ค‘์•™ ์ง‘์ค‘์‹ ๋ฒ„์ „ ๊ด€๋ฆฌ > ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ

Git doc

https://git-scm.com/book/ko/v2/ ์—์„œ git์— ๊ด€ํ•œ ์ „์ฒด ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.


Git ์„ค์น˜

Git ์„ค์น˜๋Š” ์ด ๊ณณ์„ ์ฐธ์กฐ.


์ตœ์ดˆ ์„ค์ •

์‚ฌ์šฉ์ž ์ •๋ณด

Git์„ ์„ค์น˜ํ•˜๊ณ  ๋‚˜์„œ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Git์€ ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ์ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•œ ๋ฒˆ ์ปค๋ฐ‹ํ•œ ํ›„์—๋Š” ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

$ git config --global user.name <์‚ฌ์šฉ์ž ์ด๋ฆ„ ex)darkblank>
$ git config --global user.email <์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ ex)darkblank1990@gmail.com)

ํŽธ์ง‘๊ธฐ

์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‚˜๋ฉด Git์—์„œ ์‚ฌ์šฉํ•  ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ๊ณ ๋ฅธ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Git์€ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ์„ค์ •ํ•˜์—ฌ์ค€๋‹ค.

$ git config --global core.editor <ํŽธ์ง‘๊ธฐ ์ด๋ฆ„ ex)emacs>

์„ค์ •ํ™•์ธ

$git config -list๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์„ค์ •ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$git config <key> ๋ช…๋ น์œผ๋กœ Git์ด ํŠน์ • key์— ๋Œ€ํ•ด ์–ด๋–ค ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ git config user.name
darkblank

๋„์›€๋ง ๋ณด๊ธฐ

$git ๋˜๋Š” $git help๋ช…๋ น์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

$git help <๋ช…๋ น> ๋˜๋Š” $git help <๊ฐœ๋…> ๋ช…๋ น์œผ๋กœ ํŠน์ • ํ•˜์œ„ ๋ช…๋ น์–ด๋‚˜ ๊ฐœ๋…์— ๋Œ€ํ•œ ๋„์›€๋ง์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


Git ๊ธฐ์ดˆ

Git ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ

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

๊ธฐ์กด ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ Git ์ €์žฅ์†Œ๋กœ ๋งŒ๋“ค๊ธฐ

git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ์ ํŠธ๋‚˜ ํด๋”๋กœ ์ด๋™ํ•œ ๋‹ค์Œ $git init๋ช…๋ น์„ ์ด์šฉํ•˜์—ฌ git ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ช…๋ น๋งŒ์œผ๋กœ๋Š” ํ”„๋กœ์ ํŠธ๋‚˜ ํด๋” ๋‚ด๋ถ€์˜ ์–ด๋– ํ•œ ํŒŒ์ผ๋„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. $git add <ํŒŒ์ผ๋ช…>๋ช…๋ น์œผ๋กœ ์ €์žฅ์†Œ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ ํ•œ ํ›„ $git commit๋ช…๋ น์„ ํ†ตํ•ด ์ปค๋ฐ‹์„ ํ•ด์ฃผ๋ฉด์„œ ํŒŒ์ผ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ๋Š” ์ €์žฅ์†Œ๋ฅผ Cloneํ•˜๊ธฐ

$git clone <url>๋ช…๋ น์œผ๋กœ ์ €์žฅ์†Œ๋ฅผ Clone ํ•œ๋‹ค. ์ด ๋ช…๋ น์€ ํ˜„์žฌ ์œ„์น˜ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— .git๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์™€์„œ ์ž๋™์œผ๋กœ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ Checkout ํ•ด ๋†“๋Š”๋‹ค. ์ƒ์„ฑ๋˜์–ด์ง„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๋ฉด Checkout์œผ๋กœ ์ƒ์„ฑํ•œ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋‹น์žฅ ํ•˜๊ณ ์ž ํ•˜๋Š” ์ผ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์„ ์ง์ ‘ ์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ์“ฐ๋ฉด ๋œ๋‹ค.

$ git clone <url> <๋””๋ ‰ํ† ๋ฆฌ๋ช…>

ํŒŒ์ผ ๋ฌด์‹œํ•˜๊ธฐ

์–ด๋–ค ํŒŒ์ผ์€ Git์ด ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ณดํ†ต ๋กœ๊ทธ ํŒŒ์ผ์ด๋‚˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ ํŒŒ์ผ์ด ๊ทธ๋ ‡๋‹ค. ๊ทธ๋Ÿฐ ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๋ ค๋ฉด .gitignore ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ๋ฌด์‹œํ•  ํŒŒ์ผ ํŒจํ„ด์„ ์ ๋Š”๋‹ค.

pyenv๋กœ ๊ด€๋ฆฌ๋˜์–ด์ง€๋Š” ํด๋”๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, Git์ด ๊ด€๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ํŒŒ์ผ๋“ค์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด https://www.gitignore.io/ ์—์„œ ์–ด๋–ค ํŒŒ์ผ๋“ค์„ ๋ฌด์‹œํ•ด์•ผ ํ• ์ง€ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

.gitignore ํŒŒ์ผ์— ์ž…๋ ฅํ•˜๋Š” ํŒจํ„ด์€ ์•„๋ž˜ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  • ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๋ผ์ธ์ด๋‚˜, #๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ผ์ธ์€ ๋ฌด์‹œํ•œ๋‹ค.
  • ํ‘œ์ค€ Glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์Šฌ๋ž˜์‹œ(/)๋กœ ์‹œ์ž‘ํ•˜๋ฉด ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ ์šฉ๋˜์ง€(Recursivity) ์•Š๋Š”๋‹ค.
  • ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์Šฌ๋ž˜์‹œ(/)๋ฅผ ๋์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋А๋‚Œํ‘œ(!)๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒจํ„ด์˜ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.

.gitignore ํŒŒ์ผ์˜ ์˜ˆ

# ํ™•์žฅ์ž๊ฐ€ .a์ธ ํŒŒ์ผ ๋ฌด์‹œ
*.a

# ์œ— ๋ผ์ธ์—์„œ ํ™•์žฅ์ž๊ฐ€ .a์ธ ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ฒŒ ํ–ˆ์ง€๋งŒ lib.a๋Š” ๋ฌด์‹œํ•˜์ง€ ์•Š์Œ
!lib.a

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” TODOํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ณ  subdir/TODO์ฒ˜๋Ÿผ ํ•˜์œ„๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š์Œ
/TODO

# build/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ์€ ๋ฌด์‹œ
build/

# doc/notes.txt ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜๊ณ  doc/server/arch.txt ํŒŒ์ผ์€ ๋ฌด์‹œํ•˜์ง€ ์•Š์Œ
doc/*.txt

# doc ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์˜ ๋ชจ๋“  .pdf ํŒŒ์ผ์„ ๋ฌด์‹œ
doc/**/*.pdf

ํŒŒ์ผ์˜ ์ƒํƒœ ํ™•์ธํ•˜๊ธฐ

ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋ณดํ†ต $git status๋ช…๋ น์„ ์‚ฌ์šฉํ•œ๋‹ค. $git status๋ช…๋ น์€ ํด๋” ๋‚ด์˜ ํŒŒ์ผ์ด ์–ด๋–ค ์ƒํƒœ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๋ฉฐ add ํ•˜์—ฌ์•ผ ํ•  ๋˜๋Š” commitํ•˜์—ฌ์•ผ ํ•  ํŒŒ์ผ๋“ค์„ ๋‚˜ํƒ€๋‚ด ์ค€๋‹ค.

๋˜ํ•œ git diff๋ผ๋Š” ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ์•„์ง ์“ธ ์ผ์ด ์—†์—ˆ์„ ๋ฟ๋”๋Ÿฌ ์•„์ง ์ž์„ธํžˆ ์–ด๋– ํ•œ ์ƒํ™ฉ์— ์“ฐ๋Š” ๊ฒƒ์ธ์ง€๋„ ์ž˜ ๋ชฐ๋ผ์„œ ๋‚˜์ค‘์— ๋‹ค์‹œ ์ ๊ฒ ๋‹ค.


ํŒŒ์ผ ์‚ญ์ œ, ์ด๋ฆ„ ๋ณ€๊ฒฝ

ํŒŒ์ผ ์‚ญ์ œ

$git rm๋ช…๋ น์œผ๋กœ ํŒŒ์ผ์„ ์ง€์šฐ๊ฑฐ๋‚˜ ํ–ˆ์„ ๊ฒฝ์šฐ์—๋„ ์ปค๋ฐ‹์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. $git rm๋ช…๋ น์œผ๋กœ ํŒŒ์ผ์„ ์ง€์› ์„ ๊ฒฝ์šฐ์—๋Š” ์‹ค์ œ๋กœ ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ๋„ ์—†์–ด์ง€์ง€๋งŒ, --cached์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด Staging Area์—์„œ๋งŒ ์ œ๊ฑฐ๋˜์–ด์ง€๊ณ  ์›Œํ‚น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์€ ์ง€์šฐ์ง€ ์•Š๊ณ  ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

ํŒŒ์ผ ์ด๋ฆ„์ด ๋ฐ”๋€Œ์—ˆ์„ ๊ฒฝ์šฐ ๋˜ํ•œ ์ปค๋ฐ‹์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. $git mv file_from file_to ๋ช…๋ น์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

  • ์ฐธ๊ณ  : ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ํ•œ ์ƒํƒœ๋กœ ์ˆ˜์ •์„ ํ•œ ํ›„ Staging Area๋กœ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ ํŒŒ์ผ ๋‚ด์šฉ ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ์ˆ˜์ •๋˜์–ด์ง„ ๊ฒฝ์šฐ Git์—์„œ ๋ฐ”๋€Œ์–ด์ง„ ์ด๋ฆ„์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๋ฐ”๋€Œ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—) ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” $git diff -M์œผ๋กœ ์ด๋ฅผ ์žก์•„์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒํ•˜๊ธฐ

$git log๋ช…๋ น์„ ํ†ตํ•˜์—ฌ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ํ˜„์žฌ์˜ ํ—ค๋“œ๊ฐ€ ์žˆ๋Š”๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ์ดํ›„์˜ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋Š” ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋ชจ๋“  ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด --all ์˜ต์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด --oneline์˜ต์…˜์„, --graph์˜ต์…˜์œผ๋กœ ๋ธŒ๋žœ์น˜์™€ ๋จธ์ง€ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์•„์Šคํ‚ค ๊ทธ๋ž˜ํ”„๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


๋˜๋Œ๋ฆฌ๊ธฐ

์ปค๋ฐ‹ ์ˆ˜์ •ํ•˜๊ธฐ

๋งŒ์•ฝ ์–ด๋– ํ•œ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋น ํŠธ๋ฆฌ๊ณ  ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค๋ฉด --amend์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

$ git commit --amend

์ด ๋ช…๋ น์€ Staging Area๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฐ‹ํ•œ๋‹ค. ๋งŒ์•ฝ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ปค๋ฐ‹ํ•˜๊ณ  ๋‚˜์„œ ์ˆ˜์ •ํ•œ ๊ฒƒ์ด ์—†๋‹ค๋ฉด(์ปค๋ฐ‹ํ•˜์ž๋งˆ์ž ๋ฐ”๋กœ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ) ์กฐ๊ธˆ ์ „์— ํ•œ ์ปค๋ฐ‹๊ณผ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ™๋‹ค. ์ด๋•Œ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋งŒ ์ˆ˜์ •ํ•œ๋‹ค.
ํŽธ์ง‘๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ด์ „ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋œ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ปค๋ฐ‹ํ•ด๋„ ๊ธฐ์กด์˜ ์ปค๋ฐ‹์„ ๋ฎ์–ด์“ด๋‹ค.
์ปค๋ฐ‹์„ ํ–ˆ๋Š”๋ฐ Stage ํ•˜๋Š” ๊ฒƒ์„ ๊นœ๋นกํ•˜๊ณ  ๋น ํŠธ๋ฆฐ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค.

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

์—ฌ๊ธฐ์„œ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด 3๊ฐœ๋Š” ๋ชจ๋‘ ์ปค๋ฐ‹ ํ•œ ๊ฐœ๋กœ ๊ธฐ๋ก๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์„ ๋ฎ์–ด์“ด๋‹ค.

ํŒŒ์ผ ์ƒํƒœ๋ฅผ Unstage๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

์‹ค์ˆ˜๋กœ $git add -A ๋ช…๋ น์„ ์ด์šฉํ•ด ์›์น˜ ์•Š๋Š” ํŒŒ์ผ๊นŒ์ง€ Staging Area๋กœ ๋„ฃ์—ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ Unstaged ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

$git reset HEAD <ํŒŒ์ผ๋ช…>

$git reset ๋ช…๋ น์€ ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•ด์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์ตœ๊ทผ ์ปค๋ฐ‹ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ

์ˆ˜์ •ํ•œ ํŒŒ์ผ์„ ์ตœ๊ทผ ์ปค๋ฐ‹ํ•œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

$git checkout -- <ํŒŒ์ผ๋ช…>

์ด ๋ช…๋ น ๋˜ํ•œ ์›๋ž˜ ํŒŒ์ผ๋กœ ๋ฎ์–ด ์”Œ์šฐ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์ด ์ „๋ถ€ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ์ƒ๋‹นํžˆ ์œ„ํ—˜ํ•œ ๋ช…๋ น์ด๋‹ค. ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์ด ์ •๋ง ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์„ ๋•Œ์—๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

Branch์™€ Stash๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋˜๋Œ๋ฆฌ๊ธฐ

Branch๋ฅผ ์ด์šฉํ•˜๋ฉด ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์„ ๋ฒ„๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ์ด์ „ ์‹œ์ ์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ด์ „์— ์ปค๋ฐ‹ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ƒˆ Branch๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด Branch๋ฅผ ์˜ค๊ฐ€๋ฉด์„œ ์ด์ „ ์‹œ์ ์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๊ณ , ์ˆ˜์ • ํ›„ ์‹œ์ ์œผ๋กœ ๋˜๋Œ์•„์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

๋˜ํ•œ Stash ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋˜๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๋Š”๋ฐ $git stash๋ช…๋ น์„ ์“ฐ๋ฉด ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์œผ๋กœ๋ถ€ํ„ฐ ์ด ๋ช…๋ น์„ ์“ฐ๋Š” ์‹œ์ ๊นŒ์ง€์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Stash์— ๋‹ด์•„์ค€๋‹ค. ์ˆ˜์ •ํ•œ ํ›„ ์ปค๋ฐ‹์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด ์ด ๋‚ด์šฉ๋“ค์„ Stash์— ๋‹ด์•„ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค. Stash์— ๋‹ด์€ ๋‚ด์šฉ์€ $git stash pop์œผ๋กœ ๋ถˆ๋Ÿฌ๋“ค์ผ ์ˆ˜ ์žˆ๊ณ  $git stash -u๋ช…๋ น์œผ๋กœ Untraked ํŒŒ์ผ๊นŒ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Stash๋ฅผ ์ด์šฉํ•˜๋ฉด ์‹ค์ˆ˜๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•œ ๊ฒฝ์šฐ์—๋„ ์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋Š” ์ธํ„ฐ๋„ท์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ์ €์žฅ์†Œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

$git remote add <๋‹จ์ถ•์ด๋ฆ„> <์ €์žฅ์†Œurl>

๋งŒ์•ฝ ๋‹จ์ถ•์ด๋ฆ„์— ์•„๋ฌด๊ฒƒ๋„ ์ ์ง€ ์•Š์œผ๋ฉด ๋‹จ์ถ•์ด๋ฆ„์€ ์ž๋™์œผ๋กœ origin์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์ง„๋‹ค.(์•„๋งˆ๋„)

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ํ™•์ธํ•˜๊ธฐ

$git remote ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋‹จ์ถ• ์ด๋ฆ„์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ณ 
$git remote -v๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋‹จ์ถ• ์ด๋ฆ„๊ณผ url์„ ํ•จ๊ป˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
$git remote show <๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ๋‹จ์ถ•์ด๋ฆ„> ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(fetch, pull)

๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

$git fetch <๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ๋‹จ์ถ•์ด๋ฆ„>

์ด ๋ช…๋ น์œผ๋กœ ๋กœ์ปฌ์—๋Š” ์—†์ง€๋งŒ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—๋Š” ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค. fetch๋ช…๋ น์€ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค์ง€๋งŒ ์ž๋™์œผ๋กœ merge์‹œ์ผœ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ์ปฌ์—์„œ ํ•˜๋˜ ์ž‘์—…์„ ์ •๋ฆฌํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ merge์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

$git pull ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฟ ์•„๋‹ˆ๋ผ ์ž๋™์œผ๋กœ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์™€ merge์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. (์•„์ง ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์ •๋ฆฌ)

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ(push)

$git push <๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ๋‹จ์ถ•์ด๋ฆ„> <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์„ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์ด ๋ช…๋ น์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜์—ฌ ๋†“์•˜๋‹ค๋ฉด ๊ทธ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€์„œ mergeํ•œ ํ›„์— pushํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ ์ด๋ฆ„๋ณ€๊ฒฝ/์‚ญ์ œ ํ•˜๊ธฐ

์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.

$git remote rename <์›๋ž˜์ด๋ฆ„> <๋ฐ”๊ฟ€์ด๋ฆ„>

์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

$git remote remove <์ €์žฅ์†Œ ์ด๋ฆ„>

๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜๋ž€?

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

๋ธŒ๋žœ์น˜์˜ ์ƒ์„ฑ๊ณผ ์ด๋™

์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

$git branch <์ƒˆ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ Git์€ master ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ด master ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ๋Š” ์ปค๋ฐ‹์„ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋‹ค.

$git checkout <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜์—ฌ ์ปค๋ฐ‹์„ ํ•˜๊ฒŒ ๋˜๋ฉด master ๋ธŒ๋žœ์น˜๋Š” ์ด์ „ ์ปค๋ฐ‹์— ๋‚จ์•„์žˆ๊ฒŒ ๋˜๊ณ  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๊ฐ€ ์•ž์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ๊ทธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

$git checkout -b <์ƒˆ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

merge์˜ ๊ธฐ์ดˆ

์ด ๋ถ€๋ถ„์€ ์ด ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.


๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ

$git branch ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. * ํ‘œ์‹œ๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ๋ธŒ๋žœ์น˜๋Š” ํ˜„์žฌ checkout ํ•ด์„œ ์ž‘์—…ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ์ง€๊ธˆ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•˜๊ฒŒ ๋˜๋ฉด * ํ‘œ์‹œ๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ํ•œ ๋‹จ๊ณ„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค. $git branch -v ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ธŒ๋žœ์น˜๋งˆ๋‹ค ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ ๋ธŒ๋žœ์น˜์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์ข‹์€ ์˜ต์…˜๋„ ์žˆ๋‹ค. ํ˜„์žฌ checkout ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ merge ๋œ ๋ธŒ๋žœ์น˜์ธ์ง€ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ํ•„ํ„ฐ๋ง ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ช…๋ น์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

$git branch -merged
$git branch -no-merged

์—ฌ๊ธฐ์„œ -merged์˜ต์…˜์œผ๋กœ ํ™•์ธํ•œ ๋ธŒ๋žœ์น˜ ์ค‘ * ํ‘œ์‹œ๊ฐ€ ๋ถ™์–ด์žˆ์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜๋Š” ์ด๋ฏธ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์™€ merge ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•ด๋„ ์ •๋ณด๋ฅผ ์žƒ์ง€ ์•Š๋Š”๋‹ค. ๋ธŒ๋žœ์น˜ ์‚ญ์ œ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

$git branch -d <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

mergeํ•˜์ง€ ์•Š์€ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•˜๋Š” ์˜ต์…˜์€ -d ๋Œ€์‹  -D๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค.


๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋งํฌ๋ฅผ ์ฐธ์กฐ ํ•˜๋„๋ก ํ•˜๊ณ , ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์˜ ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜๋ฅผ ์ˆ˜์—…์‹œ๊ฐ„์— ์ง„ํ–‰ํ–ˆ๋˜ ๊ฐ„๋‹จํ•œ ํ˜‘์—… ๊ณผ์ •์„ ํ†ตํ•ด ์•Œ์•„๋ณธ๋‹ค.

ํ˜‘์—…์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ณผ์ •

'์‚ฌ์šฉ์ž 1'์ด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜‘์—…์„ ํ•˜๊ธฐ๋กœ ํ•œ '์‚ฌ์šฉ์ž 2'๋ฅผ ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋กœ ์ดˆ๋Œ€ํ•œ๋‹ค.

'์‚ฌ์šฉ์ž1'์ด ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์ปค๋ฐ‹์„ ํ•œ ๋’ค Pushํ•œ๋‹ค.

'์‚ฌ์šฉ์ž2'๊ฐ€ ์ด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ๋ฅผ Clone์„ ํ•˜๊ฒŒ ๋˜๋ฉด Git์€ ์ž๋™์œผ๋กœ origin์ด๋ผ๋Š” ์ด๋ฆ„์„ ์ €์žฅ์†Œ์— ๋ถ™์ด๊ณ  orgin์œผ๋กœ๋ถ€ํ„ฐ ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋‚ด๋ ค๋ฐ›์€ ํ›„ master ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ, ์ด ํฌ์ธํ„ฐ๋Š” origin/master๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ๋ฉ‹๋Œ€๋กœ ์กฐ์ข…ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  Git์€ ๋กœ์ปฌ์˜ master ๋ธŒ๋žœ์น˜๊ฐ€ origin/master๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.

'์‚ฌ์šฉ์ž1'์ด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ํŒŒ์ผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์ปค๋ฐ‹ ํ•œ ํ›„ ์ƒˆ๋กœ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ํ‘ธ์‰ฌ๋ฅผ ํ•œ๋‹ค. ์ด ์ƒˆ๋กœ๋งŒ๋“  ๋ธŒ๋žœ์น˜์˜ ์ด๋ฆ„์„ dev๋ผ๊ณ  ํ•˜์ž.

'์‚ฌ์šฉ์ž2'๊ฐ€ fetch๋ฅผ ํ†ตํ•˜์—ฌ '์‚ฌ์šฉ์ž1'์ด Pushํ•œ ๋‚ด์šฉ์„ ๋ฐ›์•„์˜ค๋ฉด ์ƒˆ๋กœ์šด ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜์ธ origin/dev๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค.

'์‚ฌ์šฉ์ž2'๋Š” ์ƒˆ๋กœ ๋ฐ›์•„์˜จ ๋‚ด์šฉ๊ณผ ๋กœ์ปฌ ๋‚ด์šฉ์„ mergeํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด $git merge origin/dev ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์šฐ๋ฆฌ๋Š” mergeํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ๋ชจํŠธ ํŠธ๋ž˜ํ‚น ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…์„ ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค€๋‹ค.

$git checkout -b dev origin/dev

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด origin/dev ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” dev๋ผ๋Š” ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

๊ฐ์ž ์ƒˆ๋กœ ๋งŒ๋“  dev ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ์ž์˜ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ feature/list์™€ feature/form์ด๋ผ๊ณ  ํ•˜์ž.

๊ฐ์ž ์„œ๋กœ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ์„ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  ๊ฐ์ž ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•œ๋‹ค.

์ดํ›„ '์‚ฌ์šฉ์ž1'์ด feature/list ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‰ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  pull request๋กœ origin/dev๋กœ mergeํ•ด๋„ ๋˜๊ฒ ๋ƒ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์Šน์ธ์„ ๋ฐ›๊ฒŒ๋˜๋ฉด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ feature/list๊ฐ€ origin/dev๋กœ merge๋˜์–ด์ง„๋‹ค. ์ดํ›„์— feature/list๋ธŒ๋žœ์น˜๋Š” merge๋˜์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•ด๋„ ๋œ๋‹ค.

๋ฐ”๋€ ๋‚ด์šฉ์ด ์žˆ๋Š” ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ '์‚ฌ์šฉ์ž 2'๊ฐ€ fetch๋ฅผ ์ด์šฉํ•ด ๋ฐ›์•„์˜จ๋‹ค. ๋ฐ›์•„์˜จ ๋‚ด์šฉ์„ ์ž์‹ ์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ ๋‚ด์˜ ๋ธŒ๋žœ์น˜์ธ feature/form์œผ๋กœ chekout์„ ํ•œ ํ›„ origin/dev๋ฅผ merge ์‹œํ‚จ๋‹ค.

๊ฐ™์€ ๋ถ€๋ถ„์„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜๊ณ , ์ด ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๋ถ€๋ถ„์„ fixํ•ด์ค€ ํ›„ ์ปค๋ฐ‹ํ•˜๊ณ  feature/form ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‰ฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

ํ‘ธ์‰ฌ ํ•œ ํ›„์— pull request๋กœ dev๋กœ mergeํ•ด๋„ ๋˜๊ฒ ๋ƒ๋Š” ์š”์ฒญ ํ›„์— ์Šน์ธ์„ ๋ฐ›๊ฒŒ๋˜๋ฉด ๋ฆฌ๋ชจํŠธ ์ €์žฅ์†Œ์—์„œ feature/form ๋ธŒ๋žœ์น˜๋ฅผ origin/dev๋กœ merge๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ์ดํ›„์— feature/form ๋ธŒ๋žœ์น˜๋Š” merge๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.


Rebase

์“ธ ์ผ๋„ ์—†๊ณ  ์ž˜ ๋ชฐ๋ผ์„œ ์ถ”ํ›„ ์ •๋ฆฌ.