๐Ÿ“ฅ Github ์„ค์น˜ํ•˜๊ธฐ

  • Git SCM์— ์ ‘์†ํ•˜์—ฌ ์„ค์น˜ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
  • https://git-scm.com/

1. Github ๊ธฐ๋ณธ ๋ช…๋ น์–ด

1) local repository์šฉ

  • git init : ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ ๋งŒ๋“ค๊ธฐ
  • git clone [์›๊ฒฉ ์ €์žฅ์†Œ URL] : ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•จ
    • git clone -b [๋ธŒ๋žœ์น˜๋ช…] [์›๊ฒฉ ์ €์žฅ์†Œ URL]: ํŠน์ • ๋ธŒ๋žœ์น˜๋ฅผ clone
  • git add [์ถ”๊ฐ€ํ•  ํŒŒ์ผ๋ช…] : ์ปค๋ฐ‹ํ•  ํŒŒ์ผ์„ stage(์ปค๋ฐ‹ํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„ ์ƒํƒœ์— ๋Œ์ž…) ์‹œ์ผœ์ค๋‹ˆ๋‹ค
    • -update : ์ถ”์ ํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ๋งŒ add
  • git rm [์‚ญ์ œํ•  ํŒŒ์ผ๋ช…] : ์ œ๊ฑฐ ๊ด€๋ จ ๋ช…๋ น์–ด
    • -cached : ํ•ด๋‹น ํŒŒ์ผ์„ working directory ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ
      (Git ์ €์žฅ์†Œ์—์„œ๋งŒ ์‚ญ์ œํ•˜๊ณ  ์‹ค์ œ ํŒŒ์ผ์€ ๋‚จ๊ฒจ๋‘๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ)
  • git commit -m "[์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€]" : commit ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ commit
  • git commit --ammend : commit ๋ฉ”์„ธ์ง€ ๋ณ€๊ฒฝ
  • git status : git ์ƒํƒœ ํ™•์ธ
  • git log : commit ๋ชฉ๋ก ํ™•์ธ

2) local repository ↔ remote repository

  • git remote : local repository์— ์—ฐ๊ฒฐ๋œ remote repository๋ฅผ ํ™•์ธ
  • git remote add [๋ณ„์นญ] [remote repository URL ์ฃผ์†Œ] : ์›๊ฒฉ ์ €์žฅ์†Œ ๋“ฑ๋ก
  • git remote show [์›๊ฒฉ ์ €์žฅ์†Œ๋ช…] : ์›๊ฒฉ ์ €์žฅ์†Œ ์ •๋ณด
  • git push [์›๊ฒฉ ์ €์žฅ์†Œ๋ช…] [์›๊ฒฉ branch๋ช…] : branch ๋ช…์—๋Š” master ํ˜น์€ develop ๋“ฑ์˜ ๋ณธ์ธ์ด ๋งŒ๋“  branch์˜ ์ด๋ฆ„์„ ๋„ฃ์–ด ์ฃผ์„ธ์š”
  • git push [์›๊ฒฉ ์ €์žฅ์†Œ๋ช…] [์›๊ฒฉ branch๋ช…] : branch ๋ช…์—๋Š” master ํ˜น์€ develop ๋“ฑ์˜ ๋ณธ์ธ์ด ๋งŒ๋“  branch์˜ ์ด๋ฆ„์„ ๋„ฃ์–ด ์ฃผ์„ธ์š”
  • git pull [์›๊ฒฉ ์ €์žฅ์†Œ๋ช…] [์›๊ฒฉ branch๋ช…]: local repository์™€ ๋น„๊ตํ•˜์—ฌ ๋ณ‘ํ•ฉ์„ ํ•˜๊ณ , local repository์— ์ €์žฅ( add )๊นŒ์ง€ ์ˆ˜ํ–‰
    • git pull = git fetch + git merge

