μμ£Ό μ¬μ©νλ 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