๐Ÿ’ฅ ์ €์„ธ์ƒ ๊นƒํ„ฐ๋”” 2์ผ์ฐจ (1)

๊ฐ€์˜ยท2020๋…„ 12์›” 21์ผ
0
post-thumbnail

Index

  1. .gitignore ํŒŒ์ผ์€ ๋ญ”๊ฐ€์š”?
  2. amend, squash : ์ปค๋ฐ‹ ๊ฐ–๊ณ  ๋†€๊ธฐ
  3. stash : working tree๋ฅผ ์ž ๊น๋งŒ ์ €์žฅ
  4. branch์™€ checkout
  5. branch ๋ณ‘ํ•ฉ 1: merge
    1) 3-way merging
    2) merge conflict?
  6. branch ๋ณ‘ํ•ฉ 2: rebase
  7. branch-์ „๋žต
  8. commit์˜ ์ ์ • ๋‹จ์œ„์™€ ํ˜‘์—…, ๋ฉ”์‹œ์ง€

์ด๋ฒˆ 2์ผ ์ฐจ ๋ณต์Šต์€ ๊ธ€ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ์“ธ๊ฑด๋ฐ
์ด ๊ธ€์—์„œ๋Š” 5-1๊นŒ์ง€๋งŒ ๋‹ค๋ฃฌ๋‹ค!


1. .gitignore ํŒŒ์ผ์€ ๋ญ”๊ฐ€์š”?

๊นƒ์ด ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•˜๋Š” ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•ด๋‘๋Š” ํŒŒ์ผ์ด๋‹ค.

์ž์„ธํžˆ ๋งํ•˜์ž๋ฉด git์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์›๊ฒฉ ์ €์žฅ์†Œ์— ํŒŒ์ผ์„ ์˜ฌ๋ฆด ์ผ์ด ์ •๋ง ๋งŽ์€๋ฐ, ๊นƒ์ด ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ๋“ค์€ ๋ชจ๋‘ ์›๊ฒฉ์ €์žฅ์†Œ์— ์˜ฌ๋ผ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด .gitignore์— ๋ฏธ๋ฆฌ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

๋‚˜ ํ˜ผ์ž local์—์„œ ์ž‘์—…์„ ํ•  ๋•Œ๋„ ๊ตณ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ํŒŒ์ผ๋“ค์„ ์จ๋†“์•„๋„ ๋œ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ, .gitignore์— ์ด๋ฆ„์„ ์ €์žฅํ•ด๋‘” ํŒŒ์ผ๋“ค์€ git add๋ฅผ ์‹คํ–‰ํ•ด๋„ ํŒŒ์ผ๋“ค์ด tracking ๋˜์ง€ ์•Š๋Š”๋‹ค.

#์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์„์ฒ˜๋ฆฌ๋œ๋‹ค.

์œ„์™€ ๊ฐ™์€ .gitignore ํŒŒ์ผ์„ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ด๋†“๊ณ ๋‚˜์„œ, README.txt์™€ text/README.txt, one.pdf ์ด๋ ‡๊ฒŒ ์„ธ ๊ฐœ์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , node_modules/ ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋„ ์ƒ์„ฑํ•œ๋‹ค.

git status์˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€ํ•œ ํŒŒ์ผ๋“ค์ด Tracking ๋ผ์•ผํ•˜๋Š” ํŒŒ์ผ๋กœ ์ธ์‹๋ ๊นŒ, ์•„๋‹๊นŒ?

์ •๋‹ต์€ No.
status ๋ช…๋ น ์‹œ ์ถœ๋ ฅ๋˜๋Š” untrackted files์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ git add ์‹œ์—๋„ .gitignore์— ํฌํ•จ๋˜๋Š” ์ € ํŒŒ์ผ๋“ค์€ Index๋กœ ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฑธ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค. ๐Ÿฅฐ

๊ทธ๋Ÿฐ๋ฐโ—โ— ์‹ค์ˆ˜๋กœ ํŒŒ์ผ์„ Trackingํ•œ(index ์˜์—ญ์— ๋“ค์–ด๊ฐ„) ํ›„์— .gitignore์— ํŒŒ์ผ๋ช…์„ ์ถ”๊ฐ€ํ•˜๋ฉด .gitignore์— ์˜ํ•ด ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์†ํ•ด์„œ Index/local repository์— ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿด ๋•Œ๋Š” git rm -r --cached ๋ช…๋ น์–ด๋ฅผ .gitignore์˜ ์œ„์น˜์—์„œ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋กœ์ปฌ์—์„œ ์ปค๋ฐ‹ ๊ธฐ๋ก๊นŒ์ง€ ์ง€์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด git reset์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

๋งŒ์•ฝ remote repository์— ์˜ฌ๋ผ๊ฐ€์žˆ์„ ๊ฒฝ์šฐ์—๋Š” reset ํ›„ force push๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค. (์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ํ•˜์…จ๋‹ค.) ๐Ÿ‘‰๐Ÿป ์ด๊ฑฐ๋Š” ํ˜‘์—…ํ•  ๋•Œ ๋น„๋ฐ€ํ‚ค๋ฅผ ์ž˜๋ชป์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ํ–ˆ์„ ๋•Œ์˜ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.


2. amend, squash : ์ปค๋ฐ‹ ๊ฐ–๊ณ  ๋†€๊ธฐ

๋ฐฉ๊ธˆ ํ•œ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์–ด์š”: amend

amend ์˜ต์…˜์€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ commit message/descreption ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ Index์— ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ์ตœ๊ทผ ์ปค๋ฐ‹์— ํ•ฉ์น˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

CLI :

$ git commit --amend # ์ตœ๊ทผ ์ปค๋ฐ‹์— ํ•ฉ์น  ๋•Œ
$ git commit --amend -m "commit message" # ์ตœ๊ทผ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ์ˆ˜์ •

๋” ํŽธํ•œ ๋ฐฉ๋ฒ•:

GitKraken ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ปค๋ฐ‹ ์ฐฝ์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ Amend ์ฒดํฌ๋ฐ•์Šค๋งŒ ์„ค์ •ํ•ด์ฃผ๋ฉด amend ์˜ต์…˜์„ ์ ์šฉํ•ด ์ปค๋ฐ‹ํ•œ๋‹ค. ๋„Œ ์ตœ๊ณ ์˜ ์˜ค์ง•์–ด์•ผ..โญ

์ปค๋ฐ‹๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜์ž: squash

CLI

$ git rebase -i HEAD~n
# HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์ปค๋ฐ‹์œผ๋กœ๋ถ€ํ„ฐ n๊ฐœ์˜ ์ปค๋ฐ‹์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค.

Gitkraken

์จ˜! ์ €๋ ‡๊ฒŒ ์ปค๋ฐ‹๋“ค์„ ์„ ํƒํ•˜๊ณ  Squash 4 commits๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋์ด๋‹ค.

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณ€ํ•œ๋‹ค. ๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ์กฐ์‹ฌํ•ด์•ผํ•˜๋Š” ๊ฑด, ์ด๋ฏธ remote repository์— push๋ฅผ ํ•ด๋‘” ์ƒํƒœ์—์„œ commit์„ ํ•ฉ์น˜๋ฉด local์˜ ๋ธŒ๋žœ์น˜์™€ remote์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ๋‹ค๋ฅธ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์ดํ›„์— push๋ฅผ ํ•˜๋ฉด error๊ฐ€ ์ƒ๊ธด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿด ๋•Œ squash ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.


3. stash : working tree๋ฅผ ์ž ๊น๋งŒ ์ €์žฅ

์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ git add ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์„œ Index ์˜์—ญ์— ์˜ฌ๋ ค๋†“์€ ๋’ค ๊ทธ๊ฑธ ์ €์žฅํ•ด ๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฌด์Šจ ๋ง์ธ์ง€ ํ•œ ๋ฒˆ ๋ณด์ž.

Working directory์— stashTest ๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ git status๋ฅผ ์‹คํ–‰ํ•˜๋‹ˆ Untracted files์— stashTest๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ํ›„ git add๋กœ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Index ์˜์—ญ์— ์ €์žฅํ•œ๋‹ค.

๊ทธ๋Ÿผ ๋‹น์—ฐํžˆ stashTest๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด Changes to be committed์— ํฌํ•จ๋˜๊ฒŒ ๋œ๋‹ค.

์—ฌโ—๊ธฐโ—์„œโ— ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ stash push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž ์‹œ ์ €์žฅํ•ด๋ณด์ž

๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ๋ณด๋ฉด working directory์™€ index์˜ ์ƒํƒœ๊ฐ€ master(๋ธŒ๋žœ์น˜) ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ณ  ์จ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ git status๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํ–‰์„ ํ•ด๋ณด๋‹ˆ๊นŒ

์•„๊นŒ ์šฐ๋ฆฌ๋Š” commit์„ ํ•˜์ง€ ์•Š์•˜์—ˆ๋Š”๋ฐ๋„ nothing to commit์ด๋ผ๋ฉฐ Index ์˜์—ญ์— ์žˆ๋˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ stash push๋กœ ์ €์žฅํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ํ™•์ธ ํ•˜๋ ค๋ฉด stash list๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ stash ํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๋ฐ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. stash๋Š” ์Šคํƒ์ฒ˜๋Ÿผ LIFO ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € push ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ๋‚˜์ค‘์— pop๋œ๋‹ค.


4. branch์™€ checkout

branch๋ž€?

์šฐ๋ฆฌ๋Š” Git์œผ๋กœ ํ˜‘์—…์„ ํ•  ๋•Œ ๊ฐ์ž์˜ ์ž‘์—…๊ณต๊ฐ„์„ ๋งˆ๋ จํ•œ๋‹ค. ์ด๊ฑธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ Git์˜ branch์ด๊ณ  ๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด git์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค. branch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชฉ์ ๊ณผ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ์ง„๋‹ค.

Git ๋ธŒ๋žœ์น˜๋Š” ์ปค๋ฐ‹ ์‚ฌ์ด๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ํฌ์ธํ„ฐ๊ฐ™์€ ๊ฒƒ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Git์€ master ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฒ˜์Œ ์ปค๋ฐ‹ํ•˜๋ฉด ์ด master ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ์„ฑ๋œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ดํ›„ ์ปค๋ฐ‹์„ ๋งŒ๋“ค๋ฉด master ๋ธŒ๋žœ์น˜๋Š” ์ž๋™์œผ๋กœ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์ดํ•ด๊ฐ€ ์ž˜ ๋˜๋Š” ์‚ฌ์ง„์ด ์žˆ์–ด์„œ ๊ฐ€์ ธ์™”๋‹ค.

์‚ฌ์ง„ ์ถœ์ฒ˜ : Git ๋ธŒ๋žœ์น˜ - ๋ธŒ๋žœ์น˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€

๋ณด๋ฉด v1.0 ์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜์™€ master๋ผ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ๊ณ  ๋ชจ๋‘ f30ab (์ปค๋ฐ‹)์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ HEAD ํฌ์ธํ„ฐ๋Š” master๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ์ƒํƒœ์—์„œ ์ปค๋ฐ‹์„ ์ถ”๊ฐ€ํ•˜๋ฉด master๊ฐ€ ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๊ณ  head๋Š” master๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ธฐ - git branch

๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด์ž!! ์•„๋ž˜์™€ ๊ฐ™์ด git branch ๋ช…๋ น์œผ๋กœ kayoung ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค.

$ git branch kayoung

์ƒˆ๋กœ ๋งŒ๋“  ๋ธŒ๋žœ์น˜(kayoung)๋„ ์ง€๊ธˆ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

checkout

git checkout ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•œ๋‹ค ํ•จ์€! HEAD ํฌ์ธํ„ฐ๊ฐ€ ์›ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
ํ˜„์žฌ HEADํฌ์ธํ„ฐ๊ฐ€ kayoung ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉด, master๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

$ git branch master

5. branch ๋ณ‘ํ•ฉ 1: merge

merge๊ฐ€ ๋จธ์ง€?

Git์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋ถ„์—…์„ ํ–ˆ๋˜ ๊ฒƒ์„ ํ•ฉ์ณ์•ผํ•˜๋Š” ๊ณผ์ •์ด ์žˆ์–ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์ด merge๋‹ค.

git branch๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ˜„์žฌ ๋‚ด๊ฐ€ ์–ด๋Š ๋ธŒ๋žœ์น˜์— ์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค. ๋ช…๋ น ๋’ค์— ์˜ค๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ HEAD๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ์ง€๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด,

์ด๋Ÿฐ์‹์œผ๋กœ ํ˜„์žฌ ๋‚˜๋Š” master ๋ธŒ๋žœ์น˜์— ์žˆ๊ณ  kayoung ๋ธŒ๋žœ์น˜๊ฐ€ ๋”ฐ๋กœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด ๋•Œ git branch ๋ช…๋ น์„ ๋ฐ‘์—์ฒ˜๋Ÿผ

$ git merge kayoung

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿผ ๊ฒฐ๊ณผ๋Š”

CLI :

GUI :

์ด๋Ÿฌ๊ณ  ๋‚˜์„œ๋Š” kayoung branch๋ฅผ ์‚ญ์ œํ•ด๋„ ๋œ๋‹น!

ํŽธ ์•ˆ ๐Ÿค—

3-way merging

๋ธŒ๋žœ์น˜ ์ถฉ๋Œ(conflict)๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์— Git์ด ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•  ๋•Œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž!!

Git์€ 3-way merging์„ ๋”ฐ๋ผ merge๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์„ค๋ช…ํ•˜๊ธฐ ์•ž์„œ ๋ฐ‘์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, Base๋Š” branch๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์˜ ์›๋ž˜ ํŒŒ์ผ ์ƒํƒœ์ด๊ณ , Source๋Š”
๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ธŒ๋žœ์น˜์—์„œ์˜ ํŒŒ์ผ ์ƒํƒœ, ๋งˆ์ง€๋ง‰์œผ๋กœ Target์€ ๋ณ‘ํ•ฉํ•  ๋ธŒ๋žœ์น˜์˜ ํŒŒ์ผ ์ƒํƒœ์ด๋‹ค.

3-way merging์€ ๋ฐ”๋กœ ์ด ์„ธ ๊ฐ€์ง€ ํŒŒ์ผ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ๋น„๊ตํ•˜์—ฌ Mergeํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์ž. Base์™€ Source, Target ํŒŒ์ผ๋“ค์„ ๋ณด๋ฉด ์ฒซ๋ฒˆ์งธ ์ค„์€ ๋ชจ๋‘ ๊ฐ™์•„์„œ Merged ํŒŒ์ผ์—๋„ ๊ทธ๋Œ€๋กœ ๋ณ‘ํ•ฉ์ด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ ์ค„์„ ๋ณด๋ฉด Source์—์„œ๋งŒ ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ๋„ Git์ด Base์™€ ๋น„๊ตํ•ด์„œ ๋ฐ”๋€ ์ƒํƒœ๋กœ merge ํ•œ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (B6๋กœ ๋ฐ”๋€œ)

์„ธ๋ฒˆ์งธ ์ค„์€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Target์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ mergeํ•ด์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด C4๋กœ ๋ฐ”๋€Œ์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋„ค ๋ฒˆ์งธ ์ค„์ด merge conflict๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์ด๋‹ค! Source์˜ "D3"์™€ Target์˜ "D4"๊ฐ€ Base๋ž‘ ๋น„๊ตํ•ด์„œ ๋ชจ๋‘ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— Git์˜ ๋ณ‘ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” ์–ด๋–ค ๊ฑธ๋กœ merge ํ•ด์•ผํ• ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค์„ฏ ๋ฒˆ์งธ์™€ ๊ฐ™์ด Source์™€ Target ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์œผ๋กœ ๋ณ‘ํ•ฉ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.


์–ด๋ ต๋‹ค ๊นƒ
๊ณ ํ”„๋‹ค ๋ฐฐ

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