KennethanCeyer / Tutorial Git
Projects that are alternatives of or similar to Tutorial Git
์ด๋ป๊ฒ ๊น์ ์ฌ์ฉํ๋์ง ๋น ๋ฅด๊ฒ ์์๋ด ์๋ค
Quick learn How to use the Git
๊ฐ์ด๋ ํ์ด์ง์์ ๋ณด๊ธฐ
๐ ๋ฐ์์์์ ๋ค๋ค
- ์ฝ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์์์๊ฐ
15๋ถ
- ๋ค ์ธ์ฐ๊ธฐ ์ํ์ฌ ๋ฐ๋ณต ํ์ต์ด ํ์ํ ํ์
3๋ฒ
๐ณ ๋๊ฐ ์ฝ์ด์ผ ํ ๊น์
- ๊ฐ๋ฐ ํ์ฌ์ ์ผํ๋ Git์ ๋ชจ๋ฅด์๋ ๊ฐ๋ฐ์.
- Git์ ๋์ ํ ์ง ๋ง์ค์ด์๋ ๊ด๋ฆฌ์, ๋ด๋น์.
- 2๋ช ์ด์์ ํ์ ์ ํ๋ ์คํํธ์ ๋ด๋น์, ์ธ๋ ๊ฐ๋ฐ์๋ ๋์ ์ ๊ณ ๋ คํด์ฃผ์ธ์.
๐ ์์ํ๋ฉฐ
๊น์ ์ ์ฌ์ฉํ์ฃ ?
-
๋น ๋ฅธ ํ์ ํ๊ฒฝ ์กฐ์ฑ
-
๋๊ฐ, ์ธ์ , ๋ฌด์์, ์, ์ด๋ป๊ฒ ์์ ํ๋์ง ์ฝ๋๋ฆฌ๋ทฐ๊ฐ ๊ฐ๋ฅ.
-
์ด์ํธ๋์ปค (Issue Tracker) ์ง์.
-
๊นํ (GitHub)์ ์ด์ฉํ์ฌ ์์ ์ git์ ์ฝ๊ฒ ๊ณต์ ๊ฐ๋ฅ.
-
์ง์์ ์ธ ํตํฉ (Continuous Integration) ์ง์.
-
Visual Studio, Jetbrains IntelliJ, Android Studio ๋ฑ ๋๋ถ๋ถ์ IDE์์ git ์ฐ๋ ์ ๊ณต.
-
์์ฝ: ํ์ ์ ์ํด์, ๊ฐ๋ฐ์์ ์ฌ์ฉ, ๋๋ช ์ด์์ด ๋๋ํ๊ฒ ์์ค๋ฅผ ๊ณต์ ํ๊ณ ๊ฐ๋ฐํ ์์ค๋ค์ ํฉ์น์ธ์!
๋๋์ฒด ๊นํ(GitHub)์ด ๋ญ์ผ!?
- ๋์์ด๋์๊ฒ๋ Dribbble, ๋ฐ์ดํฐ์ฌ์ด์ธํฐ์คํธ์๊ฒ๋ Kaggle์ด ์๋ฏ์ด ๊ฐ๋ฐ์์๊ฒ๋ ๊นํ (Github)์ด ์์ต๋๋ค.
- ์ฌ๋ฌ๋ถ์ด ํด๊ทผ๊ธธ์ ํ์ด์ค๋ถ์ผ๋ก ๊ธ์ ๋๋ฌ๋ณด๋ฉฐ ์ข์์ ํ๋ฏ์ด ๊ฐ๋ฐ์๋ค์ ๊นํ์ผ๋ก ์คํ(star)๋ฅผ ๋ ๋ฆฝ๋๋ค.
์ง์ง ํด๊ทผ๊ธธ์ ๊นํ ๋ค์ด๊ฐ๋ ๊ฐ๋ฐ์๊ฐ ์๋ค๋ฉด ๐ฑ- ๊นํ(Github)๋ ๊น(Git)์ ๋ค๋ฅธ ๊ฒ์ ๋๋ค. ๊นํ์ด ๊น์ ๊ธฐ๋ฐ์ผ๋ก ์จ๋ผ์ธ์ผ๋ก ์๋น์คํ๋ ํํ์ ๋๋ค.
- ์ฝ๊ฒ ์๊ฐํด์ Microsoftยฎ Office๋ฅผ Office 365๋ก ์๋น์คํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค ์๊ฐํด์ฃผ์ธ์.
๊น์ด ์ด๋ค ์ญํ ์ ํ๋๊ฑด๊ฐ์?
- ์์ค ๋ณํฉ (merge, rebase)
- ์์ค ๋ฆฌ๋น์ ๊ด๋ฆฌ (reset, commit, branch)
- ์์ค ๋ฆด๋ฆฌ์ฆ (push)
- ์์ค ํ๊น (tag)
- ์์ค ๋ณ๊ฒฝ์ฌํญ ๊ฒํ (diff, log)
๊น์ ์ด๋์์ ์ง์ํ๋์?
- ์๋์ฐ์ฆ (Windows)
- ๋งฅ (OS X)
- ๋ฆฌ๋ ์ค (Ubuntu, CentOS, Redhat, Debian, etc)
- ์ ๋์ค (FreeBSD, Solaris, etc)
๐ง ์ค์
- ์ฒ์ ์์ํ๋ ๊ฒ์ด๋ผ๋ฉด git์ config ๊ณผ์ ์ ์งํํด์ผํฉ๋๋ค.
-
git config
๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๊ณ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค.
$ git config --global user.name "Kenneth"
$ git config --global user.email "[email protected]"
- ๊น์ ์ด๊ธฐ์
git init
์์ ์ ์งํํฉ๋๋ค - ํน์ฌ๋ GitHub์์ ํด๋ก ์ ๋ฐ์๊ฒฝ์ฐ ์ด ์์ ์ ํ์ํ์ง ์์ต๋๋ค.
- ์๋ ์ํ ์ฝ๋๋ฅผ ํ์ธํด์ฃผ์ธ์.
$ git init
-
git init
์ ํ์ จ์ผ๋ฉด git ๋ฆฌ๋ชจํธ๋ฅผ ์ค์ ํ์ค ์ ์์ต๋๋ค. - git ๋ฆฌ๋ชจํธ๋ git์ ์๊ฒฉ์ ์ฅ์์ ์ ์ฅํ๋ ์ค๋ํฌ์ธํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
$ git remote add origin https://github.com/KennethanCeyer/tutorial.git
- git ๋ฆฌ๋ชจํธ URL์ ์ด์ฉํ์ฌ ์๊ฒฉ์ ์ฅ์์ ์ ์ฅ๋ ํ์ผ์ ์ปดํจํฐ๋ก ๋ณต์ฌํด์ฌ ์ ์์ต๋๋ค.
- ์ด๋
git clone
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌ๋ฅผ ์์ํฉ๋๋ค.
$ git clone https://github.com/KennethanCeyer/tutorial.git
-
git clone
์ ํตํด ์๊ฒฉํ์ผ์ ๋ณต์ฌํด์ค๋ฉด,origin
์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ก ํด์จ ๋ฆฌ๋ชจํธ URL์ด ์ ์ฅ๋์์ต๋๋ค.
๐ SSH
- git ์ฐ๊ฒฐ์ ๋ณด๋ค ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์๋
SSH Key
๋ฑ๋ก์ ๊ถ์ฅํฉ๋๋ค. - ์ด๋ฏธ ์กด์ฌํ๋ ๋ฌธ์๋ก SSH ์์ฑ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์๊ฑฐ๋ ์๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ฃผ์๋ฉด ๋ฉ๋๋ค.
- ์ฐ์
ssh-keygen
๋ช ๋ น์ด๋ก SSH Key๋ฅผ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
- SSH Key๋ฅผ ์์ฑํ์
จ์ผ๋ฉด
~/[์ฌ์ฉ์ ํด๋]/.ssh/
์ ํ์ผ์ด ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
- ์์ฑํ ํค ์ค
id_rsa.pub
๋ GitHub์ ๋ฑ๋กํด์ฃผ์ ์ผ ํฉ๋๋ค. - ์๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ผํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
- GitHub ํํ์ด์ง๋ฅผ ์ ์ํ์ ์ ๋ก๊ทธ์ธ์ ํด์ฃผ์ธ์.
-
Profile
์คSettings
๋ฉ๋ด๋ฅผ ๋๋ฌ์ฃผ์ธ์ (์๋ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.)
-
Settings
ํ๋ฉด ์ค ์ฐ์ธก ์ฌ์ด๋๋ฉ๋ด์์SSH and GPG keys
๋ฅผ ํด๋ฆญํด์ฃผ์ธ์.
-
SSH Keys
ํ๋ฉด์์New SSH key
๋ฒํผ์ ์ฐพ์ ํด๋ฆญ ํด์ฃผ์ธ์.
- ์
๋ ฅ ํ๋ฉด์ ์๊น์ ์
id_rsa.pub
์ ๋ด์ฉ์ ์ ๋ ฅํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Q. SSH ์ค์ ์ ํด๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌผ์ด๋ด์!
์ ์ ์ ๋ณด์์ Use SSH๋ฅผ ํด๋ฆญํด SSH ์ ์ ์ ๋ณด๋ฅผ ์ด์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
์ด๋, git remote set-url
๋ช
๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ์กด์ ์๊ฒฉ์ง ์ฃผ์๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
# ํน์ HTTPS ์ฃผ์๋ฅผ Remote URL๋ก ์ฌ์ฉํ๋์ง ์ฒดํฌํด์ฃผ์ธ์.
# Remote URL์ ssh ํฌ๋งท์ ์ฌ์ฉํด์ฃผ์
์ผ ssh ์ธ์ฆ์ ํตํด ์์ด๋/๋น๋ฐ๋ฒํธ ์
๋ ฅ์ ๋์ด๊ฐ์ค ์ ์์ต๋๋ค.
# origin์ Remote URL ๋ณ๊ฒฝ๋ฐฉ๋ฒ.
$ git remote set-url origin [email protected]:KennethanCeyer/tutorial-git.git
# origin์ Remote URL์ด ์ ๋๋ก ๋ณ๊ฒฝ๋ฌ๋์ง ์ฒดํฌํด์ฃผ์ธ์.
$ git remote show origin
๐ ์์ค ๊ธฐ๋ก
- ์์ค๋ฅผ ์
๋ก๋ ํ๊ธฐ ์ํด์๋
git add
๋ช ๋ น์ด๋ฅผ ์ด์ฉํฉ๋๋ค. - ์ํ์ ์ฐธ๊ณ ํ์ธ์
$ git add .
- ignore ํ์ผ์ด๋, ์ญ์ ํ ํ์ผ ์ด๋ ฅ๊น์ง ์ปค๋ฐ์ ํ์ค ๊ฒฝ์ฐ,
-f
์ต์ ์ ์ด์ฉํฉ๋๋ค.
$ git add . -f
-
git remote show origin
์ ํตํด origin์ ๋ฆฌ๋ชจํธ ์ฃผ์๊ฐ ์ ๋ฑ๋ก๋์๋์ง ํ์ธํด๋ณด์ธ์.
โ๏ธ ์์ค ์ปค๋ฐ
- ์์ค๋ฅผ ์ปค๋ฐํ์๋ฉด
staged
์ํ์ ํ์ผ์ด ํ์คํ ๋ฆฌ๋ก ๊ธฐ๋ก๋๊ณ ์ ์ฌ๋ฉ๋๋ค. - ํ์ผ ์ถ์ ์ํ์ ๊ฒฝ์ฐ
git status
๋ช ๋ น์ ์ด์ฉํด์ ํ์ธํฉ๋๋ค.
$ git status
-
git add
์ดํgit status
๋ฅผ ํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ด ๋์ต๋๋ค.
- Staged ์ํ์ ํ์ผ์ ์์ง ๊ธฐ๋ก๋ ์ํ๊ฐ ์๋๋๋ค.
- ํ์ผ์ ๊ธฐ๋ก์ ์ํด์๋
์ปค๋ฐ
์์ ์ด ํ์ํฉ๋๋ค. -
git commit
๋ช ๋ น์ ํตํด Staged ์ํ์ ํ์ผ์ ์ปค๋ฐํ ์ ์์ต๋๋ค.
-
-m
์ต์ ์ ์ด์ฉํ์ฌ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. - ์ค์๋ก ์ปค๋ฐ์ ํ์ฌ, ๋ค์ ์ปค๋ฐ์ ํ ๊ฒฝ์ฐ ์ปค๋ฐ์ ๋ฎ์ด์์ธ ์ ์์ต๋๋ค. ์ด๋
--amend
์ต์ ์ ์ด์ฉํฉ๋๋ค.
$ git add *
$ git commit -m "UI ๋ ์ด์์ ์ด์ ์์ ."
# ์์ ์ฌํญ ๋ฐ์
$ git add *
$ git commit -m "UI ๋ ์ด์์ ์ด์ ์์ ๋ฐ ๊ด๋ฆฌ์ ๋ฒจ๋ฆฌ๋ฐ์ด์
์ถ๊ฐ." --amend
๐ ์์ค ์ ๋ฐ์ดํธ
- ์๋๋ฐฉ์ด ์ปค๋ฐํ ํ์ผ์ ๋ช ๋ น์ด๋ฅผ ํตํด์ ์ง์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ ์ผ ๋๊ธฐํ๊ฐ ๋ฉ๋๋ค.
- ์ด๋ ์ฌ์ฉํ๋ ๋ช
๋ น์ด๋
git pull
๊ณผgit fetch
๊ฐ ์์ต๋๋ค.
# master ๋ธ๋์น๋ฅผ pullํ์ฌ ์
๋ฐ์ดํธ
$ git pull origin master
# master ๋ธ๋์น๋ฅผ fetchํ์ฌ ์
๋ฐ์ดํธ
$ git fetch origin master
-
pull
๊ณผfetch
์ ์ฐจ์ด์ ์merge
์์ ์ ํ๋๋ ์ํ๋๋๋ก ๋๋์ด์ง๋ฉฐ. -
pull
์fetch
+merge
์์ ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
๐ ์์ค ๋ณต์
- ์ฌ๋ฌ๋ถ์ด git์ ์ฐ๋ ์ด์ ์ค์ ์ค์ํ ๋ถ๋ถ์ ์ฐจ์งํ๋ ์์ญ์ ๋๋ค.
- ์ ์์ ์ผ๋ก ์ปค๋ฐ๋ ํ์คํ ๋ฆฌ๋, ๋ฆฌ๋น์ ์ผ๋ก git์ ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์ค์๋ก ์๋ชป ์์ ํ์๊ฑฐ๋, ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ์ฌ ์ ์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ๋ถ์ ์์ ๋ฒ์ ์ผ๋ก ๋ฆฌ์ ํ์ค ์ ์์ต๋๋ค.
- ๋ฆฌ์
์
git reset
๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
$ git reset HEAD^ --soft
-
git reset
๋ค์ ์ธ์๋ก๋ ๋๋๋ฆฌ๋ ๋ฒ์ ์ ์์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. -
ํ์ฌ์์น(HEAD)๋ฅผ ๊ธฐ์คํ์ฌ ์๋์ ์ธ ์์น๋ฅผ ์ค์ ํ๊ฑฐ๋, ํน์ ๋ฒ์ ๋ฆฌ๋น์ ๊ณ ์ ์ ํด์๊ฐ์ ์ง์ ํฉ๋๋ค.
-
HEAD๋ฅผ ํ์ธํ์๊ณ ์ถ์ผ๋ฉด
git reflog
๋ช ๋ น์ ์ด์ฉํฉ๋๋ค. -
git reset
์ ์ต์ ์ค ๋ฆฌ์ ํน์ฑ์ ์ ํ๋--soft, --hard, --mixed
์ต์ ์ด ์์ต๋๋ค. -
์ ์ต์ ์ ์๋์์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
-
--soft
๋ ์ฝํํน์ฑ์ ๋ฆฌ์ ์ ๋๋ค, ๋๋๋ฆด ๋ ๊ธฐ์กด์ ์ธ๋ฑ์ค์ ์ํนํธ๋ฆฌ๋ฅผ ๋ณด์กดํฉ๋๋ค. -
--hard
๋ ๊ฐํํน์ฑ์ ๋ฆฌ์ ์ ๋๋ค, ๋๋๋ฆด ๋ ๊ธฐ์กด์ ์ธ๋ฑ์ค์ ์ํนํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฝ๋๋ค. -
--mixed
๋ ์ค๊ฐํน์ฑ์ ๋ฆฌ์ ์ ๋๋ค, ๋๋๋ฆด ๋ ๊ธฐ์กด์ ์ธ๋ฑ์ค๋ ๋ฒ๋ฆฌ๊ณ ์ํนํธ๋ฆฌ๋ฅผ ๋ณด์กดํฉ๋๋ค. -
๋๋๋ฆฌ๋ ์์น์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ํ์ ์ด ์์ต๋๋ค.
# ๋ฐ๋ก ์ด์ ๋จ๊ณ๋ก ์ธ๋ฑ์ค์ ์ํนํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋ฆฌ์
.
$ git reset HEAD^ --hard
# ๋ฐ๋ก ๋๋ฒ์งธ ์ ๋จ๊ณ๋ก ์ธ๋ฑ์ค์ ์ํนํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋ฆฌ์
.
$ git reset HEAD~2 --hard
# ํน์ ๋ฆฌ๋น์ ์ ๊ธฐ๋ก์ผ๋ก ์ธ๋ฑ์ค๋ ๋ฒ๋ฆฌ๊ณ ์ํนํธ๋ฆฌ๋ฅผ ๋ณด์กดํ์ฌ ๋ฆฌ์
.
$ git reset 991ee8c --mixed
๐ฑ ๋ธ๋์น
- ๋ธ๋์น๋ ํ๊ตญ๋ง๋ก ๊ฐ์ง(branch)์ ๋๋ค.
- git์์๋ ๋ง์น ๊ฐ์ง๋ฅผ ํผ์น๋ฏ ํ๋์ ๊ทผ๋ณธ์์ ์ฌ๋ฌ ๊ฐ๋๋ก ์ชผ๊ฐ์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ์ถ์ฒ StackOverflow
-
branch์ ํน์ง์ ์๋์ ๊ฐ์ต๋๋ค.
-
๊ธฐ๋ณธ์ master ๋ธ๋์น๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ํ์๋ก ์ ๊ณต๋๋ ๋ธ๋์น์ด๋ค.
-
์๋ก๋ค๋ฅธ ๋ธ๋์น๋ค์ ๊ฐ์ ์กฐ์์ ๊ฐ์ง๊ณ ์๋ค.
-
๋ธ๋์น๋ฅผ ์๋ก ๋ง๋์ ๋ค๋ฉด
git branch [๋ธ๋์น๋ช ]
์ผ๋ก ์์ฑํฉ๋๋ค. -
์๋ ๋ช ๋ น๋ผ์ธ์์๋ new๋ผ๋ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค.
$ git branch new
-
master ๊ธฐ์ค์ผ๋ก new๋ฅผ ๋ธ๋์น(๊ฐ์ง์น๊ธฐ)ํ๋ฉด master์ ๋๊ฐ์ ์์ค์ฝ๋๊ฐ new์๋ ์ ์ฉ๋ฉ๋๋ค.
-
ํ์ง๋ง ์ด ์ดํ๋ก new์์ ์ฝ๋๋ฅผ ์์ ํ๋ฉด, master์ new๋ ์๋ก ๋ค๋ฅธ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ผ์ง๋๋ค.
-
์์ฑ๋ new ๋ธ๋์น๋ก ์ ์ํ๊ธฐ ์ํด์๋
git checkout [๋ธ๋์น๋ช ]
์ ์ด์ฉํฉ๋๋ค.
$ git checkout new
- ์์ฑ๊ณผ์ ๊ณผ ๋ธ๋์น ์ด๋๊ณผ์ ์ ๋์์ ํ๊ณ ์ ํ๋ฉด
git checkout
์-b
์ต์ ์ ์ด์ฉํฉ๋๋ค.
# ๋ธ๋์น new๋ฅผ ์์ฑ๊ณผ ๋์์ ์ฒดํฌ์์.
$ git checkout -b new
- ์์ฑํ ๋ธ๋์น๋ ํ์ฌ ๋ก์ปฌ์ ์ ์ฅ๋์ด ์์ต๋๋ค.
- ํ์ ์์ ์์๋ ์์ฑํ ๋ธ๋์น๋ฅผ ์๊ฒฉ ์ ์ฅ์์ ๋ฑ๋กํด์ฃผ์ด์ผ ํฉ๋๋ค.
- ์ด๋๋
git push [๋ธ๋์น๋ช ]
์ ์ด์ฉํฉ๋๋ค.
$ git push origin new
- ๋ธ๋์น ์์ฑ ๋ฐ ๋ฑ๋ก์ ๊ณผ์ ์ ์๋ ํ๋ฉด๊ณผ ๊ฐ์ต๋๋ค.
- ๋ธ๋์น์ ์ญ์ ๋
git branch
๋ช ๋ น์์-d
์ต์ ์ ์ฌ์ฉํฉ๋๋ค.
- ์ญ์ ๋ ๋ธ๋์น ๋ํ ์๊ฒฉ ์ ์ฅ์์ ๋ฐ์์ ํด์ผํฉ๋๋ค.
- ์ด๋ ๋ธ๋์น ๋ช ์์ ์ฝ๋ก (:)์ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ ์ด ์ ์ฃผ์ํด์ฃผ์ธ์.
๐จ ์์ค ๋ณํฉ
- ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์์ ๊ฐ์ฅ ์ค์ํ ๋จธ์ง์ ๋ฆฌ๋ฒ ์ด์ค ๋ฑ์ ๋ณํฉ ๊ธฐ๋ฒ์ ๋๋ค.
- ์๋ก ๋ค๋ฅธ ๋ธ๋์น์์ ์๋ก ๋ค๋ฅธ ์ฝ๋๊ฐ ๊ฐ๋ฐ๋์๊ณ , ์ค์ ๋ฐฐํฌ์์ ์ด๋ฅผ ํฉ์ณ์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- ๋ณํฉ ๋ฐฉ์์์๋ ํฌ๊ฒ
git merge
์git rebase
๊ฐ ์กด์ฌํฉ๋๋ค. - ๋จธ์ง ๋ฐฉ์๊ณผ ๋ฆฌ๋ฒ ์ด์ค ๋ฐฉ์์ ์ฐจ์ด๋ ์๋ ์ด๋ฏธ์ง๋ฅผ ํ์ธํด์ฃผ์ธ์.
์ด๋ฏธ์ง ์ถ์ฒ http://git.mikeward.org/
- ์๋๋ ๋จธ์งํด์ผ ํ๋ ์ํฉ์ ๊ตฌํํด๋ดค์ต๋๋ค.
-
master
์์sub
branch๊ฐ ์์ฑ๋์์ผ๋ฉฐ, master ๋ธ๋์น์์ sub ๋ธ๋์น๋ฅผ ๋จธ์งํ๊ณ ์ ํฉ๋๋ค. - ํ์ผ ๊ตฌ์ฑ์ ์๋์ ๊ฐ์ต๋๋ค.
* master -> some_file.txt์ ๋ด์ฉ
* 1๋ฒ์งธ ๋จ๊ณ HEAD
I'm a file.
* sub -> some_file.txt์ ๋ด์ฉ
* 2๋ฒ์งธ ๋จ๊ณ HEAD (์ต์ )
I'm a file.
Inserted new line from the sub branch.
$ git checkout -f master
$ git merge sub
# ํ์ฌ ๋ธ๋์น master, ๋์ ๋ธ๋์น sub.
# master์์ sub๋ฅผ ๋จธ์งํฉ๋๋ค.
# HEAD -> master
# sub -> sub
- ๋จธ์ง ์ดํ master์์ ํ์ผ์ ๋ณด๋ฉด, ์๋์ ๊ฐ์ ๋ด์ฉ์ ์ป์ต๋๋ค.
* merge ์ดํ master -> some_file.txt
I'm a file.
Inserted new line from the sub branch.
๐ญ ์ถฉ๋๊ณผ ํด๊ฒฐ
- git์ผ๋ก merge, rebase ์ํ์ ์ถฉ๋(conflict)๊ฐ ๋ฐ์ ํ ์ ์์ต๋๋ค.
- ์ด๋ ๊ฐ์ ์กฐ์์ ๊ธฐ์ค์ผ๋ก, ์๋ก ๋ค๋ฅธ ๋๊ฐ์ ๋ธ๋์น๊ฐ ๊ฐ์ ์์ค์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ฐ์ํฉ๋๋ค.
* master -> some_file.txt์ ๋ด์ฉ
Apple
- ์๋
master
๋ธ๋์น์ some_file.txt์ ๋ด์ฉ์ด๋ค. - ์๋๋ ํด๋น ๋ธ๋์น๋ฅผ ๋ณต์ ํ
sub
๋ธ๋์น์ด๋ฉฐ, ๋ณต์ ์ดํ ํ๋ฒ ๋ด์ฉ์ ์์ ํ์์ต๋๋ค.
* sub -> some_file.txt์ ๋ด์ฉ
* 2๋ฒ์งธ ๋จ๊ณ HEAD
Banana
- ์ดํ master์์๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ฌ ๋ฒ์ ์ ์ ๋ฐ์ดํธ ํฉ๋๋ค.
* master -> some_file.txt์ ๋ด์ฉ
* 2๋ฒ์งธ ๋จ๊ณ HEAD(sub๋ ๋จ๊ณ๊ฐ ๊ฒน์นจ)
Strawberry
- ๋ ๋ชจ๋ ๋ฒ์ ์ด ๊ฐ์ผ๋ ๊ฐ์ ๋ผ์ธ์์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ์ต๋๋ค.
- ์ด ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
- ์ถฉ๋์ด ๋ฐ์ํ some_file.txt๋ฅผ ์ด์ด๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ ๋ณด์ค ์ ์์ต๋๋ค.
* ๋จธ์ง ์ดํ master -> some_file.txt (์ถฉ๋)
<<<<<<< HEAD
Strawberry
=======
Banana
>>>>>>> sub
- ์ฌ๊ธฐ์
HEAD
๋ ํ์ฌ ๋ธ๋์น(master)๋ฅผ ์๋ฏธํฉ๋๋ค. - HEAD์ sub์ ๊ฐ๊ฐ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ ์๋๋ฐ ๊บฝ์ (<, >), ์ดํ(=)๊ธฐํธ๊ฐ ์๋๋ก ๋ฌธ์ฅ ํ๋๋ฅผ ์ ํํด์ ๋ฐ์ํด์ฃผ์ด์ผ
- ์ถฉ๋์ด ํด๊ฒฐ ๋ ์ ์์ต๋๋ค.
- ์ฌ๊ธฐ์๋
master
๋ธ๋์น์ Strawberry๋ฅผ ์ ํํ์ฌ ์ถฉ๋์ ํด๊ฒฐํ๊ฒ ์ต๋๋ค.
* ๋จธ์ง ์ดํ master -> some_file.txt (์์ )
Strawberry
- ์์ ์ด ๋์๋ค๋ฉด ๋จธ์ง ํด๊ฒฐ์ ์ํด
git add
์git commit
์ผ๋ก ์ถฉ๋(conflict)์ ํด๊ฒฐํ์ธ์.
$ git add *
$ git commit -m "Solved the conflict issue."
๐ ๋ผ์ด์ผ์ค
์ด ๊ฐ์ด๋๋ Creative Commons Attribution 4.0 (CCL 4.0)์ ๋ฐ๋ฆ ๋๋ค.