3) master ↔ branch

  • git branch : ๋ธŒ๋žœ์น˜์˜ ๋ชฉ๋ก๊ณผ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ํ™•์ธ
  • git branch [branch] : ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
    • -r [branch] : remote repository ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
    • -a [branch] : local / remote repository ๋ชจ๋‘์˜ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
    • -D [branch] : local repository ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
  • git checkout [branch] : ๋ธŒ๋žœ์น˜๋ฅผ ์ด๋™
  • git checkout -b [branch] : ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ํ›„, ๊ทธ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
  • git fetch : local repository์—์„œ remote repository์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ์—ญํ• (์—…๋ฐ์ดํŠธ)
  • git merge [๋ธŒ๋žœ์น˜] : ํ˜„์žฌ checkout ํ•˜๊ณ  ์žˆ๋Š” branch๋กœ [branch]์—์„œ ๋ณ‘ํ•ฉ
  • git checkout master git merge develop # develop --merge-> master

branch๋ฅผ merge ํ•  ๋•Œ๋Š” ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ ๋ฐœ์ƒ์„ ํ•ญ์ƒ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. Github ์ทจ์†Œ ๋ช…๋ น์–ด

1) git add ์ทจ์†Œํ•˜๊ธฐ

git reset HEAD [ํŒŒ์ผ๋ช…] : git add ํ•œ [ํŒŒ์ผ] ์ทจ์†Œ, ์ˆ˜์ •๋œ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ์€ ๋ณด์กด

git reset HEAD : git addํ•œ [ํŒŒ์ผ ์ „์ฒด] ์ทจ์†Œ, ์ˆ˜์ •๋œ ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ์€ ๋ณด์กด

2) commit ์ทจ์†Œํ•˜๊ธฐ

  • git reset HEAD^ : commit ์ทจ์†Œ (์œ„์™€ ๋™์ผ)
  • git reset HEAD~2 : ๋งˆ์ง€๋ง‰ commit 2๊ฐœ ์ทจ์†Œ.
  • git reset [commit_id] : git add๋ฅผ ํ•œ ์ƒํƒœ์—์„œ, ๋ณ€๊ฒฝ๋œ staging area๋ฅผ ๋ฌดํšจํ™” (์ˆ˜์ •๋œ ๋‚ด์šฉ์€ ์œ ์ง€)
    • git reset --soft [commit_id] : [commit_id]์œผ๋กœ ๋˜๋Œ๋ฆผ. staged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด.
    • git reset --soft HEAD^ : ์ง์ „ commit ์ทจ์†Œ. staged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด.
    • git reset --mixed [commit_id] : [commit_id]์œผ๋กœ ๋˜๋Œ๋ฆผ. unstaged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด
    • git reset --mixed HEAD^ : ์ง์ „ commit ์ทจ์†Œ. unstaged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋ณด์กด(๊ธฐ๋ณธ ์˜ต์…˜)
    • git reset --hard [commit_id] : [commit_id]์œผ๋กœ ๋˜๋Œ๋ฆผ. unstaged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ์‚ญ์ œ. ์ฆ‰ ๋ชจ๋‘ ์ทจ์†Œ.
    • git reset --hard HEAD^ : ์ง์ „ commit ์ทจ์†Œ. unstaged ์ƒํƒœ, ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ์‚ญ์ œ. ์ฆ‰ ๋ชจ๋‘ ์ทจ์†Œ.

3) git push ์ทจ์†Œํ•˜๊ธฐ

