Community

๐Ÿ•Š๏ธ [Medium] ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜, Git ๊ฐ€์ด๋“œ (2)

Rebasing ๊ณผ Merging Rebasing์„ Merging๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ช…๋ น์˜ ๋ชฉํ‘œ๋Š” ๊ฐ™์ง€๋งŒ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ Rebasing์ด ํ”„๋กœ์ ํŠธ์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊น”๋”ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ”„๋กœ์ ํŠธ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ค‘์š”์‹œํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, Merging์€ ์ƒˆ๋กœ์šด ๋ณ‘ํ•ฉ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•˜์—ฌ ๋‘ ๋ธŒ๋žœ์น˜์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ย  Squashing Git Squashing์€ ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ์ปค๋ฐ‹์œผ๋กœ ์••์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Cherry-picking Cherry-picking์€ ํŠน์ • ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์„ ํƒ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ํ†ตํ•ฉํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Cherry-picking์„ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ค‘๋ณต๋œ ์ปค๋ฐ‹๊ณผ ๋ถ„๊ธฐ๋œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Signing commits Signing commits๋Š” Git์—์„œ ์ปค๋ฐ‹์˜ ์ง„์œ„์™€ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. GNU Privacy Guard(GPG) ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ์ปค๋ฐ‹์— ์•”ํ˜ธํ™” ์„œ๋ช…์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ, ์ปค๋ฐ‹ ์ž‘์„ฑ์ž๊ฐ€ ๋ณธ์ธ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GPG ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Git์ด ์ปค๋ฐ‹ํ•  ๋•Œ ์ด ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Git Reflog Git references๋Š” Git ํžˆ์Šคํ† ๋ฆฌ์˜ ๋ช…๋ช…๋œ ์ง€์ ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅ์†Œ์˜ ํƒ€์ž„๋ผ์ธ์„ ํƒ์ƒ‰ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ํŠน์ • ์Šค๋ƒ…์ƒท์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Git references๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์œ ์šฉํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด git reflog๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค: * ์žƒ์–ด๋ฒ„๋ฆฐ ์ปค๋ฐ‹ ๋˜๋Š” ๋ธŒ๋žœ์น˜ ๋ณต๊ตฌ * ๋””๋ฒ„๊น… ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ * ์‹ค์ˆ˜ ์ทจ์†Œ Interactive rebase ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฆฌ๋ฒ ์ด์Šค๋Š” ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์žฌ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ Git ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ปค๋ฐ‹์„ ์ ์šฉํ•˜๊ธฐ ์ „์— ์ˆ˜์ •, ์žฌ์ •๋ ฌ, ๊ฒฐํ•ฉ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Origin vs Upstream origin์€ ๋กœ์ปฌ Git ์ €์žฅ์†Œ์™€ ์—ฐ๊ด€๋œ ๊ธฐ๋ณธ ์›๊ฒฉ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ(clone)ํ•˜๋ฉด ํ•ด๋‹น ๋ณต์ œ๋ณธ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ origin ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ํฌํฌ(fork)ํ–ˆ๋‹ค๋ฉด, ๊ทธ ํฌํฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ origin ์ €์žฅ์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ย  ๋ฐ˜๋ฉด, upstream์€ ์ €์žฅ์†Œ๊ฐ€ ํฌํฌ๋œ ์›๋ž˜ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ย  ํฌํฌ๋œ ์ €์žฅ์†Œ๋ฅผ ์›๋ž˜ ํ”„๋กœ์ ํŠธ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋™๊ธฐํ™”ํ•˜๋ ค๋ฉด upstream ์ €์žฅ์†Œ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€(git fetch) ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ณ‘ํ•ฉ(merge)ํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ฒ ์ด์Šค(rebase)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ย  Conflicts ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ฒ ์ด์Šคํ•  ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ด๋„ ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด๋Š” ์ €์žฅ์†Œ์˜ ๋™์ผ ํŒŒ์ผ ๋˜๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์˜ ๋‹ค๋ฅธ ๋ฒ„์ „ ์‚ฌ์ด์— ์ถฉ๋Œํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ย  Feature Branch Workflow ๊ฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์€ ๋ณ„๋„์˜ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ๋˜๊ณ  ์™„๋ฃŒ๋œ ํ›„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. * ์žฅ์ : ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๊ฒฉ๋ฆฌ ๋ฐ ์ถฉ๋Œ ๊ฐ์†Œ * ๋‹จ์ : ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฒ ์ €ํ•œ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š” Gitflow Workflow Gitflow๋Š” ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ์ž‘์—…์„ ์œ„ํ•œ ์‚ฌ์ „ ์ •์˜๋œ ๋ธŒ๋žœ์น˜๋ฅผ ํฌํ•จํ•˜๋Š” ์—„๊ฒฉํ•œ ๋ธŒ๋žœ์นญ ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. * ๋ฉ”์ธ, ๊ฐœ๋ฐœ, ๊ธฐ๋Šฅ, ๋ฆด๋ฆฌ์Šค, ํ•ซํ”ฝ์Šค ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์€ ์žฅ๊ธฐ ๋ธŒ๋žœ์น˜๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. * ์žฅ์ : ์ •๊ธฐ ๋ฆด๋ฆฌ์Šค ๋ฐ ์žฅ๊ธฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ * ๋‹จ์ : ์†Œ๊ทœ๋ชจ ํŒ€์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ Forking Workflow ์ด ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ๋Š” ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์ธ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ(clone)ํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฉ”์ธ ์ €์žฅ์†Œ์— ์ง์ ‘ ํ‘ธ์‹œํ•˜๋Š” ๋Œ€์‹  ์ž์‹ ์˜ ํฌํฌ์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋ฉ”์ธ ์ €์žฅ์†Œ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ณ‘ํ•ฉ ์ „์— ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ํ˜‘์—…์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. * ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์˜คํ”ˆ ์†Œ์Šค Glasskube ์ €์žฅ์†Œ์—์„œ ํ˜‘์—…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. * ์žฅ์ : ์™ธ๋ถ€ ๊ธฐ์—ฌ์ž์˜ ํ˜‘์—…์„ ์žฅ๋ คํ•˜๋ฉด์„œ ๋ฉ”์ธ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์“ฐ๊ธฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๋ฐฉ์ง€ * ๋‹จ์ : ํฌํฌ์™€ ๋ฉ”์ธ ์ €์žฅ์†Œ ๊ฐ„์˜ ๋™๊ธฐํ™” ์œ ์ง€๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ Pull Request Workflow ํฌํฌ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”์ธ ์ €์žฅ์†Œ์— ์ง์ ‘ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. * ์žฅ์ : ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ํ˜‘์—…, ํŒ€์› ๊ฐ„์˜ ์ง€์‹ ๊ณต์œ  ์ด‰์ง„ * ๋‹จ์ : ์‚ฌ๋žŒ์— ์˜์กดํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ Trunk-Based Development ๋น ๋ฅธ ๋ฐ˜๋ณต ๋ฐ ์ง€์†์  ๋ฐฐํฌ์— ์ง‘์ค‘ํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์—์„œ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๊ณ  ์ž‘์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•˜๋Š” ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์žฅ์ : ๋น ๋ฅธ ๋ฐ˜๋ณต, ์ง€์†์  ํ†ตํ•ฉ, ์†Œ๊ทœ๋ชจ ์ž์ฃผ ๋ณ€๊ฒฝ์„ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ * ๋‹จ์ : ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•๋ ฅํ•œ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•„์š”ํ•˜๋ฉฐ, ๋ฆด๋ฆฌ์Šค ์ผ์ •์ด ์—„๊ฒฉํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ ย  Git Cheatsheet ย  # Clone a Repository git clone # Stage Changes for Commit git add # Commit Changes git commit -m "Commit message" # Push Changes to the Remote Repository git push # Force Push Changes (use with caution) git push --force # Reset Working Directory to Last Commit git reset --hard # Create a New Branch git branch # Switch to a Different Branch git checkout # Merge Changes from Another Branch git merge # Rebase Changes onto Another Branch (use with caution) git rebase # View Status of Working Directory git status # View Commit History git log # Undo Last Commit (use with caution) git reset --soft HEAD^ # Discard Changes in Working Directory git restore # Retrieve Lost Commit References git reflog # Interactive Rebase to Rearrange Commits git rebase --interactive HEAD~3 ย  ๋ฒˆ์—ญ: [https://ducktopia.tistory.com/134] ์›๋ฌธ:

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค