Git ๊ธฐ์ดˆ - Checkout & Reset

ID์งฑ์žฌยท2021๋…„ 5์›” 7์ผ
0

Git

๋ชฉ๋ก ๋ณด๊ธฐ
3/8
post-thumbnail

๐ŸŒˆ Checkout & Reset

๐Ÿ”ฅ Checkout ์ด๋ž€?

๐Ÿ”ฅ Reset ์ด๋ž€?


1. Checkout ์ด๋ž€?

  • ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด, ์ด์ „ commit์œผ๋กœ ๋˜๋Œ์•„๊ฐ€์•ผํ•  ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•จ
  • ์ด์ „ commit์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ checkout ๊ธฐ๋Šฅ์œผ๋กœ, ๊ณผ๊ฑฐ commit๊ณผ ํ˜„์žฌ commit์„ ๋„˜๋‚˜๋“œ๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅ์ผ€ ํ•จ
  • git log์—์„œ HEAD๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์œ„์น˜๊ฐ€ ํ˜„์žฌ ๋ฐ”๋ผ๋ณด๋Š” commit์ด๊ธฐ ๋•Œ๋ฌธ์— check๋Š” ์ด HEAD์˜ ์œ„์น˜๋ฅผ ๊ณผ๊ฑฐ๋กœ ์ด๋™ ์‹œ์ผœ์คŒ
    • ํ˜„์žฌ commit : commit 7ca25de8afb3cc15d93b1642a07f79cec1679138
    • ์ด์ „ commit : commit 6fd3306df23faac191f2904e5ca615356a60b475
  • ํ˜„์žฌ commit์—์„œ ์ด์ „ commit์œผ๋กœ ์ด๋™ ๋ฐฉ๋ฒ• : ๐Ÿ” git check [commit ์ด๋ฆ„]
  • commit๋ช… ๊ธฐ์ค€์œผ๋กœ ๊ณผ๊ฑฐ ์‹œ์ ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์ตœ์‹  ์ƒํƒœ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • checkout ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ• : ๐Ÿ” git checkout master
>> git chekout 6fd3306df23faac191f2904e5ca615356a60b475
>> git checkout master

2. Reset ์ด๋ž€?

  • reset์€ ๊ณผ๊ฑฐ ์–ด๋Š ์‹œ์ ์˜ commit์œผ๋กœ ์ด๋™๊ณผ ๋™์‹œ์— ์ด๋™ ์‹œ์  ์ดํ›„์— ์กด์žฌํ•˜๋Š” commit์„ ์‚ญ์ œํ•จ
  • ์ฆ‰, checkout์€ HEAD๋ฅผ ์ด๋™์‹œ์ผœ commit ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋ผ๋ฉด, reset์€ ์–ด๋Š ์‹œ์ ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๊ทธ ์ดํ›„์— commit๋“ค์€ ์—†์•ฐ
  • reset์˜ ์ข…๋ฅ˜๋Š” "hard reset", "mixed reset", "soft reset"์œผ๋กœ ๋‚˜๋‰จ

1) Hard Reset

  • Hard Reset ๋ฐฉ๋ฒ• : ๐Ÿ” git reset --hard HEAD^
    • "--hard" ์˜ต์…˜์„ ์ฃผ๊ณ , ์‚ญ์ œํ•  commit ๊ฐฏ์ˆ˜(๋˜๋Œ์•„๊ฐˆ ๋‹จ๊ณ„์ˆ˜) ๋งŒํผ HEAD์— ^๋ฅผ ๋ถ™์ž„
    • ๐Ÿ” git reset --hard HEAD^ ๐Ÿ‘ˆ 1๊ฐœ commit ์‚ญ์ œ ํ›„ ์ด์ „ commit์œผ๋กœ ์ด๋™
    • ๐Ÿ” git reset --hard HEAD^^ ๐Ÿ‘ˆ 2๊ฐœ commit ์‚ญ์ œ ํ›„ ์ „์ „ commit์œผ๋กœ ์ด๋™
    • ๐Ÿ” git reset --hard HEAD^^^ ๐Ÿ‘ˆ 3๊ฐœ commit ์‚ญ์ œ ํ›„ ์ „์ „์ „ commit์œผ๋กœ ์ด๋™
  • ์•„๋ž˜ ์ฒ˜๋Ÿผ push๋ฅผ ํ•œ ๋’ค(HEAD->master, origin/master ์ธ ์ƒํƒœ), reset์œผ๋กœ ์‚ญ์ œ๋ฅผํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ
  • remote repository์—์˜ commit ์ƒํƒœ์™€ ํ˜„์žฌ local repository์˜ commit์ด ๋ถˆ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ์ด๋Ÿด ๊ฒฝ์šฐ์—๋Š” --force ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ push๋ฅผ ์‹œ์ผœ ์„œ๋กœ ์ผ์น˜์‹œ์ผœ์ฃผ์–ด์•ผ ํ•จ
  • remote repository์— ์ƒํƒœ๋ฅผ local repository์™€ ๊ฐ•์ œ๋กœ ์ผ์น˜์‹œํ‚ด
  • ๊ฐ•์ œ๋กœ push์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ• : ๐Ÿ” git push origin master --force
  • hard reset์€ ์ด์ „ commit์œผ๋กœ ๋Œ์•„๊ฐˆ ๋ฟ ์•„๋‹ˆ๋ผ, ํŒŒ์ผ ๋ณ€๊ฒฝ ๋‚ด์—ญ๋„ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ(์‚ญ์ œ)
