Deep
Git์ 3๊ฐ์ง ๊ณต๊ฐ

Working directory
untracked:add๋ ์ ์๋ ํ์ผ ๋๋.gitignore๋ ํ์ผtracked:add๋ ์ ์๊ณ ๋ณ๊ฒฝ๋ด์ญ์ด ์๋ ํ์ผgit add๋ช ๋ น์ด๋กStaging area๋ก ์ด๋
Staging area
์ปค๋ฐ์ ์ํ ์ค๋น ๋จ๊ณ
์) ์์ ์ ์ํด ์ ํ๋ ํ์ผ๋ค
git commit๋ช ๋ น์ด๋กRepository๋ก ์ด๋
Repository
์ปค๋ฐ๋ ์ํ์ ํ์ผ๋ค์ด ๋ชจ์ฌ์๋ ์ ์ฅ์
.git directory๋ผ๊ณ ๋ ๋ถ๋ฆผcommit๋์ด ๋ ํฌ์งํ ๋ฆฌ์ ๋ค์ด๊ฐ ํ ์์ ์ฌํญ์ด ๋ฐ์ํ๋ฉดtrackedํ์ผ๋ก์จ ์คํ ์ด์ง์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
์ด ๊ฐ๋ ์ ๊ทธ๋ฆ์ผ๋ก ๋น์ ํ๋ฉด ์ด๋ ๋ค.
untracked
์๊ธฐ์ธ์ฒ๊ธฐ์ ๋ค์ด๊ฐ ๋ณธ ์ ์ด ์๊ฑฐ๋ ์๊ธฐ์ธ์ฒ๊ธฐ ์ฌ์ฉ์ด ๋ถ๊ฐ(ignore)ํ ๊ทธ๋ฆ
tracked
์๊ธฐ์ธ์ฒ๊ธฐ์ ๋ค์ด๊ฐ ๋ณธ ์ ์ด ์๊ณ ์๊ธฐ์ธ์ฒ๊ธฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ทธ๋ฆ
add
์๊ธฐ์ธ์ฒ๊ธฐ์ ๋ฃ๋ ํ์
staging area
์๊ธฐ์ธ์ฒ๊ธฐ ์(์ ๋ค์ด๊ฐ ์ํ)
commit
์ธ์ฒ(์๊ธฐ์ธ์ฒ๊ธฐ ๊ฐ๋)
repository
์ธ์ฒ๋์ด ๊นจ๋ํด์ง ์ํ
ํ์ผ ์์
๊ทธ๋ฆ์ด ์ฌ์ฉ๋์ด ์ด๋ฌผ์ง(์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ)์ด ๋ฌป์
working directory
์ธ์ฒ๋์ด์ผ ํ๋ ์ํ
tracked๊ฐ ๋๋ค๋ ๊ฑดGit์ ๊ด๋ฆฌ๋์์ ์ ์์ผ๋ก ๋ฑ๋ก๋จ์ ์๋ฏธํ๋ค.์๋ก ์ถ๊ฐ๋๋ ํ์ผ์ ๋ฐ๋์
addํด์ค์ผ๋ก์จ, ํด๋น ํ์ผ์ดtracked๋ ๊ฒ์์ ๋ช ์ํด์ผ ํ๋ค.Git์ด ์ ํ์ผ๋ค์ ๋ฌด์กฐ๊ฑด ๋ค ๊ด๋ฆฌํด๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์ง
ํ์ผ ์ญ์
git rm (ํ์ผ ์ด๋ฆ)๋ง์ฐ์ค๋ก ์ง์ ์ญ์ ํ๋ ๊ฒ๊ณผ ์ฐจ์ด๋ ์ง์ ํ๋ ๊ฒ์ ํ์ผ์ ์ญ์ (์์
)๊ฐ Working directory์ ์๊ณ add๋ช
๋ น์ด๋ก Staging area๋ก ์ด๋ํด์ผ ํ๋ค.
rm ๋ช
๋ น์ด๋ก ํ๋ฉด ํ์ผ์ ์ญ์ (์์
)๊ฐ ๋ฐ๋ก Staging area๋ก ์ด๋ํ๋ค.
ํ์ผ ์ด๋(์ด๋ฆ ๋ณ๊ฒฝ)
git mv (๊ธฐ์กด ํ์ผ ๋ช
) (์๋ก์ด ํ์ผ ๋ช
)๋ง์ฐ์ค๋ก ์ง์ ํ๋ ๊ฒ๊ณผ ์ฐจ์ด๋ rm๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ค.
ํ์ผ์
Staging area์์Working directory๋ก ๋๋๋ฆฌ๊ธฐ
git restore --staged (ํ์ผ๋ช
)์ด ๋ช
๋ น์ Staging area์์ ํด๋น ํ์ผ์ ์ ๊ฑฐํ์ฌ ์ด์ ์ปค๋ฐ ์ํ๋ก ๋๋๋ฆฐ๋ค. ๋จ Working directory์์๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋จ์์๋๋ค.
์ด๋ --staged์ต์
์ ์๋ตํ๋ฉด Working directory์์๋ ํด๋น ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ด ์ ๊ฑฐ๋๋ค. ์ฆ Staging area์ Working directory์์ ๋ชจ๋ ์ด์ ์ปค๋ฐ ์ํ๋ก ๋๋์๊ฐ๋ค.
์ ๋ฆฌํ๋ฉด ํ์ผ์ Staging area์์ Working directory๋ก ๋๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด --staged์ต์
์ ์ฌ์ฉํ๊ณ , ์ต์
์ ์๋ตํ๋ฉด Working directory์์๋ ๋ณ๊ฒฝ์ฌํ์ด ์ ๊ฑฐ๋๋ค.
git reset์ 3๊ฐ์ง ์ต์
--soft:Repository์์Staging area๋ก ์ด๋--mixed(default) :Repository์์Working directory๋ก ์ด๋--hard: ์์ ์ฌํญ ์์ ํ ์ญ์
Git์ HEAD
HEAD๋? - ํ์ฌ ์ํ ๋ธ๋์น์ ๊ฐ์ฅ ์ต์ ์ปค๋ฐ
HEAD๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด์ ์ปค๋ฐ์ผ๋ก ์ด๋ํ๊ธฐ
git checkout HEAD^^ ๋๋ ~์ ๊ฐ์๋งํผ ์ด์ ์ผ๋ก ์ด๋ํ๋ค.
์) git checkout HEAD^^^ : ์ด์ ์ผ๋ก 3๊ฐ ์ด๋, git checkout HEAD~5 : ์ด์ ์ผ๋ก 5๊ฐ ์ด๋
์ปค๋ฐ ํด์๋ฅผ ์ฌ์ฉํด์๋ ์ด๋ํ ์ ์๋ค. -> git checkout (์ปค๋ฐ ํด์)
์ด๋์ ํ ๋จ๊ณ ๋๋๋ฆฌ๊ธฐ
git checkout -Ctrl Z์ ๋น์ท
์ด์ ์ผ๋ก checkout๋ ์ํ์์ ํฐ๋ฏธ๋๋ก ์ด๋ค ๋ธ๋์น์ ์๋๋ฅผ ํ์ธํด๋ณด๋ฉด ์์ฑํ ์ ์๋ ์ต๋ช
์ ๋ธ๋์น์ ์์นํด ์๋ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๊ธฐ์กด ๋ธ๋์น๋ก ๋์์ค๊ธฐ
git switch (๋ธ๋์น๋ช
)HEAD์ ๊ฐ๋
์ ํ์ฉํ์ฌ reset๊ณผ revert์ ๋น๊ตํด์ ๊น๋ํ๊ฒ ์ด๋ ํน์ ์ปค๋ฐ ์์ ์ผ๋ก ๊ฐ์ ๊ฑฐ๊ธฐ์ ๋ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ ๊ฐ๋ฐ์ ํ ์ ์๋ค.
HEAD ์ฌ์ฉํด์ resetํ๊ธฐ
git reset HEAD(์ํ๋ ๋จ๊ณ) (์ต์
)์ํ๋ ๋จ๊ณ์๋ ^์ด๋ ~๋ก ๋จ๊ณ๋ฅผ ์กฐ์ ํ ์ ์๊ณ , ์ต์
์๋ --soft, --mixed, --hard๋ฅผ ์ฃผ๋ฉด ๋๋ค.
fetch์ pull
fetch vs pull
fetch: ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ปค๋ฐ์ ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ง ํจpull: ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ปค๋ฐ์ ๊ฐ์ ธ์merge๋๋rebaseํ๋ค.(fetch๊ณผ์ ์ ํฌํจ)
์๋ฅผ ๋ค๋ฉด git fetch๋ก ๋จผ์ ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ธํด์ ์คํ๋ ํด๋ณด๊ณ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค๋ฉด ๋ด ๋ก์ปฌ ํ๊ฒฝ์ pull๋ก ์ ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
์๊ฒฉ ๋ธ๋์น์ ๋ณ๊ฒฝ ๋ด์ฉ ํ์ธ
git fetchํ์
git checkout origin/main์ด๋ ๊ฒ ํ๋ฉด ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ปค๋ฐ์ ๋ฐ์์ค๊ณ ์ฝ๋ ์์ผ๋ก ๋ ํ์คํ ๋ณผ ์ ์๋ค.
์๊ฒฉ์ ์ ๋ธ๋์น๋ฅผ ํ์ธํ๋ ค๋ฉด
git fetch๋ฅผ ํ๊ณ ๋ธ๋์น๋ช ์ ํ์ธํ ๋ค์ ๋ ๋ช ๋ น์ผ๋ก ์ ๋ธ๋์น๋ฅผ ํ์ธํ ์ ์๋ค.
git checkout origin/(๋ธ๋์น๋ช
)์ด ๋ช ๋ น์ ๋ก์ปฌ์์ ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น๋ฅผ ํ์ธํ ์ ์๋ค.(ํ์ธ๋ง ํ๊ณ ๋ก์ปฌ์์ ๋ธ๋์น๋ ์์ฑํ์ง ์์)
git switch -t origin/(๋ธ๋์น๋ช
)์ด ๋ช ๋ น์ ๋ก์ปฌ์์ ์๊ฒฉ ์ ์ฅ์์ ๋ธ๋์น์ ๊ฐ์ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ์์ฑํจ๊ณผ ๋์์ ์๊ฒฉ ๋ธ๋์น๋ฅผ ์ถ์ ํ๋๋ก ์ค์ ํ ์ ์๋ค.
Git help
Git ์ฌ์ฉ ์ค ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์์ ๋ ๋์์ ๋ฐ์ ์ ์๋ ๊ธฐ๋ฅ
๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ด๋ค๊ณผ ์ค๋ช
git helpGit์ ๋ชจ๋ ๋ช ๋ น์ด๋ค
git help -aj๋ก ๋ด๋ฆฌ๊ณ , k๋ก ์ฌ๋ฆด ์ ์๋ค. :q(๋๋ q)๋ก ๋ซ๋๋ค.
ํด๋น ๋ช ๋ น์ด์ ์ค๋ช ๊ณผ ์ต์ ๋ณด๊ธฐ
git (๋ช
๋ น์ด) -h์) git commit -h, git push -h ๋ฑ
ํด๋น ๋ช ๋ น์ด์ ์ค๋ช ๊ณผ ์ต์ ์ ์น ์ฌ์ดํธ์์ ํ์ธํ๊ธฐ
git help (๋ช
๋ น์ด)๋๋
git (๋ช
๋ น์ด) --help์น์์ ์ด๋ฆฌ์ง ์์ผ๋ฉด ๋์ -w๋ฅผ ๋ถ์ฌ ๋ช
์ํด์ฃผ๋ฉด ๋๋ค.
Git config
ํน์ ํ๋ก์ ํธ์์ user.name๊ณผ user.email์ --global ์ต์
์์ด ์ง์ ํ๋ฉด ํน์ ํ๋ก์ ํธ๋ง์ ์ค์ ์ ์ง์ ํ ์ ์๋ค.
ํ์ฌ ๋ชจ๋ ์ค์ ๊ฐ ๋ณด๊ธฐ
git config (global) --listglobal์ ์๋ตํ๋ฉด ๋ชจ๋ ์ค์ ๊ฐ์ด ๋์ค๊ณ , ๋ช
์ํ๋ฉด global๋ก ์ค์ ๋ ๊ฐ๋ค๋ง ๋์จ๋ค.
์๋ํฐ์์ ๋ณด๊ธฐ
git config (global) -eglobal์ ์๋ตํ ์ ์๋ค.
๊ธฐ๋ณธ ์๋ํฐ ์์
git config --global core.editor "code --wait"code์๋ฆฌ์ ์ํ๋ ํธ์ง ํ๋ก๊ทธ๋จ์ .exeํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ค.
--wait์ ๋ฐ์ดํฐ์์ ์์ ํ๋ ๋์ CLI๋ฅผ ์ ์งํ๋ค.
git commit ๋ฑ์ ํธ์ง๋ ์ง์ ๋ ์๋ํฐ์์ ์ฐ๋ค.
์๋์ฐ์ ๋งฅ ์ค๋ฐ๊ฟ ํธํ ๋ฌธ์ ํด๊ฒฐ
git config --global core.autocrlf (์๋์ฐ: true / ๋งฅ: input)pull๊ธฐ๋ณธ ์ ๋ตmerge๋๋rebase๋ก ์ค์
git config pull.rebase falsegit config pull.rebase true๊ธฐ๋ณธ ๋ธ๋์น๋ช ์ค์
git config --global init.defaultBranch mainpush์ ๋ก์ปฌ๊ณผ ๋์ผํ ๋ธ๋์น๋ช ์ผ๋ก ์ค์
git config --global push.default current๋จ์ถํค ์ค์
git config --global alias.(๋จ์ถํค) "๋ช
๋ น์ด"์) git config --global alias.cam "commit -am" : git commit -am๋์ git cam
๊ด๋ จ ๋ฌธ์
Last updated