Git Workflow, git branch, conflict

๐ŸŽฌ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

ํŽ˜์–ด๋‹˜๊ณผ ์—ฌ์„ฏ์‹œ๋ฅผ ๋„˜๊ธฐ๋ฉด์„œ๋„ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ํŽ˜์–ด๋‹˜์˜ ๋ธŒ๋žœ์น˜์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ํŽ˜์–ด๋‹˜ ๋•์— ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์„ ์•Œ๊ฒŒ ๋˜์–ด ์‹ ๊ธฐํ•จ์„ ๋Š๊ผˆ๋Š”๋ฐ ๊ธˆ๋ฐฉ ๊นŒ๋จน์„๊นŒ๋ด ํ™ฉ๊ธ‰ํžˆ ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์•„๋งˆ ๋‚ด๊ฐ€ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ์ด ์ข€ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋”๋ผ๋„ ํ•™์Šตํ•˜๋ฉด์„œ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋‹ˆ ํฌ๊ฒŒ ๊ฐœ์˜์น˜๋Š” ์•Š๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ ˆ์Šจ์„ ํ†ตํ•ด ๊นƒ ํ”Œ๋กœ์šฐ ์—ฐ์Šตํ•˜๋Š” ์‹ฌํ”Œ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ์ ์–ด๋ณด๊ฒ ๋‹ค.

๐ŸฅœBasic Git Workflow - 1.

  1. codestates/simple-git-workflow ๋กœ ๊ฐ€์„œ fork, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ Local ์— clone ํ•ด์˜ค๊ธฐ.
  2. pair ์˜ repo ์™€ ๋‚˜์˜ local ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ.
git remote add pair <Repo URL for pairs fork>

git remote -v
  1. ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋จผ์ € ๋งก์€ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ปค๋ฐ‹์„ ํ•œ๋‹ค. ์ดํ›„ ๋“œ๋ผ์ด๋ฒ„ ๋ณธ์ธ์˜ ๊นƒํ—ˆ๋ธŒ repo ์— push ํ•œ๋‹ค.
git push origin master (or other branch name)
  1. ๋“œ๋ผ์ด๋ฒ„ / ๋„ค๋น„๊ฒŒ์ดํ„ฐ ์—ญํ• ์„ ๋ฐ”๊พผ๋‹ค. ๋ฐ”๋€ ๋“œ๋ผ์ด๋ฒ„๋Š” ์ง์ „์— ์ž‘์„ฑ๋œ ํŽ˜์–ด์˜ ์ฝ”๋“œ๋ฅผ ์ž์‹ ์˜ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
git pull pair master (or other branch name)
  1. ์ด์ œ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค๊ณ  ์ž์‹  (๋“œ๋ผ์ด๋ฒ„) ๊นƒํ—ˆ๋ธŒ repo ์— push ๋ฅผ ํ•œ๋‹ค.
git push origin master (or other branch name)
  1. ๋˜๋‹ค์‹œ ๋“œ๋ผ์ด๋ฒ„์™€ ๋„ค๋น„๊ฒŒ์ดํ„ฐ์˜ ๋ฃฐ์„ ๋ฐ”๊พธ๊ณ  ๋ฐ”๋€ ๋“œ๋ผ์ด๋ฒ„๋Š” ์ง์ „์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ž์‹ ์˜ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
  2. ๊ณผ์ •์„ ๋ฐ˜๋ณต ์ง„ํ–‰ํ•œ๋‹ค. push ๋Š” ํ•ญ์ƒ ์ž์‹ ์˜ repo ์—, pull ์„ ๋•ก๊ฒจ์˜ฌ ๋•Œ๋Š” pair ์˜ repo ์—์„œ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ต!

๐Ÿ‘ฏโ€โ™‚๏ธํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ 1.

1-1. ์ผ๋ฐ˜์ ์ธ ๊นƒ ์ปค๋ฐ‹๊ณผ ํ‘ธ์‰ฌ.

์ฒ˜์Œ์— ๊ฐ์ž fork ๋ฐ clone ํ•ด์˜จ ๋’ค ๋‚ด์šฉ๋ฌผ์„ ํ™•์ธํ•ด ๋ณด๋‹ˆ, README.md ํŒŒ์ผ์ด ํ•˜๋‚˜ ์žˆ์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊ฑด๋“ค์ง€ ์•Š๊ณ  index.js ๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ์‚ฌ์น™ ์—ฐ์‚ฐ ํ•จ์ˆ˜๋ฅผ ๋ฒˆ๊ฐˆ์•„ ๋งŒ๋“ค์–ด ๋„ฃ์œผ๋ฉด์„œ ์ง„ํ–‰ํ–ˆ๋‹ค.

๋งจ ๋จผ์ € ๋”ํ•˜๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด ๋ณด์•˜๋‹ค.

function adder(a, b) {
  return a + b
}

๊ทธ๋ฆฌ๊ณ  ๋‚ด repo ์— push. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ผ๋ฐ˜์ ์ด๋‹ค.

1