์ฃผ์˜ ์‚ฌํ•ญ

  1. local์˜ ๋‚ด์šฉ์„ remote์— ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜.
  2. ๋˜๋Œ์•„๊ฐ„ commit ์ดํ›„์˜ ๋ชจ๋“  commit ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜.
  3. ํ˜‘์—… ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜
  • ๋ฐฉ๋ฒ• 1
    • ๊ณผ์ •
      1. ์›Œํ‚น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ commit์„ ๋˜๋Œ๋ฆฐ๋‹ค →
      2. ๋˜๋Œ๋ ค์ง„ ์ƒํƒœ์—์„œ ๋‹ค์‹œ commit์„ ํ•œ๋‹ค →
      3. ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push ํ•œ๋‹ค.
    • ๋ช…๋ น์–ด ์ˆœ์„œ
      1. git reset HEAD^ / git reset [๋ฒ„์ „๋ช…]
      2. git commit -m "๋ณ€๊ฒฝํ•œ ๋ฉ”์‹œ์ง€"
      3. git push origin +[branch] : ํ•ด๋‹น branch๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push ('+' ๋ถ™์—ฌ์•ผ ํ•จ)
      4. git push origin [branch ] -f : ํ•ด๋‹น branch๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ push
  • ๋ฐฉ๋ฒ• 2
    • git revert [commit_id] : ํ•ด๋‹น ์ปค๋ฐ‹๋งŒ์„ ๋˜๋Œ๋ฆผ
    • git revert [commit_id1..commit_id2] : ํ•ด๋‹น ๋ฒ”์ฃผ์˜ ์ปค๋ฐ‹์„ ๋ชจ๋‘ ๋˜๋Œ๋ฆผ

4) git merge ์ทจ์†Œํ•˜๊ธฐ

  • git reset -merge ORIG_HEAD
    • master์™€ child ๋‘ ๋ธŒ๋žœ์น˜๊ฐ€ ์žˆ์„ ๋•Œ, master ๋ธŒ๋žœ์น˜์—์„œ child ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋ณ‘ํ•ฉ์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ž‘์—…์ด์—ˆ๋˜ ๊ฒƒ์ด ์—ˆ๋‹ค๋ฉด, ์ด ๊ฒฝ์šฐ์— ๋ณ‘ํ•ฉ์„ ํ•œ ํ›„, ๋ฐ”๋กœ ๋ณ‘ํ•ฉ์„ ์ทจ์†Œ
    • ๋ณ‘ํ•ฉ์€ ์œ„ํ—˜ํ•œ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— Git์€ ๋ณ‘ํ•ฉ์„ ํ•˜๊ธฐ ์ „์—, ์ตœ์‹  ์ปค๋ฐ‹์— ํฌ์ธํ„ฐ๋ฅผ ์ง€์ •( ORIG_HEAD )ํ•ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋ฐฉ๊ธˆ ๋ณ‘ํ•ฉํ•œ ๊ฒƒ์„ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด -merge ์˜ต์…˜๊ณผ ORIG_HEAD ํฌ์ธํ„ฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ reset ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • git revert --mainline 1 {์ทจ์†Œํ•  ๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ID}
    • revert์˜ --mainline ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ‘ํ•ฉ์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • mainline์ด๋ž€ ๋ณ‘ํ•ฉ์„ ์ทจ์†Œํ•œ ํ›„์—, ์–ด๋А ๋ผ์ธ์„ ๊ธฐ์ค€์œผ๋กœ ๋˜๋Œ์•„๊ฐˆ ๊ฒƒ์ธ์ง€ ๊ธฐ์ค€์„ ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํŽธ์ง‘๊ธฐ ์ฐฝ์ด ๋‚˜์˜ค๋ฉด์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

5) git reset VS git revert

  • ๋‹จ์ˆœํ•˜๊ฒŒ ๋˜๋Œ๋ฆด ์‹œ์  ์ดํ›„์˜ commit์„ ์ „๋ถ€ ๋‚ ๋ฆฌ๊ณ  remote repository์— ๊ฐ•์ œ๋กœ push ํ•˜์—ฌ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด reset์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค - commit history๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค

์ด๋ฏธ ์›๊ฒฉ ๋ฆฌํŒŒ์ง€ํ† ๋ฆฌ์— push๋ฅผ ํ•œ ์ƒํƒœ๋ผ๋ฉด reset์„ ์‚ฌ์šฉํ•˜๋ฉด reset ํ•˜๊ธฐ ์ด์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์ „๊นŒ์ง€๋Š” push ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (๋ฌผ๋ก  force๋ผ๋Š” ๋ฌด์‹œ๋ฌด์‹œํ•œ ์˜ต์…˜์ด ์žˆ๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค. )

๋”ฐ๋ผ์„œ, ์—ฌ๋Ÿฌ ๋ฌธ์„œ๋“ค์—์„œ๋Š” ์ด๋ฏธ push ํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” revert๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋„ค์š”...ใ…Žใ…Ž (์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

  • ํ•˜์ง€๋งŒ ์ด๋ ฅ ์ค‘๊ฐ„์— ๋กœ๊ทธ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ ์ปค๋ฐ‹์ด ์žˆ๊ณ  ๊ทธ ์ปค๋ฐ‹๋งŒ์„ ์ทจ์†Œํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด revert๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ปค๋ฐ‹์˜ ๋‚ด์šฉ๋งŒ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

3. ํ˜‘์—…์šฉ github ์‚ฌ์šฉ

1. upstream์— ๋Œ€ํ•œ ์ดํ•ด

  • git remote add upstream [remote repository URL ์ฃผ์†Œ] : upstream [์ฃผ์†Œ] remote
  • git branch -r : -r ๋ถ™์ด๋ฉด ์›๊ฒฉ ์ €์žฅ์†Œ์˜ branch list ํ™•์ธ
  • git branch -v
  • git fetch upstream : upstream ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์„ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ์ƒˆ๋กœ์šด branch ์ƒ์„ฑ
  • git checkout [master] : [๋‚ด ๋ธŒ๋žœ์น˜]๋กœ ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๋Š” branch ์—…๋ฐ์ดํŠธ
  • git merge [upstream/develop] : [upstream/develop]์„ ๋‚ด ํ˜„์žฌ branch๋กœ merge(๋™๊ธฐํ™”)
  • git push [origin] [branch] : ๋‚ด ์›๊ฒฉ repo๋กœ push ํ•ด์ฃผ๋ฉด ๋

2. PR (Pull Request)

  1. upstream repository๋ฅผ ๋‚ด repository์— ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ
    • ์ด๋ ‡๊ฒŒ upstream repository์™€ ๋™๊ธฐํ™” ํ•œ ๋‚ด ๋ ˆํฌ๋ฅผ upstream ๋ ˆํฌ๋กœ PR์„ ๋ณด๋ƒ„
    • upstream์—์„œ conflict๊ฐ€ ์—†์„ ์‹œ PR ์Šน์ธ
    • ๋‹ค๋ฅธ ํ˜‘์—…์ž๋“ค์€ ๋ณธ์ธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์œผ๋กœ PR ํ•˜๊ธฐ ์ „์— ๋‹ค์‹œ 1. ์˜ ๊ณผ์ •์„ ํ†ตํ•ด ๋ณธ์ธ์˜ ๋ ˆํฌ๋ฅผ upstream์˜ ๋ ˆํฌ์™€ ๋™๊ธฐํ™”ํ•œ ํ›„ PR
  2. upstream repository์— ๋‚ด ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
    • upstream๊ณผ ๋™๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š๊ณ , ํ˜‘์—…์ž์™€ ๋‹ค๋ฅธ ํŒŒ์ผ๋งŒ์„ ๊ฑด๋“ ๋‹ค๋ฉด fetch, merge ์—†์ด PR ๊ฐ€๋Šฅ

๋” ์•Œ๊ณ  ์‹ถ์€ ๋ถ„์€...

์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜:
[์ „์ฒด์ ์ธ git ๋ช…๋ น์–ด ์ฐธ๊ณ ](https://victorydntmd.tistory.com/category/Git/%EA%B0%9C%EB%85%90%EA%B3%BC%20%ED%99%9C%EC%9A%A9?page=2)
[reset, revert ์‚ฌ์šฉํ•˜๋Š” ์‹œ์  ์ฐธ๊ณ ](https://medium.com/nonamedeveloper/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert-d572b4cb0bd5)

+ Recent posts