>> git reset --hard HEAD^
>> git push origin master --force

2) Mixed Reset

  • Mixed Reset ๋ฐฉ๋ฒ• : ๐Ÿ” git reset HEAD^
    • ์˜ต์…˜์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒŒ mixed reset์ž„
  • ๋ณตํ•ฉ reset์€ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ˜„์žฌ ์ด๋™ํ•œ commit ์ดํ›„์˜ ์ƒ์„ฑ๋ฌ์—ˆ๋˜ ํŒŒ์ผ๋“ค์„ unstage ์˜์—ญ(working tree)์œผ๋กœ ์˜ฎ๊ธฐ๊ณ , ๊ณผ๊ฑฐ ์‹œ์ ์˜ commit ์ƒํƒœ๋กœ ์ด๋™ํ•จ
  • ์ฆ‰, ๊ณผ๊ฑฐ ์‹œ์ ์˜ commit์œผ๋กœ ๋Œ์•„๊ฐ”์ง€๋งŒ, commit ์ดํ›„์— ์ƒ์„ฑ๋œ ํŒŒ์ผ์€ untract ์ƒํƒœ๋กœ ๊ทธ๋ž˜๋กœ ๋‘ 
  • mixed commit์€ ๋งˆ๋ฌด๋ฆฌ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ commit์„ ํ–ˆ๊ฑฐ๋‚˜, ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ์ˆ˜์ • ํ›„ commit์„ ํ•ด์•ผํ•  ๋•Œ ๋ณ€๊ฒฝ ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ๊ฐ€์ง€๊ณ  ์ด์ „ ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋จ
  • ๋‹ค๋งŒ, ๋‹ค์‹œ commit์„ ํ•˜์˜€์„ ๋•Œ, ์ด ๋˜ํ•œ local repository์™€ remote repository์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•จ
  • remote repository์˜ ์ตœ์‹ ์ƒํƒœ๋ฅผ local repository๋กœ ๋‹น๊ฒจ์˜ค๋Š” ๋ฐฉ๋ฒ• : ๐Ÿ” git pull origin master
  • ๊ฐ•์ œ๋กœ remote repository์˜ ์ƒํƒœ๋ฅผ local repository ๊ฐ€์ ธ์˜ค๋ฉด, ์„œ๋กœ ๋ถˆ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— conflict์ด ๋ฐœ์ƒ
  • conflict์ด ๋ฐœ์ƒํ•˜๋ฉด, ์–ด๋–ค ๋‚ด์šฉ์„ ๊ธฐ์ค€์œผ๋กœํ• ์ง€ ์ •ํ•œ ํ›„, ๋‹ค์‹œ commit๊ณผ push๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด๋จ
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ถฉ๋Œ์ƒํ™ฉ์„ ์›์น˜ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ œ push๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•จ
    • ๐Ÿ” git push origin master --force
>> git reset HEAD^
>> git pull origin master

3) Soft Reset

  • Soft Reset ๋ฐฉ๋ฒ• : ๐Ÿ” git reset --soft HEAD^
    • "--soft"d ์˜ต์…˜์œผ๋กœ ์ฃผ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ soft reset ๋ช…๋ น ๊ฐ€๋Šฅ
  • soft rest์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด, ๋Œ์•„๊ฐ„ ์‹œ์  ์ดํ›„์˜ ํŒŒ์ผ์„ stage area์— ์œ„์น˜์‹œํ‚ค๊ณ  commit ์‹œ์ ์„ ์ด๋™ํ•จ
  • ์ด๋Š” unstage ์˜์—ญ์— ์ž‘์—… ์ค‘์ธ ํŒŒ์ผ์ด ์žˆ์„ ๋•Œ, ์ด ํŒŒ์ผ๋“ค๊ณผ ์ด์ „ ์‹œ์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ์‚ด์•„๋‚œ ํŒŒ์ผ๋“ค์ด ์„ž์ด์ง€ ์•Š๊ณ ์žํ•  ๋•Œ ์‚ฌ์šฉ
  • ๋Œ€๋ถ€๋ถ„์€ ์™„์ „์‚ญ์ œํ•˜๋Š” hard reset์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํŒŒ์ผ์„ stage area์— ์‚ด๋ ค๋‘๋Š” mixed reset์„ ์ฃผ๋กœ ์‚ฌ์šฉ
>> git reset --soft HEAD^
profile
Keep Going, Keep Coding!

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด