Git Rebase

๋ฑ…๊ธฐ๋ฑ…๊ทœยท2022๋…„ 5์›” 14์ผ
0

๐Ÿš€ ํ•™์Šต ๋ชฉํ‘œ

  1. Git flow๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์šด์˜ ๋˜๋Š”์ง€ ์•Œ๊ณ , main, develop, feature, release, hotfix ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ๊ฐ ๊ตฌ๋ถ„ํ•˜์—ฌ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. branch๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ธ rebase์™€ merge์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. rebase ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹์„ ํ•˜๋‚˜๋กœ squash ํ•  ์ˆ˜ ์žˆ๋‹ค.

Main branch: ์‹œ์Šคํ…œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
Develop branch: ๋ฐฐํฌ์ „์— ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ํ›„, ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋Š” ๋ธŒ๋žœ์น˜

Main์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ develop ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์—์„œ ๋˜ ๊ฐ๊ฐ์˜ feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑ.

Git Rebase

git rebase and merge

two commands that integrate changes but act in a very different way.

git merge์˜ ๋ฌธ์ œ์ 

  1. ๋ถˆํ•„์š”ํ•œ merge commit ์ƒ์„ฑ
    โญ๏ธ ๋ชจ๋“  feature/branch ๋งˆ๋‹ค ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์•ผํ•จ
  2. ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ history

git rebase

  • ๋ถˆํ•„์š”ํ•œ merge commit ์ œ๊ฑฐ
  • ๊ฐ™์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ commit๋ผ๋ฆฌ ๋ชจ์œผ๊ธฐ

git rebase์˜ ๋ฌธ์ œ์ 

  • commit๊ณผ commit ์‚ฌ์ด์˜ ์ถฉ๋Œ๋กœ ์ปค๋ฐ‹ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ conflict๋‚  ์ˆ˜ ์žˆ๋‹ค.

Squash

์ปค๋ฐ‹๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. rebase๊ณผ์ •์—์„œ squash๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

squash ์ง„ํ–‰
๊ฐ€์žฅ ์˜ค๋ž˜๋œ commit์„ pickํ•œ ๋’ค
๋‹ค๋ฅธ๊ฒƒ๋“ค์€ ์˜ค๋ž˜๋œ commit ๊ธฐ์ค€์œผ๋กœ squashํ•œ๋‹ค
๋‹ค๋ฅธ ์ปค๋ฐ‹์˜ ์ž‘์—… ๋‚ด์šฉ์ด ์—†์–ด์ง€๋Š”๊ฒŒ ์•„๋‹˜
Esc -> :wq!๋กœ ํƒˆ์ถœ

pushํ• ๋•Œ, force push๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
'git push origin ๋ธŒ๋žœ์น˜์ด๋ฆ„ -f'
์›๋ž˜ ์žˆ๋˜ ์ปค๋ฐ‹๊ณผ ์ตœ์‹  ์ปค๋ฐ‹์„ ํ•ฉ์ณ ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋Œ€์ฒด๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ œ๋กœ pushํ•˜์ง€ ์•Š์œผ๋ฉด, git์—์„œ human error์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ƒ๊ฐํ•˜์—ฌ, ์ฐจ๋‹จ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ์‹œํ‚ด.

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