๊น์ ์ฐ๋ ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง ยน๊ฐ์ธ์ด ๊น์ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด ๋จผ์ ๋ค๋ฃจ์ด๋ณด๊ณ ์ํ๋ค.
๊น์ ์ธ ๊ฒฝ์ฐ ํ์ผ์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํด์ง๋ค. ํ์ผ ๊ด๋ฆฌ์ ์์ด ๋ณดํต์ ์ฌ๋์ด ๊ฒช๋ ์์๋ก ๊ณผ์ ์ ์ถ์
์ํ ์ต์ข
๋ณธ์ ๊ฑฐ๋ญ๋ ์์ ์ผ๋ก '์ต์ข
๋ณธ_1' '์ต์ข
๋ณธ_2' '์ต์ข
๋ณธ_3'์ผ๋ก ์ ์ฅํ๋ ์ผ์ด ์์์ ๊ฒ์ด๋ค.
๋ค๋ฅธ์ด๋ฆ์ผ๋ก ์ ์ฅ์ ํ๋ ์ด์ ๋ ํน์ ๋ชจ๋ฅผ ๋ฐฑ์
ํ์ผ์ ๋๊ธฐ ์ํจ๊ณผ ๋์์ ๊ฐ์ ์์
๋ด์ญ์์ ์์
ํ ๊ฐ์ ์ด๋ฆ์ ํ์ผ์ ์์ฑํ์ ๋ ๋ฐ์ํ๋ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค.
์ผ๊ด๋ ์ด๋ฆ์ผ๋ก ์์ฑ ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ํ์ผ ์ด๋ฆ์ ๋ถ๊ท์น์ ์ผ๋ก ํ๋ ๋ ์ฉ ๋์ด๋๊ฒ ๋ ๊ฒ์ด๋ค.
๊ฐ๋ฐ์๊ฐ ์์ฑํ ํ์ผ์ ๊ฒฝ์ฐ ์์ ์์ ์๋ ํ์ผ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ์ฐจ์์์
ํ์ผ๊ด๋ฆฌ๋ ์ค์ํ ์ด์๊ฐ ์๋ ์ ์๋ค. ์์ ๊ฐ์ ๋ถํธํจ, ์์ ๋ ๋ด์ฉ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ
์ํด git์ ์ฌ์ฉํ๋ค.
--- ๊น ํ๋ก๊ทธ๋จ์ ๋ค์ด ๋ฐ๊ณ git-bash ๋๋ ๋ฆฌ๋
์ค ํ๊ฒฝ์์ ์งํํ๋ค๋ ๊ฐ์ ํ์์ ---
๊น์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์
ํ ํด๋(Working Directory)๋ฅผ ๋ง๋ค์ด ์ฃผ๊ณ CLI ํ๊ฒฝ์์ ํด๋น ์์
ํด๋๋ก ๋ค์ด๊ฐ git init ๋ช
๋ น์ด๋ฅผ ์น๋ค. ๊ทธ๋ฌ์ ๋ ํด๋น ์์
ํด๋ ๋ด์๋ .git ์ด๋ผ๋ ํด๋๊ฐ
๋ง๋ค์ง๋ค.
(์์ฝ1) git์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ ํด๋ ์ต์์ ๊ฒฝ๋ก์์ 'git init' ๋ช
๋ น์ด๋ฅผ ์น๋ค.
(Tip) git init dir_name ์ ํ๋ฉด ํด๋ ์์ฑ๊ณผ ๋์์ init ์์
์ด ์ด๋ฃจ์ด์ง๋ค.
๊น์ด ํ์ผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ด์ ์์
๊ณผ์ ๋ณํ๋ฅผ ์ธ์ํ๋ ๊ฒ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์๋ฅผ ๋ค์ด ์์
๋๋ ํ ๋ฆฌ์ ํด๋1, ํด๋2, ํด๋3์ ์์ฑํ๋ค๊ฐ ๋ค์ ํด๋3์ ์ง์ ๋ค๊ณ ํ์.
๊ทธ๋ฌ๋ฉด git์ ํด๋1๊ณผ ํด๋2๊ฐ ์๊ฒผ๋ค๋ ์ ๊ณผ์ ์ฐจ์ด๋ฅผ ์ธ์ํ๋๋ฐ ์ด๋ฅผ .git/indexํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก
๊ทธ ์ฐจ์ด๋ฅผ ์ธ์ํ๋ค๊ณ ํ๋๋ฐ ์๋ฆฌ๋ ๋์ค์ ๋ค๋ฃจ์ด๋ณด๋๋ก ํ์.
์ดํ ์์
ํ ํ์ผ ๋๋ ํด๋๊ฐ ๊น์ค๋ฝ๊ฒ ๊ด๋ฆฌ๋๊ธฐ ์ํด์ 'git add ํ์ผ์ด๋ฆ' ๋ช
๋ น์ด๋ฅผ
(์์
ํด๋ ์์น)์์ ์
๋ ฅํด์ฃผ์ด์ผ ํ๊ณ ์ด๋๋ถํฐ addํ file๋ค์ stage ์์ญ์ ์ฌ๋ ค์ก๋ค๊ณ ํ๋ค.
์ ํํ๊ฒ ์๊ธฐํ๋ฉด .git/index ํด๋์์ ๊ฐ๊ฐ์ (ํด๋-ํ์ผ) ๊ตฌ์กฐ๋ก ์ ์ฅ์ด ๋๋ค.
์ฌ์ฉ์ ์
์ฅ์์ ์ปค๋ฐํ์ผ๋ก ๋ง๋ค ๋จ๊ณ์ ์์นํ๊ณ ์๋ค๊ณ ํด์ stage ์์ญ์ ์ฌ๋๋ค๋ผ๊ณ ํํํ
๊ธฐ๋ ํ๋ค.
์ด๋ ๊ฒ addํ๋ ๊ณผ์ ์ด ์ค์ํ ์ด์ ๋ ์ ๋ฒ์ ๊ด๋ฆฌ์์๋ ์ ํ์ ์ผ๋ก add ํ ์ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
git์์๋ add๋ผ๋ ๊ณผ์ ์ด ์์์ผ๋ก ์ ํ์ ์ผ๋ก ์์ ์ฌํญ์ ๋ฐ์ํ ์ ์๊ณ ํ์ addํ ํ์ผ๋ค์
๊ทธ๋ฃนํ ํด์ ๋ฒ์ ๋จ์๋ก ์ ์ฅ์์ ์ ์ฅํ ์ค๋น๋ฅผ ๋ง์น๊ฒ ๋ ๊ฒ์ด๋ค.
๐ I'm ready to be saved ๐ง๐ปโ๐
add์ ๊ณผ์ ์ด ์ ์ฅ์์ ์ฌ๋ฆด ๋ฒ์ ์ ๋ง๋ค๊ธฐ ์ํ ์ค๊ฐ์ค๋น ๊ณผ์ ์ด์๋ค๋ฉด ์ปค๋ฐ์ ๊ณผ์ ์ ์ค๋นํ
์น๊ตฌ๋ค์ ์ ์ฅ์ ๋ฐ๋ท์ํค๋ ๊ณผ์ ์ด๋ค.
์๋ฅผ ๋ค์ด ํ์ฌ stage์ file_1, file_2, dir_1์ด ์๋ค๊ณ ํ์ ๋ (add ํ ํ์ผ๋ค์ด file_1,
file_2 dir_1) ์ผ ๋ '์ปค๋ฐ'์ ํด์ฃผ๋ฉด stage์ ์ฌ๋ผ๊ฐ ํ์ผ๋ค์ด ํ๋์ ๋ฒ์ ์ผ๋ก ์ ์ฅ์์ ์ ์ฅ์ด
๋๋ค. ์ปค๋ฐ์ ๋ฒ์ ํํ๋ ๊น์ ์๋ฆฌ์์ ํ์ธํด๋ณด๋๋ก ํ์.
๋ก์ปฌ์ ๋ด์ฉ๊ณผ ์ธ๋ฑ์ค์ ๋ด์ฉ์ ๋น๊ตํ์ฌ add ๋ช
๋ น์ ๋์์ด ๋๋ ํ์ผ๋ค์ ๋ชฉ๋ก์ ํ์ํด์ฃผ๊ณ ,
์ธ๋ฑ์ค์ ๋ด์ฉ๊ณผ ์ต์ ์ปค๋ฐ์ Tree ํ์ผ ๋ด์ฉ์ ๋น๊ตํ์ฌ commit ๋ช
๋ น์ ๋์์ด ๋๋ ํ์ผ๋ค์
๋ชฉ๋ก์ ํ์ํด์ฃผ๋ ๋ช
๋ น์ด์ด๋ค.
๋ก์ปฌ์ ๋ด์ฉ, ์ธ๋ฑ์ค์ ๋ด์ฉ, ์ต์ ์ปค๋ฐ์ Tree ํ์ผ ๋ด์ฉ์ด ๋ชจ๋ ๊ฐ๋ค๋ฉด "nothing to commit"
์ ์ถ๋ ฅํด์ค๋ค.
์๊ฒฉ์ ์ฅ์(remote repository)
local ํ๊ฒฝ์์ ์ ์ฅ์์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ๋คํธ์ํฌ ์์ ๋ค๋ฅธ ์ ์ฅ์๋ฅผ ์ผ์ปซ๋๋ค.
--- ๊นํ๋ธ์์ ์๊ฒฉ์ ์ฅ์์ ์ฃผ์๊ฐ ๋ง๋ค์ด์ก๋ค๋ ๊ฐ์ ํ์---
๋ก์ปฌ ํ๊ฒฝ์์ ์์ ํ๊ฒฝ๋๋ก ์ ์ฅ์๋ฅผ ๊ตฌ์ถํ๋ค๋ฉด ํด๋น ์ ์ฅ์๋ฅผ ์๊ฒฉ ํ๊ฒฝ์์ ๊ตฌ์ถํ๊ธฐ ์ํด์
์์
์ด ํ์ํ๋ค.
git add remote origin ์๊ฒฉ์ฃผ์
์์ ๋ช
๋ น์ด๊ฐ ๊ทธ ์์์ธ๋ฐ ํ๋ฉด ์๊ฒฉ์ ์ฅ์ ์ด๋ฆ์ origin(๊ด์ต)์ผ๋ก ํด์ ์๊ฒฉ์ฃผ์๋ฅผ
๋ก์ปฌ ์ ์ฅ์์ ์ฐ๊ฒฐํ๋ค๋ ์๋ฏธ์ด๋ค.
์์ ๋ช
๋ น์ด๋ git log ์ค ์ปค๋ฐ๋จ์ ๋ผ๋ฆฌ ์๋ก ๋น๊ตํ์ฌ ์์ ์ฌํญ์ ์๋ ค์ฃผ๋ ๋ช
๋ น์ด์ด๋ค.
์๋ ๊ทธ๋ฆผ์ด commit ๋จ์์ด๊ณ ๋ณด์ฌ์ฃผ๋ ๋ด์ฉ์ผ๋ก ์ปค๋ฐํ์ผ์ ๋ฒํธ, ์์ฑ์, ์์ฑ์๊ฐ์ ๋ณด
์ฌ์ค๋ค. ์ปค๋ฐ์ commit -m "1"๋ก ๋ฉ์ธ์ง๋ฅผ ์ ์ด์ฃผ์๋๋ฐ 1์ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๋ํ๋ธ๋ค.
์ธ์ค์ ๊ฑด๋ ๋ฐ๊ณ ---/dev/null ์ด๋ผ๋ ๋ถ๋ถ์ dir_1์ด๋ผ๋ ํ์ผ์ด ์์๋๋ฐ +++ b/dir_1
์ด๋ผ๋ ํ์ผ์ด ์๊ฒผ๋ค๋ ์๋ฏธ์ด๋ค. ํ์ค ๊ฑด๋ ๋ฐ๊ณ +apple is delicious๋ ํด๋น ํ์ผ ๋ด์ฉ์
apple is delicious๋ผ๋ ๋ด์ฉ์ด ์ถ๊ฐ๋์๋ค๋ ์๋ฏธ์ด๋ค.
์ข๋ ๋ณต์กํ ์์๋ฅผ ์ดํด๋ณด์
commit ad0148362cdf18dc34fd67d133c893f70d4ace5b (HEAD -> master)
Author: woodstock1993 <diqkqkqk@gmail.com>
Date: Sun Sep 19 10:42:08 2021 +0900
์ปค๋ฐ ํ์ผ๋ช
: ad0148362cdf18dc34fd67d133c893f70d4ace5b
์์ฑ์: woodstock1993 <diqkqkqk@gmail.com>
์์ฑ์ผ์: Sun Sep 19 10:42:08 2021 +0900
--- a/dir_2
+++ b/dir_2
@@ -1,3 +1,3 @@
banana is delicious
-kiwi is delicious
+kiwi is sour
dir_2๋ผ๋ ํ์ผ์ด ์๋๋ฐ ๋ณ๊ฒฝ๋์๋ค. &nsp;banana is delicious\n ๋ฌธ์ฅ์ด ์ถ๊ฐ๋์๊ณ
kiwi is delicious ๋ผ๋ ๋ฌธ์ฅ์ด kiwi is sour๋ก ๋ฐ๋์๋ค.
--- /dev/null
+++ b/dir_3
@@ -0,0 +1 @@
+grape is delicious
dir_3 ํ์ผ์ด ์์ฑ๋์๊ณ
ํด๋น ํ์ผ์ grape is delicious ๋ฌธ์ฅ์ด ์ถ๊ฐ๋์๋ค.
7-1) add ์ทจ์ํ๊ธฐ
ํน์ ํ์ผ์ addํด์ ์ฌ๋ ธ๋๋ฐ stage ์์ญ์ ์ฌ๋ผ๊ฐ ํ์ผ๋ค์ stage ์์ญ์์ ๋ค์ ๋ด๋ ค์ฃผ๊ณ ์ถ์ ๋๊ฐ
์์ ๊ฒ์ด๋ค.
์ ๋ช
๋ น์ด๋ฅผ ํตํด stage ์์ญ์ผ๋ก addํ ํ์ผ๋ค์ ๋ด๋ ค ์ค ์ ์๋ค. ํ์ผ์ด๋ฆ ์์ด ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด
stage์ ์ฌ๋ผ๊ฐ ๋ชจ๋ ํ์ผ๋ค์ ๋ด๋ฆฌ๊ฒ ๋๋ค.
7-2) ์ปค๋ฐ ์ทจ์ํ๊ธฐ
๋ฒ์ ๋ณ ์ปค๋ฐ์ ํ๋๋ฐ ๋ฒ์ ์ ์ง์์ฃผ๊ณ ์ถ์ ๋๊ฐ ์์ ๊ฒ์ด๋ค. ์ด๋ด ๋ ์ง์ธ ์ ์๋ ๋ช
๋ น์ด๊ฐ ์๋ค.
์๋์ ๊ฐ์ด 5๋ฒ์ ์ปค๋ฐ์ ํ๊ณ ๋ฉ์ธ์ง 3 ์ดํ์ ์ปค๋ฐ ๋ฒ์ ์ ์ง์ฐ๊ณ ์ถ๋ค๊ณ ํ์ ๋์ ๋ช
๋ น์ด๋ก
git reset e47396458513e067c455169b9507d49ea22ee453 --hard์ ํด์ฃผ๋ฉด ์ปค๋ฐ '4'์ '5' ๋ฒ์
์ด ์ง์์ง๊ฒ ๋๋ค. ์ปค๋ฐ ๋ฉ์ธ์ง 3์ ์ปค๋ฐ ํ์ผ ์ด๋ฆ์ ๋ฃ์ด์ผ ํด๋น ์ปค๋ฐ ํ์ผ์ ์ ์ธํ ์ดํ์ ์ปค๋ฐ
ํ์ผ๋ค์ด ์ง์์ง๊ฒ๋๋ค.
์ฃผ์ ์ฌํญ์ผ๋ก ์๊ฒฉ์ ์ฅ์๋ก pushํ๊ธฐ ์ commit์ ๋ํด git reset์ ํ ์ ์๊ณ ์๊ฒฉ ์ ์ฅ์๋ก
pushํ ํ์ผ์ ์ ์ฉ ๋์์ด ์๋๋ค.
checkout
checkout์ ์ต์ด์ commit ํ์ผ ์์ฑ ์ดํ HEAD๊ฐ ๋ฌด์์ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํฌ์ง ๋๋ ์ปค๋ฐํ์ผ์ ๊ฐ๋ฆฌํฌ
์ง ์ค์ ํด ์ฃผ๋ ๊ฐ๋
์ด๋ค.
reset
reset์ ๊ฐ๋
์ branch๋ก ํ์ฌ๊ธ ์ด๋ค ์ปค๋ฐํ์ผ์ ๊ฐ๋ฆฌํค๊ฒ ํ ์ง ์ค์ ํ๋ ๊ฐ๋
์ด๋ค.
์ด๋ค ๋ธ๋์น๊ฐ ๋ง์ผ ์ด์ ๋ฒ์ ์ ์ปค๋ฐํ์ผ์ ๊ฐ๋ฆฌํค๊ฒ ๋ ๊ฒฝ์ฐ ํ์ฌ ๋งํฌ๋์ด ์๋ ์ปค๋ฐํ์ผ๊ณผ๋ ์ฐ๊ฒฐ์ด
๋์ด์ง๊ธฐ ๋๋ฌธ์ ์ญ์ ๋ ๊ฒ ๊ฐ์ด ๋๋ผ๊ฒ ๋๋ค.
์ํฉ: git add ํ ํ์ผ ์ค์์ ํ์ผ์ ๋ด์ฉ์ด ์์ ๋์์ ๋
<git add ํ์ผ์ด๋ฆ, git commit -m "๋ฉ์ธ์ง"> ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ์ปค๋ฐ์
ํ ์ ์๋ค. ์ด๋ฅผ ํ๋์ ๋ช
๋ น์ด๋ก ๋จ์ถํ ์ ๊ฐ ์๋๋ฐ ์๋์ ๊ฐ๋ค.
git commit -am "๋ฉ์ธ์ง"
์ ๋ช
๋ น์ด๋ก ์
๋ ฅํ๋ฉด ์ถ์ ํ ํ์ผ์ ์์ ์ด ๋ฐ์ํ์ ๋ add์ commit์ ๋์์ ํ ์ ์๋ค.
add + commit => git commit -am "message" => makes typying happy ๐
git์ ํ์ผ์ด๋ฆ์ด ๋ฌ๋ผ๋ ํ์ผ ๋ด์ฉ์ด ๊ฐ์ผ๋ฉด ๊ฐ์ ํ์ผ์ ๊ฐ๋ฆฌํจ๋ค. ์๋ ์ฐฝ์ gistory
ํ๋ก๊ทธ๋จ์ ํตํด git์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์๋ ํ์ผ๋ค์ ๋ณด์ฌ์ค๋ค.
ํ์ฌ git init์ด ๋์ด์๋ local์ f1.txt, f2.txt, f3.txt ํ์ผ์ ์์ฑํ์๊ณ f1.txt
์ f3.txt์ ๋ด์ฉ์ด ๋์ผํ๋ค. ๊ทธ๋ฌ์ ๋ f1.txt์ f3.txt๊ฐ ๊ฐ๋ ๋ฒํธ๋ ๋์ผํ ๊ฒ์ ๋ณผ
์ ์๋๋ฐ ์ด์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
๊น์ (๋ด์ฉ+ฮฑ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SHA1 ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด
2e65efe2a145dda7ee51d1741299f848e5bf75e ์ด๋ฆ์ blob ํ์ผ์ ์์ฑํ๋ค.
ํ์ผ ์ ๋ชฉ์ด ๋ค๋ฅด๋๋ผ๋ ๋ด์ฉ์ด ๊ฐ๋ค๋ฉด ๊ฐ์ ํด์ฌ ๊ฐ์ ๊ฐ๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๋๋ค.
objectsํด๋ ์ 2e ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ 2e์์
65efe2a145dda7ee51d1741299f848e5bf752e ์ด๋ฆ์ ํ์ผ์ ์์ฑํ๋ค.
ํด์ฌ ๊ฐ ์์ฑํ๊ธฐ (์ค์ต)
์ ๊ทธ๋ฆผ์ gistory๋ฅผ .git/objects ํด๋ ์์ ์๋ commit ๋ฒ์ ์ ํ์ผ์ด๋ฆ์ด๋ค.
commit ๋ฒ์ ๋ git add์ ์์ฑ๋๋ ํ์ผ๊ณผ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์์ฑ๋๋ค.
ํด๋น ์ปค๋ฐ ํ์ผ ์์๋ ์๋์ ๊ฐ์ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
commit ๋ด tree ํ์ผ์ด๋ฆ
์ด์ ์ปค๋ฐ์ commit ํ์ผ์ด๋ฆ
์์ฑ์
์ปค๋ฐ ๋ฉ์ธ์ง
2.1) ์ค๋
์ ์ฉ์ด์ ์ ๋
์ปค๋ฐ ํ์ผ์ tree ๊ตฌ์กฐ๋ก ํ์ผ๋ค์ ํ๋์ ๋ฒ์ ์ผ๋ก '์ฐฐ์นต'์ฌ์ง์ ์ฐ์ ๊ฒ ๊ฐ์ด ๊ด๋ฆฌํ๊ธฐ
๋๋ฌธ์ ์ค๋
์์ฒ๋ผ ๊ด๋ฆฌํ๋ค๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
2.2) .git/objects ํ์ผ์ ๊ตฌ์ฑ
์์์ ์ ์ ์๋ฏ์ด .git/objects ํด๋ ์์๋ ์ธ์ข
๋ฅ์ ํ์ผ์ด ๋ค์ด์๋ค.
commit, tree, blob ํ์ผ
commit ํ์ผ ์์ tree ํ์ผ์ด tree ํ์ผ ์์ tree or blob ํ์ผ์ด ๋ค์ด์๊ณ
tree ๊ตฌ์กฐ๋ก ๊ด๋ฆฌ๋๋ ๊ฒ์ ์ ์ ์๋ค.
3.1) ์ถ์ ๋ ํ์ผ์ ๋ด์ฉ๋ง ๋ณ๊ฒฝ๋์์ ๋
index ํด๋์์ ํ์ฌ ๊ด๋ฆฌ๋์ด์ง๊ณ ์๋ ํ์ผ์ ํด์ฌ๊ฐ๊ณผ ์์ ๋ ํ์ผ์ด ๊ฐ๊ณ ์๋ ํด์ฌ๊ฐ
์ ์๋ก ๋ค๋ฅธ ๋ด์ฉ์ด๊ธฐ์ ์๋ก ๋ค๋ฅธ ํด์ฌ ๊ฐ์ ๊ฐ๋๋ค. ์ด์ ๊ทผ๊ฑฐํด์ ์ถ์ ๋ ํ์ผ์ ๋ด์ฉ์ด
๋ณ๊ฒฝ๋์์ ๋ git status ๋ช
๋ น์ด๋ฅผ ์น๋ฉด ํ์ผ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ์๋ ค์ค ๊ฒ์ด๋ผ ์๊ฐ๋
๋ค.
์ฌ๋ฏธ์๋ ์ฌ์ค์ ํ์ผ์ ์ด๋ฆ๋ง์ ๋ณ๊ฒฝํ์ ๋ ๊น์ ํ์ผ์ด ์์ ๋์๋ค๊ณ ์ธ์ํ์ง ์๊ณ ๊ธฐ์กด
ํ์ผ์ ์ง์ ๋ค๊ณ ์ธ์ํ๊ณ ๋ฐ๊พผ ์ด๋ฆ์ผ๋ก ์๋ก์ด ํ์ผ์ ์์ฑํ์๋ค๊ณ ์ธ์ํ๋ค.
3.2) ์ปค๋ฐ ํ ๊ฒ์ด ์์ ๋
local, index, ์ต์ commit์์์์ ํ์ผ์ด ๋ชจ๋ ๊ฐ์ผ๋ฉด git status๋ผ๋ ๋ช
๋ น์ด๋ฅผ ์ณค์ ๋
git์ commit ํ ๊ฒ์ด ์๋ค๊ณ ์ธ์ํ๋ค.
git์์ ๋ธ๋์น ๊ฐ๋
์ '๋ถ๊ธฐ'๋ผ๋ ๋จ์ด์์ ๋น๋กฏ๋๋ค. ๋ถ๊ธฐ๋ฅผ ํ๋ ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๊ฒ ์ง๋ง ๋ฐฑ์
์ ํด๋๊ณ ๋ณต์ฌํ ํ์ผ์ ๋ํด์ ์์
์ ํ๊ธฐ ์ํจ์ด๋ค.
git branch ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์ํ ์กฐ๊ฑด์ด ์๋ค.
์ปค๋ฐํ์ผ์ ์์ฑ์ด ๊ทธ ์กฐ๊ฑด์ธ๋ฐ ์ปค๋ฐํ์ผ์ด ์ ์ด๋ ํ๊ฐ๋ผ๋ ์กด์ฌํด์ผ์ง ์๋ก์ด ๊ฐ์ง๋ฅผ ๋ง๋ค ์๊ฐ ์๋ค.
์ปค๋ฐํ์ผ์ด ์๋ค๋ ๊ฐ์ ํ์ ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด sub_master ์ด๋ผ๋ ์ด๋ฆ์ branch๊ฐ ์์ฑ์ด
๋๋ค.
ย ย git branch sub_master
๊ทธ๋ฆฌ๊ณ ๋์ ์ ๋ช
๋ น์ด ๋ฅผ ์
๋ ฅํ๋ฉด branch์ ๋ชฉ๋ก์ด ๋ฌ๋ค. ํ์ฌ master๊ณผ sub_master
์ด๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๊ฐ ๋ฐ ๊ฒ์ด๋ค.
sub_master ๋ธ๋์น๋ master์ ๋ด์ฉ์ ๋ชจ๋ ๋ณต์ฌํด์ ๊ฐ๊ณ ์๋ค.
master branch์์ sub_master ๋ธ๋์น๋ก ์ด๋์ ํ๊ณ ์ถ์ ๋์๋ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ค.
ย ย git checkout sub_master
์ดํ addํ ํ์ผ์ ์์ ์ ํ๊ณ commit์ ํํ git log -all์ ๋ณด๋ฉด sub_master ๋ธ๋์น ์ํ์์
์ถ๊ฐ๋ ์ปค๋ฐ ๋ฉ์ธ์ง๋ฅผ ํ์ธํ ์ ์๊ณ master ๋ธ๋์น์์ ๋ง์ง๋ง์ผ๋ก ์ปค๋ฐํ ๋ฉ์ธ์ง๋ฅผ ํ์ธํ ์
์๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ย ย checkout ์ฌ์ธต์ดํด
์ฌ์ค checkout์ branch์๋ง ์ ์ฉํ ์ ์๋ ๋ช
๋ น์ด๋ ์๋๋ค. ์ ์ฅ์๋ฅผ ์์ฑํ ํ ์ฒซ ๋ฒ์งธ ์ปค๋ฐํ์ผ
์ด ๋ง๋ค์ด์ก์ ๋ HEAD๋ master๋ฅผ ๊ฐ๋ฆฌํค๊ณ master๋ commit ํ์ผ์ ๊ฐ๋ฆฌํค๊ณ ์์ด์ HEAD๋ ๋ธ๋
์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ด๋ค.
git checkout ์ปค๋ฐํ์ผ์ด๋ฆ
์ ๋ช
๋ น์ด๋ฅผ ์คํํด๋ณด๋ฉด HEAD๋ ์ปค๋ฐํ์ผ ์ด๋ฆ์ ๊ฐ๋ฆฌํฌ ์ ์๊ณ (๋ฒ์ ์ ๋๋๋ฆด ์ ์๊ณ ) ์ด๋ HEAD๊ฐ
๋ธ๋์น์์ ๋จ์ด์ก๋ค๊ณ ํด์ 'detached HEAD'๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
ย ย git log --branches --graph --decorate --oneline
ํด๋น ๋ช
๋ น์ด๋ ์ ์ฒด branch์ ๋ชจ์์ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น์ด์ด๋ค. ์์ ๋ช
๋ น์ด๊ฐ ํจ๊ณผ์ ์ด๊ธฐ ์ํด์ ์๋ก
์ด branch๊ฐ ๋ถ๊ธฐ๋๊ณ ๊ฐ branch๊ฐ commit ํ ๋ด์ฉ์ด ํ๊ฐ ์ด์์ด ์์ ๋ ๊ฐ์์ ์ผ๋ก ๋ธ๋์น์
๋ชจ์์ ๋์ํ ํด์ ๋ณด์ฌ์ค๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด 2๊ฐ์ ์ปค๋ฐ์ด ์์ ๋ค sub_master๋ผ๋ ๋ธ๋์น ์ด๋ฆ์ผ๋ก ๋ธ๋์น๊ฐ ์๋ก ์์ฑ๋์๊ณ
๋ธ๋์น๊ฐ sub_master์ธ ์ํฉ์์ 2๋ฒ์ ์ปค๋ฐ์ด ์์๊ณ master ๋ธ๋์น์์๋ ํ๋ฒ์ ์ปค๋ฐ์ด ์์๋ค.
์๋์ ๊ฐ์ด ์๋ก์ด ๋ธ๋์น๊ฐ ์์ฑ๋ ์ดํ ๊ฐ ๋ธ๋์น์์ ์ ์ด๋ ํ๊ฐ ์ด์์ ์ปค๋ฐ์ด ๋ฐ์ํ์ ๋ ์
๋์ ๊ฐ์ ๋๋ญ๊ฐ์ง ํํ์ ๋์์ ์ป์ ์ ์๋ ๊ฒ์ด๋ค.
3. merge
์๋ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด merge๋ ํน์ ์์ (base)์์ ๋๋์ด์ ธ ๊ฐ์์ ๊ฐ์ง๋ก ์์
์ ์งํ
์ ํ ํ ํน์ ์์ ์ ๋๋์ด์ง ๊ฐ์ง๋ฅผ ํ๋๋ก ํฉ์น๋ ๊ฒ์ ์ผ์ปซ๋๋ค.
ย ย base
base๋ ๋ถ๊ธฐ๊ฐ ์ผ์ด๋ฌ์ ๋ ๊ทธ ์ ๊น์ง ๊ณตํต์ผ๋ก ๊ฐ๊ณ ์๋ ๋ถ๋ชจ branch๋ฅผ ์๋ฏธํ๋ค.
3.1 merge
๊ฐ์ ์ด๋ฆ์ ํ์ผ์์ ๋ถ๊ธฐ๋์ด ์๋ก ๊ฒน์น์ง ์์ ๋ถ๋ถ ์์ ํ merge
์์ ๊ทธ๋ฆผ์ ํ์ฌ ํ๋ฒ์ ์ปค๋ฐ ์ดํ o2๋ผ๋ ๋ธ๋์น๋ฅผ ์๋ก ์์ฑํ ํ master ๋ธ๋์น์์ ์์
๋ฐ ์ปค๋ฐ์ ํ ํ o2 ๋ธ๋์น๋ก ์ฎ๊ฒจ ์์
๋ฐ ์ปค๋ฐ์ ํ ํ master ๋ธ๋์น๋ก checkout์ ํ ์
ํฉ์ด๋ค.
๋ถ๊ธฐ๊ฐ ์ด๋ฃจ์ด ์ง๊ธฐ ์ work.txt ๋ผ๋ ๋์ผํ ์ด๋ฆ์ ํ์ผ์ ๊ฐ๊ณ ์์๊ณ ๋ถ๊ธฐ ์ดํ ์ด๋ฃจ์ด์ง
์์
๊ณผ ๊ด๋ จํด์ ์๋ก์ ๋ด์ฉ์ด ๊ฒน์น์ง ์์ ์ํ์์ ์์
์ด ์ด๋ฃจ์ด์ก๋ค. ์๋ฅผ ๋ค๋ฉด ํด๋นํ์ผ
์ apple banana ๋ผ๋ ๋ด์ฉ์ด ์์๋ค๋ฉด master์์ apple์ apples๋ก o2(๋ธ๋์น)์์ bananas
๋ก ํ์ผ ๋ด์ฉ์ ๋ณ๊ฒฝํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ์ ๋ merge๋ฅผ ํ๊ธฐ ์ํด์ ๋ธ๋์น๊ฐ master์ธ ์ํ์์ merge๋ฅผ ํด์ผํ๋๋ฐ ๊ทธ ๋ ๋ช
๋ น์ด๋
์๋์ ๊ฐ๋ค.
ย ย ย ย ย git merge merge_๋์ -> git merge o2
์ ๊ทธ๋ฆผ์ merge ์ดํ์ ์ํฉ์ ๋์ํ๋ก ๋ํ๋ธ ์๋ฃ์ด๋ค.
๊ทธ๋ฆผ์ ์์ธํ ๋ณด๋ฉด o2์ ๋ง์ง๋ง ์ปค๋ฐ์ดํ ์๋ก์ด ์ปค๋ฐํ์ผ์ด ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ ๋ณด์์ผ ํ ๊ฒ์ ๋ถ๊ธฐ ์ดํ ์ด๋ฆ์ด ๊ฐ์ ํ์ผ์ ์๋ก ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ํ ํ
(์์ ํ ๋ถ๋ถ์ด ์๋ก ๊ฒน์น์ง ์์์ ๋) merge ํ์ ๋ git์ด ์์์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ์ฐพ์๋ด
๊ธฐ์กด ๋ด์ฉ์์ ๋ณ๊ฒฝํ ๋ถ๋ถ์ ๋ฐ๊พธ์ด ํ๋์ ํ์ผ์ ๋ง๋ค์ด ๋ธ๋ค๋ ๋ถ๋ถ์ด๋ค.
3.2 merge conflict
๊ฐ์ ์ด๋ฆ์ ํ์ผ์์ ๋ถ๊ธฐ๋์ด ์์ ํ ๋ถ๋ถ์ด ์๋ก ๊ฒน์น ๋
์ํฉ
ํ์ฌ local์ work.txt ํ์ผ์ด ์๊ณ ํด๋น ํ์ผ ์์๋ ๋ด์ฉ์ด ๋ด๊ฒจ ์๋ค.
ํ์ผ์ ๋ง๋ ํ o2๋ผ๋ ๋ธ๋์น๋ฅผ ์๋ก ์์ฑํ์๊ณ o2 ๋ธ๋์น์์ work.txt์ ์ธ๋ฒ์งธ ์ค์ ์์
master ๋ธ๋์น๋ก checkout ํ work.txt์์ ์ธ๋ฒ์งธ ์ค์ ์์ ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ์์ ํ์์ ๋
git merge o2
์ ๋ช
๋ น์ด๋ฅผ ์ํํ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋ฉ์ธ์ง๊ฐ ๋จ๋ฉด์ ๋ณํฉ ์ถฉ๋์ด ๋ฐ์ํ๋ค. ์๋์ ๊ฐ์ ํ์
์ด ๋ฐ์ํ๋ ์ด์ ๋ ๊ฐ์ ์ด๋ฆ์ด ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ์๋ก ๋ค๋ฅด๊ฒ ์์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ ๊ทธ๋ฆผ์ ======= ๋ฅผ ๋ถ๊ธฐ์ ์ผ๋ก ํด์ <<<<<<< ์๋ ๋ถ๋ถ๊ณผ >>>>>>> ์๋ถ๋ถ์ ๋ด์ฉ์ด ์๋ก
๋ฌ๋ผ ํด๋น ๋ถ๋ถ์ด ์ถฉ๋ํ๊ณ ์์์ ๋ํ๋ธ๋ค. ๋ฐ๋ผ์ ํด๋น ์ด๋ค ๋ด์ฉ์ผ๋ก ๊ณ ์น ์ง ์ ํ ํ merge
๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
'<<<<<<<','>>>>>>>','======='์ด ์๋ ์ค์ ์ง์์ค์ผ ํ๊ณ <<<<<<<๊ณผ >>>>>>> ์ฌ์ด์ ์ต์ข
์์ ํ ๋ด์ฉ์ ์ ์ด์ผํ๋ค.
์ ์์
์ ๋ง์น๊ณ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ ๋ ์์
์ด ๋ค์ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
ย ย ย ย ย git add
ย ย ย ย ย git commit
3.3 2way Merge
์ํฉ: here branch์ there branch 2๊ฐ๊ฐ ์๋ค. ๋๊ฐ์ branch๋ฅผ merge ํ ๋ ์๋ก ๊ฒน์น๋ ๋ถ๋ถ์
๋ด์ฉ์ด ๋ฐ์ ํ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ๋๋ค๊ณ ํ์. ๊ทธ๋ฌ์ ๋ merge conflict๊ฐ ๋ฐ์ํ๋ ๊ฒฝ
์ฐ here: A, there: A๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒฝ์ฐ์์ merge conflict ๊ฐ ๋ฐ์ํ๋ค.
3.4 3way Merge
์ด์ ๋ 2way Merge ์๋ ๋ค๋ฅธ 3way Merge๋ฅผ ์ดํด๋ณด์.
์ํฉ: base๋ ๋ถ๊ธฐ์ ์ ์๋ฏธํ๊ณ base๋ฅผ ๊ธฐ์ค์ผ๋ก here ๋ธ๋์น์ there branch์ ๋ด์ฉ์ ์ดํด
๋ณด๋ฉด (H, D, T)์ธ ์ํฉ์ ์ ์ธํ๋ฉด Merge ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ค. ์๋ํ๋ฉด base ๋ผ๋
๊ธฐ์ค์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
base๋ branch๊ฐ ์๋ ๋ถ๊ธฐ์ ์ผ๋ก ๊ฐ๋ผ์ ธ ๋๊ฐ๊ธฐ ์ ์ here์ there์ ๊ณตํต ์กฐ์์ ๊ฐ๋ฆฌ
ํจ๋ค. ๋ฐ๋ผ์ base๋ ๋ณ๊ฒฝ์ ์ฌํญ์ ๋ํ ๋ด์ฉ์ ๊ฐ๊ณ ์๋ ๊ฒ์ธ๋ฐ ๊ธฐ์กด ํ์ผ ๋ด์ฉ์ there
์ here์์ here์๋ง ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ merge๊ฐ ๊ฐ๋ฅํ๊ณ there์๋ง ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ
merge๊ฐ ๊ฐ๋ฅํ๊ณ ๋์ผํ ๋ถ๋ถ์์ ์๋ก ๋ค๋ฅธ ์์ ์ด ์ผ์ด๋ฌ์ ๋ (H, D, T)์ธ ์ํฉ์์
๋ง ์ถฉ๋์ด ๋ฐ์ํ๋ค.
(์ ๋ฆฌ) 2 way Merge์ ๋น๊ตํ์ ๋ 3 way Merge๊ฐ ์์ฌํ๋ ๋ฐ๋ base์์ ์์ํด ๋ถ๊ธฐ์ ์์ ๋
๋์ด ์ ธ์ ์์ ํ ๊ฐ๊ฐ์ ํ์ผ์ merge ํ์ ๋ ์ฆ 3 way Merge ๋ฐฉ์์์ Merge๋ฅผ ํ์ ๋
๋ณด๋ค ๋ง์ ์ํฉ์ coverํ ์ ์๋ค๋ ์ ์ด๋ค.
๐พ Back up
hosting
์ธํฐ๋ท์ ์ฐ๊ฒฐ๋์ด์ ์๊ฒฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์๋ฒ๋ฅผ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์๋ฏธํ๋ค.
git hosting
๋ก์ปฌ ์ ์ฅ์์ ๋ฒ์ ์ ์
๋ก๋ ํ ์๊ฒฉ์ ์ฅ์๋ฅผ ์๋ํด์ฃผ๋ ์๋น์ค๋ฅผ ์๋ฏธํ๋ค.
git push
์ง์ญ ์ ์ฅ์์ ์๋ ๋ฒ์ ์ ์๊ฒฉ์ ์ฅ์์ ์ฌ๋ฆฌ๋ ํ์
์ํฉ: ๊นํ์ ์จ๋ผ์ธ ์ ์ฅ์๋ฅผ ๋ง๋ค์๋ค๊ณ ๊ฐ์ ํ์. ์๊ฒฉ์ ์ฅ์์ ์ฃผ์๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ์ฐ๊ฒฐํ ํ
๋ก์ปฌ ํ๊ฒฝ์์ ์์
ํ ๋ด์ญ์ pushํ๋ ค๊ณ ํ ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
-b <new_branch>
Create a new branch named <new_branch> and start it at <start_point>; see git-branch(1) for
details.
git clone
์๊ฒฉ ์ ์ฅ์์ ์๋ ํ์ผ์ ์ง์ญ ์ ์ฅ์๋ก ๋ณต์ฌํ๋ ํ์
git pull
์๊ฒฉ ์ ์ฅ์์ ์๋ ํ์ผ์ ๋ก์ปฌํ๊ฒฝ์ผ๋ก ๊ฐ์ ธ์ ๊ธฐ์กด ๋ฒ์ ์ ์๊ฒฉ ์ ์ฅ์์ ์๋ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ด
ํ๋ ํ์