μΈμ€νκ·Έλ¨ λμλ€λλ€κ° λ³Έ 지μ΄λ€. κ·μ½μ§ μλ?
μ΄μ μ°λ¦¬κ° μ μ§Έ λΌμ§λΌκ³ μκ°ν΄λ³΄μ. μ°λ¦¬μ λͺ©ν(milestone)λ νΌνΌνκ³ μ κ΅ν λ²½λμ§μ μ§λ κ²μ΄λ€. 3μΌ μ μ μμν΄ λΌλλ₯Ό λ§λ€κ³ , κ·Έ λ€μ λ λ²½λμ μκ³ μ€λμ μ§λΆμ λ§λ€μλ€. μ΄μ λ¬Έλ§ λ¬λ©΄ μμ±!
κ·Έλ°λ° μ€λ! μ§μ μ°¬μ°¬ν μ΄ν΄λ³΄λ€κ° λ²½λμ΄ λΉλ€μ΄μ§ κ²μ λ°κ²¬νλ€. μλ²½ν μ§μ λ§λ€κΈ° μν΄μ λ²½λμ λ€μ μμμΌ νλλ°.. ν루 μ μΌλ‘ μ§μ λλ릴 μ μμκΉ?
μμ μ§μ κ±°μ§κ°λ€
μ΄ μν©μμ μ°λ¦¬λ₯Ό λμμ€ ν΄κ²°μ± μ΄ λ°λ‘ λ²μ κ΄λ¦¬ μμ€ν μ΄ λκ² λ€!
λ²μ κ΄λ¦¬ μμ€ν μ μκ°μ¬νμ΄ κ°λ₯νκ² ν΄μ€λ€. μ°λ¦¬κ° μ§μ μ§μ λ λ²μ κ΄λ¦¬μμ€ν μ μ΄μ©νλ€λ©΄ λ€μ μ λ μ κ²°κ³Όλ¬Όλ‘ λλμκ°μ λ²½λμ λ€μ μκ³ μλ²½ν μ§μ μ§μ μ μμμ κ±°λ€! μ€λͺ μ μμκ° μλ μ€μ λ²μ κ΄λ¦¬μμ€ν μ 보면μ νλλ‘ νκ² λ€.
μΆμ²: Git vs Github β Demystifying The Differences | Edureka
λ²½λμ§μ μ°λ¦¬μ ν νλ‘μ νΈλΌκ³ μκ°νλ©΄ λλλ°, λ²μ κ΄λ¦¬μμ€ν μ΄ μ μ©λ νλ‘μ νΈ μμ νμΌλ€μ λ³νκ° μκ°μ λ°λΌ κΈ°λ‘λΌμ λ΄κ° λμκ°κ³ μΆμ μμ μΌλ‘ νλ‘μ νΈ νμΌλ€μ λλλ €λμ μ μλ€. λ§κ·Έλλ‘, λμΌν νμΌμ λν΄ μ¬λ¬ "λ²μ "μ κ΄λ¦¬ν΄μ£Όλ μμ€ν μΈ κ²μ΄λ€.
λ²μ κ΄λ¦¬μμ€ν μ μ°λ μ°λ¦¬λ μ΄λ° μ§μ μν΄λ λλ κ±°λ€! κ·Όλ° λμμ΄λλ μ λ§ λ€ μ΄λ°κ°μ??
κΉμ λ°λ‘ μ΄λ° λ²μ κ΄λ¦¬μμ€ν μ€ νλμΈ κ²μ΄λ€. κΉμ μ΄μ©νλ©΄ μ°λ¦¬λ
μ΄ λ, κΉμ μ²μ μ ν μ¬λμ κΉκ³Ό κΉνλΈλ₯Ό μ νν ꡬλΆνμ§ λͺ»νκΈ°λ νλλ°
Git μ λ‘컬 μ μ₯μμμ νμΌλ€μ λ²μ μ μ€μ§μ μΌλ‘ κ΄λ¦¬ν΄μ£Όλ μννΈμ¨μ΄μ΄κ³ ,
Github λ μ¬λ¬ λ‘컬 μ μ₯μμμ 곡μ ν μ μλλ‘ μ격 μ μ₯μλ₯Ό μ 곡νλ ν΄λΌμ°λ κ°μ κ²μ΄λ€. λΉμ·ν κ²μΌλ‘λ Bitbucket, GitLab λ±μ΄ μλ€.
κ·Έλμ λ€λ₯Έ μ¬λλ€κ³Ό νμ μ νκ±°λ μ€ν μμ€λ₯Ό 곡μ νκ³ λ€λ₯Έ μ¬λλ€μ μ견μ λ£κ³ μΆμ κ²½μ° λ±μ Githubμ μ¨μ νΈλ¦¬νκ² κΈ°λ₯μ μ¬μ©ν μ μλ€. λ§μ½ νΌμ μμ νκ±°λ νμμ μΈ λ²μ λ΄μμμ νμ μ΄λΌλ©΄ Gitλ§ μ¬μ©ν΄λ 무방νλ€λ λ»μ΄λ€.
μΌλ¨ κΈ°λ³Έμ μΌλ‘ μμ£Ό μ°λ 컀맨λλ€μ ν°λ―Έλμμ λ°λ‘ μ¬μ©νλ κ²½μ°κ° λ§λ€. κ·Έλμ λλ Git bashλ₯Ό μ΄μ©ν΄μ 컀맨λλ₯Ό μ€νν΄λ³΄μλ€.
init
init
λͺ
λ Ήμ΄λ λ²μ κ΄λ¦¬λ₯Ό μνλ λλ ν 리λ₯Ό μ ννκ³ initialize νλ€. init
λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄, μλλ μλ λλ ν λ¦¬μΈ .git
μ΄ μ겨λλ€. .git
μ μ΄λ¦ μμ μ μ΄ λΆμ΄μλ μ¨κΉ νμΌμ΄λ―λ‘ -a μ΅μ
μ λΆμ¬ μ£Όμ΄μΌ λλ ν 리 리μ€νΈμμ νμΈν μ μλ€.
λλ GIT
μ΄λΌλ μλ‘μ΄ λλ ν 리λ₯Ό λ§λ€μ΄ ν΄λΉ μμΉμμ git init
λͺ
λ Ήμ΄λ₯Ό μ£Όμλ€. κ·Έλ¬λλ μλ μ¬μ§κ³Ό κ°μ΄ .git
λλ ν λ¦¬κ° μκ²Όμμ νμΈν μ μμλ€.
.git
λλ ν 리λ μ°λ¦¬μ λ²μ κ΄λ¦¬ λμμΈ μ°λ¦¬μ νλ‘μ νΈμ νμν μ 보λ€μ΄ λͺ¨λ λ΄κ²¨μλ κ³³μ΄λ€. μ΄λ₯Όν
λ©΄ κ°κ°μ 컀λ°λ€μ λν μ 보, μ»€λ° νμ€ν 리, μ격μ μ₯μμ μ£Όμ λ±μ΄ μμ κ²μ΄λ€.
add
μ μ΄μ GIT
λλ ν 리 λ΄μ μλ‘μ΄ νμΌ Aλ₯Ό λ§λ€μ΄λ³΄μ. λλ vimμΌλ‘ κ°λ¨ν μΈμ¬λ§μ μ μ΄μ£Όμλ€.
κ·Έλ¦¬κ³ λμ μ΄ νμΌμ λ²μ μ κ΄λ¦¬νκΈ° μν΄ νμΌμ λ³κ²½ μν, μ¦ Aκ° μ겨λ μνλ₯Ό add
νλ€. λ³λ€λ₯Έ μΆλ ₯μ μμλ€.
commit
gitμ λ²μ κ΄λ¦¬λ₯Ό νλ λ¨μ!! 컀λ°μ λ§λλ λͺ λ Ήμ΄μ΄λ€. 컀λ°μ μμ±νλ©΄ ν΄λΉ μμ μ νμΌ μνλ‘ λμκ° μ μκ² λλ€. νμλ¨Έμ μ μ§νκ° λλ κ²μ΄λ€π
commit μ ν λλ λ©μμ§λ₯Ό κ°μ΄ λ¬μμΌνλ€.
κ·Έλ¬λ©΄ μμκ°μ΄ μ μ μλ μΆλ ₯λ€μ΄ λμ¨λ€. λ°μ κ·Έλλ‘ μ¨λ΄€λλ°,
[master (root-commit) 238b896] Create A
1 file changed, 1 insertion(+)
create mode 100644 A
μ¬κΈ°μ 238b896
μ΄λΌλ μ«μλ 컀λ°λ€μ ꡬλΆνλ κ³ μ ν 40μ μ€νΈλ§μ μλΆλΆμ΄λ€. μ΄ μ€νΈλ§μ΄ κ° μ»€λ°μ μμ±ν λ SHA ν΄μ μκ³ λ¦¬μ¦μ μ΄μ©ν΄ λ§λ€μ΄μ§κΈ° λλ¬Έμ Git SHA
λΌκ³ λΆλ₯Έλ€.
git log
λ₯Ό μ€ννλ©΄ μ΄λ°μμΌλ‘ 컀λ°μ μ 보λ₯Ό λ μμΈν λ³Ό μ μλ€.
Command Line Interface (CLI)λ ν°λ―Έλ, bash, 컀맨λμ°½ λ± text-based user Intercace μ΄λ€. git λͺ λ Ήμ΄λ₯Ό λ°λ‘ λ°λ‘ μ€νν μ μμ΄ νΈλ¦¬νλ€. νμ§λ§ CLIλ₯Ό μ΄λ³΄μκ° μ¬μ©νλ©΄ ν·κ°λ¦¬κ³ μ€μλ₯Ό λ§μ΄ ν μ μκΈ° λλ¬Έμ μ μλκ»μλ GUIλ₯Ό μ κ·Ή μΆμ²ν΄μ£Όμ ¨λ€.
gitμ λ μ§κ΄μ μ΄κ³ , νΈλ¦¬νκ² μΈ μ μκ² λμμ£Όλ GUIμλ μ¬λ¬ μ’ λ₯κ° μλλ°, λνμ μΌλ‘ GitKraken, SourceTree, GitHub Desktop λ±μ΄ μλ€. κ·Έλ¦¬κ³ μ¬λ¬ IDEμμλ μμ μ νλ©΄μ gitμ νΈλ¦¬νκ² μΈ μ μλ νλ¬κ·ΈμΈλ€μ μ 곡νκ³ μκΈ°λ νλ€.
λλ μΆμ²μ λ°λΌ GitKrakenμ μ€μΉνλ€. μ€μ§μ΄κ° μ°Έ κ·μ½λ€.
κΉν°λ μλ£μ μλ λ°μ μ¬μ§μ λ³΄κ³ μ΄λ κ² λΉκ΅ν΄μ€ μλ£λ μꡬλ νκ³ μ§μ§νκ² λ³΄λ€κ° νΌμνλ€. κ·μ¬μ΄ μ€μ§μ΄λκΉ λ΄μ€λ€.π
μ μ¬μ§μμ λ¨Όμ μ λΆλΆλ§ μ΄ν΄ν΄λ³΄λλ‘ νμ.
μ°μ μ νμ΄νλ₯Ό λ°λΌ μμ§μ΄λ λ μλ€μ 'νμΌμ λ³ν'λΌκ³ μκ°νλ©΄ λλ€. κ·Έλ¦¬κ³ μκΈ°λ₯λ€μ κ° 'νμΌ λ³ν'κ° μλ μμμ ꡬλΆνκΈ° μν΄ κ·Έλ €λ£μ κ²μ΄λ€.
μ°μ workspace
(= worktree)λ μ€μ μ°λ¦¬ μ»΄ν¨ν°μ νμΌ μμ€ν
μ λλ ν 리λ₯Ό μ΄μΌκΈ°νλ€. κ·Έλμ μ°λ¦¬κ° νμΌμ μμ νκ³ μλ¬΄λ° λͺ
λ Ήμ νμ§ μμμ κ²½μ° νμΌμ λ³κ²½μ¬νμ λ²μ κ΄λ¦¬μμ€ν
μ΄ μΈμνκΈ° μ , workspace μμ€μ μλ κ²μ΄λ€.
μ΄ λ, git add ν΄λΉνμΌ
λͺ
λ Ήμ μ€ννλ©΄ ν΄λΉ νμΌμ λ³νλ₯Ό λ²μ κ΄λ¦¬μμ€ν
μ΄ κ°μ§ν΄ Index
μμμ μΆκ°λλ κ²μ΄λ€. Indexλ μ§κΈκΉμ§ λ°κ²¬λ, μμΌλ‘ commit ν 'νμΌ λ³κ²½μ¬ν'λ€μ κΈ°λ‘(stage/track)ν΄λλ κ°μμ 곡κ°μ΄λ€. μ μ₯μμ λ³κ²½ μ¬νμ κΈ°λ‘νκΈ° μν΄μλ κΈ°λ‘νκ³ μ νλ λͺ¨λ λ³κ²½ μ¬νλ€μ΄ 'Index'μ μ‘΄μ¬ν΄μΌνλ€.
μλ₯Ό λ€μ΄ 10κ°μ νμΌμ μμ νμ§λ§ κ·Έ μ€μ 7κ°λ§ μ μ₯μμ 곡κ°νκ³ μΆμ λλ₯Ό μκ°ν΄λ³΄λ©΄, λ³κ²½ν 10κ°μ νμΌ μ€ 7κ°λ₯Ό μ ννλ μμ μ΄ λ°λ‘ μΈλ±μ€μ λ±λ‘/μ€ν μ΄μ§ νλ κ²μ΄λ€.
Indexμ μ μ₯λ νμΌ λ³κ²½μ¬νλ€μ λ²μ κ΄λ¦¬μμ€ν
μ ν΅ν΄ κ΄λ¦¬νκΈ° μν΄μλ νμΌ λ³κ²½μ¬νλ€μ λ€λ₯Έ μ 보λ€κ³Ό ν¨κ» commit λ¨μλ‘ κΈ°λ‘ν΄μ£Όμ΄μΌ νλ€. local repository
λ μ΄λ¬ν commit
λ€μ΄ μ μ₯λ 곡κ°μ΄λ€.
μ§κΈ μμ μ€μΈ λΈλμΉκ° 무μμΈμ§ Gitμ μ΄λ»κ² νμ ν κΉ. λ€λ₯Έ λ²μ κ΄λ¦¬ μμ€ν κ³Όλ λ¬λ¦¬ Gitμ 'HEADβλΌλ νΉμν ν¬μΈν°κ° μλ€. μ΄ ν¬μΈν°λ μ§κΈ μμ νλ λ‘컬 λΈλμΉλ₯Ό κ°λ¦¬ν¨λ€.
git log --oneline --decorate
μ νλ©΄ λΈλμΉκ° μ΄λ€ 컀멧μ κ°λ¦¬ν€λμ§ νμΈν μ μλ€.
HEAD μ΄μΌκΈ°λ λΈλμΉ λ΄μ©μ μ°κ³ λμ λ μμΈν μ°λ €νλ€π
κΉμμλ λ‘컬 μ μ₯μμ μ μ₯λ 컀λ°λ€μ μ§μ°λ, 리μ μ ν μ μλ€λ μμ£Όμμ£Ό νΈλ¦¬ν κΈ°λ₯μ΄ μλ€.
λ°λ‘ git reset
λͺ
λ Ήμ΄μΈλ°, μ΄ λͺ
λ Ήμ΄λ git reset [컀λ°ν¬μΈν°/SHA]
μ νμμΌλ‘ μ¬μ©νλ€. reset λͺ
λ Ήμλ μ΅μ
μ΄ μλλ° μ΄κ² μ€μν κ² κ°λ€.
--soft
: 컀λ°λ§ μ§μ°κ³ Working treeμ Indexμλ κΈ°λ‘μ λ¨κΉ--mixed
(default) : working treeμλ§ κΈ°λ‘μ λ¨κΉ (Unstaging)--hard
: Working treeμμλ λ€ μ§μλ²λ¦Ό ππ» νμΌ μνκ° λ¦¬μ
λ¨.μ μλμ --hard
μ΅μ
μ΄ μμ£Ό μ°μΈλ€κ³ νλ€. λκ°μλ κ°λ°νλ©΄μ νλλ₯Ό λ§μ΄ μΈ κ² κ°λ€.
git revert
λ reset
κ³Ό λΉμ·νμ§λ§ λ€λ₯΄κ² λμνλ λͺ
λ Ήμ΄μ΄λ€. resetκ³Ό λ§μ°¬κ°μ§λ‘ 컀λ°ν λ³κ²½μ¬νμ μμ νλ κ²μ κ°μ§λ§ revertλ λ³κ²½μ¬νμ μμ νλ 컀λ°μ μλ‘ λ§λ λ€!
reset
λͺ
λ Ήμ μ΄λ―Έ 컀λ°μ΄ μ격μ μ¬λΌκ°μ λμ²λΌ 컀λ°μ λ‘컬μμλ§ μμ ν΄μ ν΄κ²°λμ§ μλ κ²½μ° μ¬μ©νκΈ° μ 맀νλ€. κ·Έλμ μ»€λ° νμ€ν λ¦¬κ° κΌ¬μ΄μ§ μκ² νκ³ μΆμ λ revert
λ₯Ό μ¬μ©νλ κ²λ νλμ λ°©λ²μ΄λΌκ³ νλ€.
λ°μ κ·Έλ¦Όμ 보면 μ΄ν΄κ° μ½λ€.
μ΄λ―Έμ§ μΆμ²: Version control with Git
λ무 μ‘Έλ €μ λ€μ λͺ λ Ήμ΄λ€μ μ€μ΅μ μ§μ ν΄λ³΄μ§λ λͺ»νλ€ νμ§λ§ μ λλ‘ μ΄ν΄νμΌλ λ΄μ ν λ² ν΄λ³΄λ©΄ κΈλ°© μμλ μ΅μ κ²κ°λ€!! κ·Έλ¦¬κ³ μμ μ΅μ§ μμλ μ΄μ λνν μ€μ§μ΄κ° μμΌλ κ±±μ μ΄ μλΉ π κΉ λ μ£½μμ΄!