๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Git & GitHub

Git Sqaush๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Commit logs ํ•ฉ์น˜๊ธฐ(Git Rebase)

by ์ฃผ๋ฐœ2 2022. 9. 15.
๋ฐ˜์‘ํ˜•

๐Ÿ“Ž  Git Sqaush๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Commit logs ํ•ฉ์น˜๊ธฐ(Git Rebase)

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์—ฌ๋Ÿฌ ์ปค๋ฐ‹๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต git์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค๋ฐ‹์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์˜ˆ๋ฅผ ๋“ค๋ฉด.. ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ฟผ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ ์กฐ์ž‘๋“ฑ์˜ ๋ถˆํ•„์š”ํ•œ ์˜ˆ์‹œ๊ฐ€ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

๋ฌดํŠผ, ์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ํ…Œ์ŠคํŠธ commit - ๋กค๋ฐฑ commit์œผ๋กœ ์ตœ์†Œ 2๋ฒˆ ์ด์ƒ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ, Git Squash๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Squash ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Git Rebase๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ด๋ ฅ์„ ๋ณด๋‹ค ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Git Squash & Git Rebase

  • Git Squash๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์œผ๋กœ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Git Rebase๋Š” ๋‘ ๊ฐœ์˜ ๊ณตํ†ต base๋ฅผ ๊ฐ€์ง„ ๋ธŒ๋žœ์น˜์—์„œ, A ๋ธŒ๋žœ์น˜์˜ base๋ฅผ B ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ปค๋ฐ‹์œผ๋กœ base๋ฅผ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.(base๋ฅผ ๋‹ค์‹œ ์„ค์ •)

 

 

๋ถˆํ•„์š”ํ•œ commit ์˜ˆ์‹œ

ํ˜„์žฌ ์ƒํ™ฉ์€ ์œ„์™€ ๊ฐ™์ด ์ด 6๊ฐœ์˜ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹ ๋กœ๊ทธ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฐ‹๋“ค์„ Git Squash & Git Rebase๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์œผ๋กœ ๋ฌถ๋Š” ์ž‘์—…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. rebase ๋ช…๋ น์–ด

git rebase -i HEAD~6 // 6 = ํ•ฉ์น˜๊ณ ์ž ํ•˜๋Š” ์ปค๋ฐ‹์˜ ์ˆ˜

์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด rebase ํ•˜๊ณ ์ž ํ•˜๋Š” ์ปค๋ฐ‹ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

 

2. ํ•ฉ์น  commit log ์„ ํƒ

1. rebase ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ํŽธ์ง‘ ์ฐฝ์ด ๋‚˜์˜ค๋Š”๋ฐ์š”, ์œ„์—์„œ ํ•ฉ์น  commit์˜ ๊ฐ€์žฅ ์•ž์— ์กด์žฌํ•˜๋Š” pick์„ s(squash)๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

(โ€ป ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€, ๊ฐ€์žฅ ์˜ค๋ž˜๋œ commit์„ pick์œผ๋กœ ๋‚จ๊ฒจ๋†”์•ผ ํ•ฉ๋‹ˆ๋‹ค. - ์œ„์˜ ์˜ˆ์—์„  test1์ธ 8ffdf40 ์ปค๋ฐ‹) 

vim ํŽธ์ง‘๊ธฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์œ„์™€ ๊ฐ™์ด ํ•ฉ์น  ์ปค๋ฐ‹์˜ pick์„ s๋กœ ๋ณ€๊ฒฝํ•œ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(esc + :wq)

 

 

3. commit message ์ˆ˜์ •

์œ„์—์„œ #์€ ์ฃผ์„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

์ €๋Š” test1 ~ test6์˜ ๋ชจ๋“  ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ (#) ์ƒˆ๋กœ์šด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ฒจ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ ํ›„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅํ•˜๊ณ  ํŽธ์ง‘์ฐฝ์„ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. (esc + :wq)

 

 

 

4. ๊ฐ•์ œ git push

git push origin -f

๋งˆ์ง€๋ง‰์œผ๋กœ git repository์— ๊ฐ•์ œ๋กœ push๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

(๊ฐ•์ œ push์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ธŒ๋žœ์น˜๋กœ ๊ณต๋™์ž‘์—…์ž๊ฐ€ ์กด์žฌํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค!!!)

 

 

5. rebase ๊ฒฐ๊ณผ

๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ test1 ~ test6์˜ commit log๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ commit(rebase test)๋กœ ํ•ฉ์ณ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ง€๋‚œ ๋ฒˆ, push๋œ commit์„ ์ทจ์†Œํ•˜๋ ค๊ณ  git reset HARD~ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ž‘์—… ์ด๋ ฅ์ด ์‚ฌ๋ผ์งˆ ๋ป” ํ•œ ๊ฒฝํ—˜์„ ํ•œ ์ ์ด ์žˆ๋Š”๋ฐ์š”, ๐Ÿ˜ฑ ๊ทธ ์ดํ›„๋กœ๋Š” rebase๋ฅผ ํ™œ์šฉํ•˜์—ฌ commit์„ ๋ฌถ์–ด history๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ git reset์„ ํ•ด์„œ ์ด๋ ฅ์ด ๋‚ ๋ผ๊ฐ”๋”๋ผ๋„, git add๋ฅผ ํ•ด๋†“์•˜๋‹ค๋ฉด git fsck๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๊ณผ๊ฑฐ ์ด๋ ฅ์˜ ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธด ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ถ”ํ›„ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€