๊ทธ๋ฆฌ๊ณ  ํŽ˜์–ด๋‹˜์ด ๋‚ด ๋ ˆํฌ์™€ ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์‹œ push ๋ฅผ ํ–ˆ๋‹ค.

1-2. pair ์˜ repo ์™€ ๋‚˜์˜ local ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ.

์—ฌ์ง€๊ป ํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ์‚ด์ง ๋‹นํ™ฉํ–ˆ์ง€๋งŒ ํŽ˜์–ด๋‹˜๊ป˜์„œ ๋‹นํ™ฉํ•˜์ง€ ์•Š๊ณ  ์ปจํŠธ๋กค ํ•ด์ฃผ์…จ๋‹ค.

์ผ๋‹จ ๊ฐ€์ด๋“œ ๋œ๋Œ€๋กœ์˜ ๋ฐฉ๋ฒ•์€

git remote add pair <Repo URL for pairs fork>

git remote -v

์ธ๋ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์œผ๋กœ ์ง„ํ–‰ํ–ˆ๊ณ  ๋ญ” ๋œป์ธ์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ ์•„๋ฌดํŠผ ํŽ˜์–ด๋‹˜์˜ local ์— ์ €์žฅ๋œ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™”๋‹ค.

2

์ด์ œ ์ด ์ƒํƒœ์—์„œ ์œ„์˜ ๊ณผ์ •์„ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  git branch ๋ฅผ ์ƒ์„ฑํ•œ ๋’ค branch ๋กœ ์ž‘์—… ๊ณต๊ฐ„์„ ์˜ฎ๊ฒจ ์ž‘์—…ํ•œ ๋’ค ์˜ฌ๋ ค ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

๐ŸฅœBasic Git Workflow (branch) - 2.

git branch ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์›๋ณธ์—์„œ ๊ฐ€์ง€์น˜๊ธฐ ๋œ ๋ถ„๋ฆฌ๋œ ์ž‘์—… ์˜์—ญ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

branch ๋Š” ํ˜„์žฌ ์ž‘์—… ๊ณต๊ฐ„์„ ๋ฒ ์ด์Šค๋กœ ๋งŒ๋“ค์–ด ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜„์žฌ ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

git checkout <๋ธŒ๋žœ์น˜ ์ด๋ฆ„> ์„ ํ†ตํ•ด ํ•ด๋‹น ์ด๋ฆ„์˜ branch ๋กœ ์ด๋™, ์ฆ‰ ์ž‘์—… ๊ณต๊ฐ„์„ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ 

  1. ํ•ด๋‹น branch ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ,
  2. ํ•ด๋‹น branch ๋กœ ์ž‘์—… ๊ณต๊ฐ„์„ ์ด๋™ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ปค๋งจ๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
git checkout -b <๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ธŒ๋žœ์น˜๋ช…>

์›๋ณธ์„ ๋ฒ ์ด์Šค๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด,

  1. ๋ฒ ์ด์Šค๋กœ ํ•˜๊ณ  ์‹ถ์€ ๋ธŒ๋žœ์น˜๋กœ ์ž‘์—… ๊ณต๊ฐ„์„ ์˜ฎ๊ธด๋‹ค.
git checkout ์›๋ณธ
  1. ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
git checkout -b ๊ธฐ๋Šฅ2

๐Ÿ‘ฏโ€โ™‚๏ธํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ 2.

2-1. branch ์ƒ์„ฑํ•˜๊ธฐ

3

git checkout -b mook ์œผ๋กœ โ€œmookโ€ ์ด๋ผ๋Š” branch ๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ , ๋™์‹œ์— master ์—์„œ โ€œmookโ€ ์ด๋ผ๋Š” branch ๋กœ ์ž‘์—… ๊ณต๊ฐ„์„ ์˜ฎ๊ฒผ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ˆ—์…ˆ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ํŽ˜์–ด๋‹˜์˜ ๋บ„์…ˆ ํ•จ์ˆ˜์™€ ๋”๋ถˆ์–ด ๋‚ด๊ฐ€ ํ•˜๋ฉด ์„ธ๋ฒˆ์งธ ์ž‘์—… ์ด๋‹ค.

// add divide by mook, dotorimook
function divide(a, b) {
  return a / b
}

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ฒจ ์ฃผ๊ณ , git push origin mook ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ โ€œmookโ€ ์ด๋ผ๋Š” branch ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ push ํ–ˆ๋‹ค.

์ด์ œ ๊ถ๊ธˆํ•จ์ด ์ƒ๊ธด๋‹ค.

๊ณต๋™ ์ž‘์—…์ž๊ฐ€ ์œ„์ฒ˜๋Ÿผ branch ๋ฅผ ๋งŒ๋“ค์–ด push ๋ฅผ ํ–ˆ์„ ๋•Œ ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‚ด๊ฐ€ ๊ฐ€์ ธ์˜ฌ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?

๋ธŒ๋žœ์น˜๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์„œ ๋ณธ๋ž˜ ํฌํฌ๋ฐ›์€ ์ €์žฅ์†Œ์— merge ๋„ ํ•ด๋ณด๊ณ  ์ด๋Ÿฐ ์ €๋Ÿฐ ์‹œ๋„๋ฅผ ํŽ˜์–ด๋‹˜๊ณผ ํ•ด๋ณด์•˜์œผ๋‚˜ ๋˜์ง€ ์•Š์•˜๋‹ค.

2-2. ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ๋ธŒ๋žœ์น˜์— checkoutํ•˜๊ณ  commit, push ํ•˜๊ธฐ.

์ถœ์ฒ˜ : https://lucidmaj7.tistory.com/161

์œ„ ๋ธ”๋กœ๊ทธ์˜ 3๋ฒˆ์งธ ๋‚ด์šฉ์„ ๋ณด๊ณ  ๋”ฐ๋ผ ํ•œ ๋์— ํŽ˜์–ด๋‹˜์ด push ํ•œ ์›๊ฒฉ repo branch ๋ฅผ ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// 1. ๋กœ์ปฌ๊ณผ ์›๊ฒฉ ์ €์žฅ์†Œ ๋ชจ๋‘์˜ branch list๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ.
git branch -a

// 2.  ์›๊ฒฉ ์ €์žฅ์†Œ์˜ branch list๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ.
git branch -r

// 3. ์„œ๋ฒ„์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ, ๋กœ์ปฌ์—๋Š” ์•„์ง ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ์ €์žฅํ•œ๋‹ค.
git fetch --all

// 4. ํŽ˜์–ด๋‹˜์˜ ์›๊ฒฉ repo branch ๋ฅผ ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ.
git branch seolleung sanghyun/hyunbranch

// 5. ํ•ด๋‹น ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™.
git checkout seolleung

// 6. ์ฝ”๋“œ๋ฅผ ์ž‘์—…ํ•ด์„œ ์ €์žฅํ•˜๊ณ  ์ปค๋ฐ‹ ๋ฐ ํ‘ธ์‹œํ•˜๊ธฐ.
git add index.js
git commit -m "added function by seolleung"
git push origin seolleung

4

๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ํŽ˜์–ด๋‹˜์˜ ์›๊ฒฉ repo branch ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ถ”๊ฐ€๋กœ ๋ง๋ถ™์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ  ๊ทธ ๋‹ค์Œ์€?

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉ (merging) ํ•ด ๋ณด์ž!

2-3. ์™„๋ฃŒ๋œ branch ์ฝ”๋“œ ์ž‘์—…์„ merge ํ•˜๊ธฐ

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ๊ทธ๊ฐ„ ๋ธŒ๋žœ์น˜ ์—์„œ์˜ ์ž‘์—… ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•œ๋‹ค.

// 1. ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋กœ ์ „ํ™˜ํ•˜๊ธฐ.
git checkout master

// 2. ๋ณ‘ํ•ฉ (merge) ํ•˜๊ธฐ (์ตœ์ข… ๋ชจ๋“  ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ด์€ branch ๋Š” seolleung)
git merge seolleung

// 3. push ํ•˜๊ธฐ.
git push origin master

// 4. branch ์ง€์›Œ๋ฒ„๋ฆฌ๊ธฐ.
git branch -d mook
git branch -d dotorimook
git branch -D seolleung
// ์•„๋ž˜๋Š” ๋Œ€๋ฌธ์ž D ๋ฅผ ์จ์„œ ์ง€์› ๋‹ค.

๊ณผ์ •์„ ์บก์ฒ˜ํ•ด ๋ณด์•˜๋‹ค.

5

๋Š๋‚€ ์ 

์•„์ง ์ถฉ๋Œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์–ด ๋ณด์ง€๋Š” ๋ชปํ–ˆ๋‹ค. ์–ด๋–ค ๋•Œ์— ์ถฉ๋Œ ์ƒํ™ฉ์„ ์•ผ๊ธฐ ํ•˜๋Š”์ง€ ์˜์ƒ์„ ๋ณด๋ฉด์„œ ๋‹ค์‹œ ๋ณด๊ณ  ๋‚ด์ผ ํŽ˜์–ด๋‹˜๊ณผ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

๋‚ด๊ฐ€ ์ด์ œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€

  1. ์ž‘์„ฑํ•œ ๋‚ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋‹ค์‹œ ์ฝ๊ณ  ์˜ค๋Š˜ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ์ธ์ง€ํ•˜๊ณ ,
  2. ๊ด€๋ จ ์‚ฌ์ดํŠธ๋‚˜ ํŽ˜์–ด๋‹˜์ด ๋ณด๋‚ด์ฃผ์‹  ์œ ํŠœ๋ธŒ ์˜์ƒ์„ ๋ณด๊ณ  ์žฌํ•™์Šตํ•˜๊ธฐ

https://git-scm.com/book/ko/v2

https://rogerdudler.github.io/git-guide/index.ko.html

์ธ๋ฐ, ์ผ๋‹จ ๋จธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ํ„ฐ์งˆ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ 1ํ•˜๊ณ  ์œ ํŠœ๋ธŒ ์˜์ƒ์„ ๋ณด๋Š” ๊ฒƒ์œผ๋กœ ์˜ค๋Š˜ ์ผ๊ณผ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•ด์•ผ ๊ฒ ๋‹ค.


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook