์žฌ๋ฐŒ๊ฒŒ ํ•ฉ์‹œ๋‹ค

๊ธฐ๋กํ•˜๊ธฐ, ๊ฐ€์‹œํ™”ํ•˜๊ธฐ

git ๋งˆ์Šคํ„ฐ

์ž‘์—… ์ค‘๊ฐ„์— ์›๊ฒฉ ์ €์žฅ์†Œ pull์„ ๋ฐ›๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•

์€๋˜๋”” 2022. 9. 7. 09:49

 

https://meoweundi.tistory.com/20

 

remote์— pushํ•œ ์ปค๋ฐ‹์€ rebase ํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค(๊ผฌ์ธ git ํ‘ผ ๊ธฐ๋ก)

๋“œ๋””์–ด ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•๋“ค๋กœ ๊ผฌ์ธ git์„ ํ’€์–ด๋ƒˆ๋‹ค ์šฐํ•˜ํ•˜ ๋ฌธ์ œ ์ƒํ™ฉ ์ •๋ฆฌ(์ˆœ์„œ๋Œ€๋กœ) 1. local/feature/modal์„ remote์— push 2. origin/feature/modal โžก๏ธ origin/master pull request 3. ๋‹ค๋ฅธ ํŒ€์›์ด ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜..

meoweundi.tistory.com

 

์œ„ ๊ธ€์—์„œ ๊ฐ€์กŒ๋˜ ์˜๋ฌธ์˜ ์˜ฌ๋ฐ”๋ฅธ ํ•ด๋‹ต์„ ์ฐพ์•˜๋‹ค.

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฌธ์ œ ์ƒํ™ฉ ์ •์˜

๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ local/[๋ธŒ๋žœ์น˜๋ช…], ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๋ฅผ remote/[๋ธŒ๋žœ์น˜๋ช…]์œผ๋กœ ์ง€์นญํ•˜๊ฒ ๋‹ค.

local/feature ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ์ค‘์ด๊ณ , remote/feature ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹์„ pushํ•œ ์ ์ด ์žˆ๋Š” ์ƒํƒœ. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰ ์ค‘์ธ ์ƒํ™ฉ. ์ด ์ƒํ™ฉ์—์„œ remote/main ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ pull ๋ฐ›์•„์™€์•ผ ํ•œ๋‹ค.

(ex ๋‹ค๋ฅธ ๋™๋ฃŒ๊ฐ€ ์ž‘์—…ํ•˜๋˜ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— merge๋˜์–ด ์ด๋ฅผ ๋‚ด ์ฝ”๋“œ์—๋„ ๋ฐ˜์˜ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ)

 

 

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. git checkout [๋ธŒ๋žœ์น˜๋ช…]
2. git fetch origin
3. git diff origin
4. git merge origin/main
5. merge์— ๋Œ€ํ•œ commit์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” vim ์ฐฝ์ด ๋œฌ๋‹ค. commit ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ํ›„ :q! ๋กœ ์ €์žฅํ•œ๋‹ค.(๋ฉ”์‹œ์ง€ ์ˆ˜์ •์€ ์ƒ๋žต ๊ฐ€๋Šฅ)

๋‹จ๊ณ„๋ณ„ ์ƒ์„ธํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. pull ๋ฐ›์„ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
2. ์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ž‘์—… ๋‚ด์—ญ์„ ๋กœ์ปฌ์ €์žฅ์†Œ์— ๊ฐ€์ ธ์˜จ๋‹ค.
3. ์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ž‘์—… ๋‚ด์—ญ๊ณผ ๋กœ์ปฌ์ €์žฅ์†Œ์˜ ์ž‘์—… ๋‚ด์—ญ์„ ๋น„๊ตํ•œ๋‹ค.
4. ์›๊ฒฉ์ €์žฅ์†Œ์˜ main๋ธŒ๋žœ์น˜์™€ ๋กœ์ปฌ์ €์žฅ์†Œ์˜ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ mergeํ•œ๋‹ค.
5. merge๋Š” ์ƒˆ๋กœ์šด commit์„ ์ƒ์„ฑํ•œ๋‹ค. ํ•ด๋‹น ์ปค๋ฐ‹์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ณดํ†ต ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” git commit -m "my msg ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•˜๋Š”๋ฐ, ์ด๋•Œ์—๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์—๋””ํ„ฐ์ฐฝ์ด ๋œฌ๋‹ค. ํ•ด๋‹น ์—๋””ํ„ฐ์ฐฝ ์•ˆ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

ํ•ด๊ฒฐ๋ฒ•์ด ๊ถ๊ธˆํ–ˆ๋‹ค๋ฉด ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์ฝ์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

 

 

 

โ˜๐Ÿป pull ๋Œ€์‹  fetch-merge๋ฅผ ์“ฐ๋Š” ์ด์œ 

fetch์™€ merge๋ฅผ ํ•œ ๋ฒˆ์— ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค. ๋ฐ”๋กœ pull์ด๋‹ค.

 

pull์„ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ํ˜„์žฌ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์™€ ์›๊ฒฉ์ €์žฅ์†Œ์˜ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋‘ ๋ธŒ๋žœ์น˜ ๋ชจ๋‘ ๊ฐ์ž์˜ ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ) 

 

์›๊ฒฉ ๋ธŒ๋žœ์น˜์™€ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๊ฐ€ fast-forward ๊ด€๊ณ„์ผ ๋•Œ๋งŒ pull์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•ด ๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ ์ƒํ™ฉ์—์„œ pull์„ ํ•˜๋ฉด pull์ด ์ค‘๋‹จ๋œ๋‹ค. (Not possible to fast-forward, aborting → ์ด๋Ÿฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค.) ๋”ฐ๋ผ์„œ fetch์™€ merge๋ฅผ ๊ฐ๊ฐ ์ง„ํ–‰ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

โœŒ๐Ÿป rebase์™€์˜ ์ฐจ์ด์ 

์ด์ „ ๊ธ€์—์„œ๋Š” ์›๊ฒฉ์ €์žฅ์†Œ์˜ ์ž‘์—…์„ ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์— ๋‚ด๋ ค๋ฐ›๊ธฐ ์œ„ํ•ด rebase๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋กœ์ปฌ๋ธŒ๋žœ์น˜ ์ปค๋ฐ‹๋“ค์˜ ๋ณต์‚ฌ๋ณธ์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค(!) ๋‚˜๋Š” ์ด๊ฒŒ ๋‚ด๊ฐ€ rebase๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•ด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ ์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ, rebase ์ž์ฒด์˜ ํŠน์„ฑ์ด์—ˆ๋‹ค. 

โ€ฃ rebase ์ดํ•ดํ•˜๊ธฐ

rebase๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๊ธฐ๋˜๋Š” ์ปค๋ฐ‹์„ ๋‹ค๋ฅธ ์ปค๋ฐ‹์œผ๋กœ ์ด๋™ ์‹œํ‚จ๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์—์„œ feature ๋ธŒ๋žœ์น˜๋Š” ์ปค๋ฐ‹ C2์—์„œ ๋ถ„๊ธฐ๋˜์—ˆ๋‹ค. ์ด๋•Œ feature ๋ธŒ๋žœ์น˜์—์„œ, main ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด rebase๋ฅผ ํ•˜๋ฉด?


์งœ์ž” ๋ถ„๊ธฐ์  ์ปค๋ฐ‹์ด C2์—์„œ C3์œผ๋กœ ๋ณ€๊ฒฝ๋๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๋ถ„๊ธฐ์  ์ปค๋ฐ‹์„ ์ด๋™ ์‹œํ‚ค๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ?


์œ„ ๊ทธ๋ฆผ๊ณผ ๋™์ผํ•œ ๊ทธ๋ฆผ์ด๋‹ค. ํ•œ ์ค„๋กœ ์ •๋ ฌํ–ˆ์„ ๋ฟ์ด๋‹ค.

๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ, ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•œ ์ค„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋™์ผํ•œ ์ž‘์—…์„ rebase๊ฐ€ ์•„๋‹Œ merge๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฆผ์ด ๋  ๊ฒƒ์ด๋‹ค.


ํ™•์‹คํžˆ rebase๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ git ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์ข€ ๋” ๊น”๋”ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ€ฃ rebase์˜ ๋ฌธ์ œ์ 

์œ„ ๊ทธ๋ฆผ์„ ์ž˜ ๋ณด๋ฉด, rebase ๊ทธ๋ฆผ์—์„œ C4, C5, C6์— ๋”ฐ์˜ดํ‘œ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. C4, C5, C6์˜ ๋ณต์‚ฌ๋ณธ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

 

์ฆ‰ rebase๋Š” ๊ธฐ์กด์˜ ์ปค๋ฐ‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ™์€ ๋‚ด์šฉ์˜ ๋‹ค๋ฅธ ์ปค๋ฐ‹์„ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค. ์ •ํ™•ํžˆ๋Š” "feature ๋ธŒ๋žœ์น˜์˜ ๊ธฐ์กด ์ปค๋ฐ‹์— main ๋ธŒ๋žœ์น˜์™€์˜ ์ฐจ์ด์ ์ด ๋ฐ˜์˜๋œ" ์ปค๋ฐ‹๋“ค์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค. (์ฐจ์ด์ ์ด ์—†๋‹ค๋ฉด ๊ทธ๋ƒฅ ๋ณต์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋˜๊ณ , ์ฐจ์ด์ ์ด ์žˆ๋‹ค๋ฉด ๋ฐ˜์˜๋œ๋‹ค.)

ํŒŒ๋ž€์ƒ‰ ๋ผ์ธ๊ณผ ์ดˆ๋ก์ƒ‰ ๋ผ์ธ์—์„œ ๊ฐ™์€ ๋‚ด์šฉ-๋‹ค๋ฅธ ์ปค๋ฐ‹์•„์ด๋””์˜ ์ปค๋ฐ‹๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋™์ผํ•œ ๋‚ด์šฉ์˜ ์ปค๋ฐ‹์ด ๋‘ ๊ฐœ์”ฉ ์ƒ์„ฑ๋œ๋‹ค.

 


git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ•œ ์ค„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ธฐ๋„ ํ•˜๊ณ  ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋™์ผ ๋‚ด์šฉ์˜ ์ปค๋ฐ‹์ด ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ๊ธฐ๋Š” ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง git์„ ๋ฐฐ์›Œ๋‚˜๊ฐ€๋Š” ์ž…์žฅ์ธ ๋งŒํผ merge๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์— ๋จผ์ € ์ต์ˆ™ํ•ด์ง€๊ณ ์ž ํ•œ๋‹ค.