๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Front-End/Git&Github

[Git] ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊นƒ ์ปค๋ฐ‹ ํ•œ๋ฒˆ์— ์ˆ˜์ •ํ•˜๊ธฐ

by Sun A 2024. 10. 31.

์„œ๋ก 

์›๋ž˜๋Š” ๊ฐœ๋ฐœํ•  ๋•Œ git commit -> push origin ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ณ„์† pushํ–ˆ๋Š”๋ฐ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋‚œ๊ฐํ–ˆ๋‹ค.

git commit --amend๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ pushํ•˜๊ธฐ ์ด์ „์˜ ์ปค๋ฐ‹๋งŒ ๊ฐ€๋Šฅํ–ˆ๊ณ  ์ตœ๊ทผ์˜ ์ปค๋ฐ‹๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ตœ๊ทผ์— pushํ•œ ์ปค๋ฐ‹์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ„์†ํ•ด์„œ ์ด์šฉํ–ˆ๋‹ค.

์•„๋งˆ ์ปค๋ฐ‹์„ ํ•˜๊ณ  ํ•œ๋ฒˆ์— pushํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ข‹์€์ง€ ์ปค๋ฐ‹์„ ํ•˜๊ณ  ํ‘ธ์‹œ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ข‹์€์ง€์— ๋Œ€ํ•œ ํŒ๋‹จ์ด ์„œ์ง€ ์•Š์•„์„œ ๊ทธ๋ƒฅ ์ฒ˜์Œ์— ์•Œ๊ฒŒ ๋œ ๋ฐฉ๋ฒ•๋Œ€๋กœ ์ปค๋ฐ‹ -> ํ‘ธ์‹œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋‹ˆ ์ตœ๊ทผ push commit ์‚ญ์ œ -> ๋‹ค์‹œ commit -> ๋‹ค์‹œ push ์˜ ๋ฐ˜๋ณต์ด์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ˜น์‹œ ์ตœ๊ทผ์— pushํ•œ commit์„ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

git rebase HEAD^

๊ทผ๋ฐ ์ตœ๊ทผ์— ๊ธฐ๋Šฅ ๊ตฌํ˜„์—์„œ ์ปค๋ฐ‹์„ ํ•˜๋‹ค๊ฐ€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— <scope>๊นŒ์ง€ ํฌํ•จํ•ด์„œ ์ ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ

ํด๋”๋ช…์€ ๊ทธ๋ƒฅ (utils)๋กœ ์ž‘์„ฑํ•ด๋„ ๋˜๋Š”๋ฐ ํŒŒ์ผ์€ ํ™•์žฅ์ž๋ช…์„ ๊ผญ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋‚˜? ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๊ทผ๋ฐ ํ˜„์žฌ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ํŒŒ์ผ์—์„œ๋Š” .js ํ™•์žฅ์ž ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ๊น”๋”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๊ทผ๋ฐ ๋งŒ์•ฝ์— .js ๋ฅผ ๋ถ™์ด๋Š” ๊ฒŒ ๋‚˜์€ ์ƒํ™ฉ์ธ๋ฐ "๋ชจ๋“  ์ปค๋ฐ‹์— ํ™•์žฅ์ž๋ช…์„ ๋ถ™์—ฌ์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•œ๋ฒˆ์— ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•˜์ง€?" ํ•˜๋Š” ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ฒจ์„œ ์•Œ๊ฒŒ ๋œ ๋ฐฉ๋ฒ•์ด๋‹ค.

์•„๋งˆ ์•ž์œผ๋กœ๋„ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

๋ณธ๋ก 

์šฐ์„  ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊นƒ ์ปค๋ฐ‹์ด ๋ฌด์—‡์ด ์žˆ๋Š”์ง€, ๋ช‡ ๊ฐœ๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

git log --oneline

์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด ์ปค๋ฐ‹์˜ ๊ฐฏ์ˆ˜์™€ ์–ด๋–ค ์ปค๋ฐ‹์„ ํ–ˆ๋Š”์ง€ ๊ธฐ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์ปค๋ฐ‹์ด ์ตœ์ƒ๋‹จ์— ๋‚˜ํƒ€๋‚˜์žˆ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ ํ˜•์‹์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ 0006384์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„์—์„œ๋ถ€ํ„ฐ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๋ฉด ๋œ๋‹ค.

์ตœ๊ทผ ์ปค๋ฐ‹์—์„œ 3๋ฒˆ์งธ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— git rebase -i HEAD~3์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.

์—ฌ๊ธฐ์„œ pick ๋ถ€๋ถ„์€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ณ ์ •ํ•ด๋‘๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” pick์„ ์ง€์šฐ๊ณ  edit์„ ์ ์–ด์ค€๋‹ค.

* ์—ฌ๊ธฐ์„œ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง์•„์•ผ ํ•  ๋ถ€๋ถ„์€ oneline๊ณผ ๋ฐ˜๋Œ€๋กœ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊ฐ€ ์ตœ์ƒ๋‹จ์— ๋จผ์ € ๋œฌ๋‹ค.

์ด์ œ edit์œผ๋กœ ๋ฐ”๊พผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๊ธ€์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  Ctrl + X๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค.

์—ฌ๊ธฐ์„œ ์ˆ˜์ •์„ ์›ํ•˜๋ฉด Yํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ  Enter๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜จ๋‹ค.

๊ทธ๋Ÿผ ๋ฐ”๋กœ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ๊ตฌ๊ฐ€ ๋œฌ๋‹ค.

์—ฌ๊ธฐ์„œ git commit --amend๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ˆ˜์ •๋˜์ง€ ์•Š์œผ๋‹ˆ ๊ผญ amend๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์œผ๋กœ ๋‹ค์‹œ ์ ‘์†ํ•˜๊ฒŒ ๋œ๋‹ค.

์ฐจ๋ก€๋Œ€๋กœ edit ์„ ์ ์—ˆ๋˜ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ Ctrl + X๋ฅผ ๋ˆ„๋ฅด๊ณ  Y๋ฅผ ์ž…๋ ฅํ•œ ํ›„ Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ–์œผ๋กœ ๋‚˜์˜ค๋Š”๋ฐ ์ด๋•Œ๋Š” ์ˆ˜์ •์ด ์™„๋ฃŒ ๋˜์–ด์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ git rebase --continue๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์ˆ˜์ •์ด ์™„๋ฃŒ๋œ๋‹ค!

 

๊ฒฐ๋ก 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค๋ฐ‹์„ ํ•œ๋ฒˆ์— ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋งˆ ๊ธฐ๋Šฅ์ด ๋งŽ์•„์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋„ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค! ์ปค๋ฐ‹์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„๋•Œ ํ•œ๋ฒˆ ๋” ์‚ฌ์šฉํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค

์šฐ์„  ๋‹ค์Œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— rebase๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ์— ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.