์์ฃผ ์ฌ์ฉํ๋ Git ๋ช ๋ น์ด(๋ถ๊ธฐ ์์ฑ, ์ญ์ , ๋ฆฌ๋ฒ ์ด์ค, ํธ์ ๋ฑ)๋ฅผ ์๋ํํ์ฌ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ธฐ ์ํ Node.js ๊ธฐ๋ฐ์ ์ปค์คํ Git ์คํฌ๋ฆฝํธ ๋ชจ์์ ๋๋ค.
๋ณต์กํ ๋ธ๋์น ์ ๋ต ์์์๋ branches.json์ ํตํด ๋ธ๋์น ๊ฐ์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ์ถ์ ํ๊ณ , ์์ ํ Rebase์ ๋ชจ๋ ์ผ๊ด ์ด๊ธฐํ ๋ฑ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ ๊ณตํฉ๋๋ค.
์ด์์ฒด์ ํ๊ฒฝ์ ๋ง๋ ํญ์ ํ์ธํ์ฌ ์ค์น๋ฅผ ์งํํ์ธ์.
macOS์ Linux๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ์ง์ ์คํ ๊ถํ์ ๋ถ์ฌํ์ฌ ์ ํ๊ฒฝ๊ณผ ๋งค๋๋ฝ๊ฒ ์ฐ๋ํ ์ ์์ต๋๋ค.
1. ์ ์ฅ์ ํด๋ก ๋ฐ ๊ถํ ๋ถ์ฌ
cd ~
git clone [https://github.com/Jwhyee/git-scripts.git](https://github.com/Jwhyee/git-scripts.git)
chmod +x ~/git-scripts/*.js2. .gitconfig alias ๋ฑ๋ก
git config --global --edit์๋ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
[alias]
r = "!~/git-scripts/rebase.js"
s = "!~/git-scripts/switch.js"
p = "!~/git-scripts/push.js"
rp = "!~/git-scripts/rp.js"
b = "!~/git-scripts/branch.js"
clear = "!~/git-scripts/clear.js"Windows์ CMD๋ PowerShell์ ํ์ผ ์ต์๋จ์ Shebang(#!/usr/bin/env node)์ ๋ค์ดํฐ๋ธ๋ก ์ธ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Git Alias ์ค์ ์ node ๋ช
๋ น์ด๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ํฉ๋๋ค.
1. ์ ์ฅ์ ํด๋ก (Git Bash ๋๋ PowerShell ์ฌ์ฉ)
cd ~
git clone [https://github.com/Jwhyee/git-scripts.git](https://github.com/Jwhyee/git-scripts.git)2. .gitconfig ์์ผ๋ฆฌ์ด์ค ๋ฑ๋ก
git config --global --edit์๋ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค. (๊ฒฝ๋ก ํ์ธ ํ์)
[alias]
r = "!node ~/git-scripts/rebase.js"
s = "!node ~/git-scripts/switch.js"
p = "!node ~/git-scripts/push.js"
rp = "!node ~/git-scripts/rp.js"
b = "!node ~/git-scripts/branch.js"
clear = "!node ~/git-scripts/clear.js"| ๋ช ๋ น์ด | ์ต์ /์ธ์ | ์ค๋ช |
|---|---|---|
git b |
--list |
๋ก์ปฌ ๋ธ๋์น ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. |
-d <keyword> |
ํค์๋๊ฐ ํฌํจ๋ ๋ก์ปฌ ๋ธ๋์น์ ๊ธฐ๋ก์ ์ผ๊ด ์ญ์ ํฉ๋๋ค. | |
git s |
<branch> |
ํด๋น ๋ก์ปฌ ๋ธ๋์น๋ก ์ ํ(Checkout)ํฉ๋๋ค. |
-c <branch> |
ํ์ฌ ๋ธ๋์น๋ฅผ ๋ถ๋ชจ๋ก ์ผ์ ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์ ํํฉ๋๋ค. | |
git r |
this |
ํ์ฌ ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก Fetch & Rebase๋ฅผ ์ํํฉ๋๋ค. |
parent |
git s -c๋ก ๊ธฐ๋ก๋ ๋ถ๋ชจ ๋ธ๋์น ๊ธฐ์ค์ผ๋ก Rebase๋ฅผ ์ํํฉ๋๋ค. |
|
all |
ํ์ฌ ๋ฐ ํ์ Git ์ ์ฅ์ ์ ์ฒด๋ฅผ ์ํํ๋ฉฐ Rebase๋ฅผ ์ํํฉ๋๋ค. | |
git p |
this |
ํ์ฌ ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์(Origin)์ Push ํฉ๋๋ค. |
this -f |
์๊ฒฉ ์ ์ฅ์์ Force Push๋ฅผ ์ํํฉ๋๋ค. | |
git rp |
this [-f] |
ํ์ฌ ๋ธ๋์น ๊ธฐ์ค์ผ๋ก Rebase ์๋ฃ ํ ์ฆ์ Push๋ฅผ ์ํํฉ๋๋ค. |
git clear |
(์์) | ํ๋ก์ ํธ ๋ด ๋ชจ๋ Git ์ ์ฅ์์ ๋ณ๊ฒฝ์ฌํญ์ Hard Reset ๋ฐ Clean ํฉ๋๋ค. |
์ ๊ท์์ด๋ ๋ณต์กํ ์ ๋ช ๋ น์ด ์์ด, ํน์ ํค์๋๊ฐ ํฌํจ๋ ๋ธ๋์น๋ฅผ ์์ ํ๊ฒ ์ฐพ์ ์ง์๋๋ค.
- ์ฌ์ฉ ์์:
git b -d feat - ๋์: ์ด๋ฆ์
feat๊ฐ ํฌํจ๋ ๋ชจ๋ ๋ธ๋์น๋ฅผ ์ฐพ์ ์ญ์ ํ๊ณ , ๋ด๋ถ ์ถ์ ํ์ผ(branches.json)์์๋ ํด๋น ๋ด์ญ์ ๊น๋ํ๊ฒ ์ ๊ฑฐํฉ๋๋ค.
๋จ์ํ ๋ธ๋์น ์ ํ์ ๋์ด, ์ ๋ธ๋์น ์์ฑ ์ ํ์๋ ์ถ์ฒ(Parent)๋ฅผ ์๋์ผ๋ก ๊ธฐ๋กํฉ๋๋ค.
- ์ฌ์ฉ ์์:
git s -c feature-login - ๋์: ํ์ฌ ์์นํ ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
feature-login์ ๋ง๋ค๊ณ , ์ด ๋์ ๊ด๊ณ๋ฅผbranches.json์ ์ ์ฅํฉ๋๋ค. ์ดํgit r parent๋ช ๋ น์ด์ ํต์ฌ ์ปจํ ์คํธ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๋จ์ํ pull์ด๋ rebase ๋ช
๋ น์ด์ ํ๊ณ๋ฅผ ๊ทน๋ณตํฉ๋๋ค.
git r parent: ๋ธ๋์น๊ฐ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋ป์ด ๋๊ฐ ์ํฉ(์:main->dev->feature-A->feature-B)์์๋, ์์ ๋ธ๋์น๊ฐ ์๋ ์์ ์ด ํ์๋ ์ ํํ ์ง๊ณ ๋ถ๋ชจ ๋ธ๋์น๋ฅผ ์ฐพ์ ์ต์ ํํฉ๋๋ค.git r all: ๋ง์ดํฌ๋ก์๋น์ค(MSA) ํํ๋ ์๋ธ๋ชจ๋ ๋ฑ ์ฌ๋ฌ.gitํด๋๊ฐ ์กด์ฌํ๋ ๊ตฌ์กฐ์์ ๋ชจ๋ ์ ์ฅ์๋ฅผ ํ ๋ฒ์ ์ต์ ์ํ๋ก ๋๊ธฐํํฉ๋๋ค.
์์ ํ ๋ด์ญ์ ์ต์ ํํ๊ณ ๋ฆฌ๋ชจํธ์ ๋ฐ์ํ๋ ๊ฐ์ฅ ๋น๋ฒํ ๊ณผ์ ์ ๋จ์ถํฉ๋๋ค.
- ์์ ์ฅ์น: Rebase ๊ณผ์ ์์ ์ถฉ๋(Conflict)์ด ๋ฐ์ํ๋ฉด ์ฆ์ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ์ฌ ์๋ชป๋ ์ฝ๋๊ฐ Push๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ด ์คํฌ๋ฆฝํธ ๋ชจ์์ ํ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๋น ๋ฅด๊ณ ์์ ํ ๊ฐ๋ฐ ์ฌ์ดํด์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
- ์์ ์์: ๋ถ๋ชจ ๋ธ๋์น์์ ์๋ก์ด ์์ ๋ธ๋์น ์์ฑ
git s -c feature-new-ui- ์ฝ๋ ์์ฑ ๋ฐ ์ปค๋ฐ: (์ฝ๋ ์์ ํ
git commit) - ์ต์ ํ ๋ฐ ๋ฐ์: ๋ถ๋ชจ ๋ธ๋์น์ ์ต์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์์ ๋ฆฌ๋ฒ ์ด์คํ ๋ค ํธ์
git r parent
git p this(๋๋ ํ ๋ฒ์ ์ฒ๋ฆฌ)
git rp this- ์์ ์๋ฃ ํ ์ ๋ฆฌ: ๋ณํฉ ์๋ฃ๋ ๋ธ๋์น ์ผ๊ด ์ญ์
git b -d feature-new-ui