Git์ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (DVCS, Distributed Version Control System)์ผ๋ก, ์์ค ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํจ๊ณผ์ ์ผ๋ก ์ถ์ ํ๊ณ ํ์ ์ ์ง์ํ๋ ๋๊ตฌ์ ๋๋ค. Linus Torvalds๊ฐ ๋ฆฌ๋ ์ค ์ปค๋ ๊ฐ๋ฐ์ ์ํด ๋ง๋ค์์ผ๋ฉฐ, ํ์ฌ๋ ์คํ ์์ค ํ๋ก์ ํธ ๋ฐ ๊ธฐ์ ํ๊ฒฝ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
* github ๋ฑ๋ก
1. ์ ์ฅ์ ์์ฑ (github ์ฌ์ดํธ)
2. git remote add origin 0000(์ฃผ์)
์ด๋ฏธ ๋ฑ๋ก ๋ ์์ผ๋ฉด git remote remove origin
3. git push -u origin main
# pullํ ๊ฒ์ด ์์๋ psuh ํ๋ ค๋ฉด?
git pull --rebase(ํ์
์ ์ฃผ๋ก์ฌ์ฉ) -> git push
git pull --no-rebase(merge๋ฐฉ์) -> git push
* ๊ธฐ๋ณธ์ค์
1. ํฐ๋ฏธ๋์ pwd๋ฅผ ์
๋ ฅํด ํ์ฌ ์์น๋ฅผ ํ์
ํ๋ค
2. ํ์ฌ์์น๊ฐ ์ํ๋ ํ์ผ์ด ์๋๋ผ๋ฉด cd 000(ํ์ผ๋ช
)์ ํตํด ํ์ผ๋ก ์ด๋ํ๋ค
3. git init ์ผ๋ก ํ์ผ์ .git ํ์ผ๋ก ๋ง๋ ๋ค
4. git config user.name "--"
5. git config user.email "--"
* ์ปค๋ฐ ์์
1. git add .
2. git commit -m "--"
or
1. git commit -am "--" (์ด๋ฏธ ์ถ์ ์ด ๋์๋ ํ์ผ์ ์๋กญ๊ฒ ์ถ๊ฐํ๊ณ ์ปค๋ฐ ํ ๊ฒฝ์ฐ)
* pwd : ํ์ฌ์์น ํ์
* cd 000 : ์์น ์ด๋
* mkdir 0000 : ํด๋์์ฑ
git remote -v
: ์ฃผ์ํ์ธ
git config
: ์ค์ ๊ฐ
git config global
: ์ปดํจํฐ ํ์ผ ์ ์ฒด์ ์ค์ ๊ฐ ์ค์
git add 00
: ํ์ผ์ ์ถ์ ํด์ค
git add .
: ๋ชจ๋ ํ์ผ์ ์ถ์
git re --cached.00
: ์ถ์ ์์ ์ ์ธ
git status
: ํ์ผ ์ํ ํ์ธ -> ์ถ์ ์ํ
git commit -m "--"
: ์ฃผ์ ๋ฌ๊ธฐ
git log
: ์ฃผ์ ํ์ธ
git log --oneline
: ํ์คํํ์ ์ฃผ์ ํ์ธ
git log --all --decorate --oneline --grapgh
: ๋ชจ๋ ๋ธ๋์น์ ๋ก๊ณ ๋ณด๊ธฐ
git checkout --(ํด์)
: ๊ทธ ๋น์ ์ปค๋ฐ์ ์์ ์ผ๋ก ๋์ด๊ฐ ํ์ผ๋ค๋ ํฌํจ
->git checkout main (๋์์ค๊ธฐ)
git reset : git reset --mixed
git reset --hard ํด์๊ฐ
: ํด๋น ํด์๊ฐ ์ดํ์ ๋ฐ์ํ commit ์ ๋ถ ์ญ์
git reset --mixed ํด์๊ฐ
: ํด๋น ํด์๊ฐ ์ดํ๋ก ์ญ์ ํ์ง๋ง ํ์ผ๋ค์ ๋จ๊น ๋ค์ ์ปค๋ฐ ํ๊ธฐ ์ํด์๋ add ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ผํจ
git reset --soft ํด์๊ฐ
: commit ๋ด์ฉ๋ง ์ญ์ ๋ค์ commit ํ๋ฉด ์ฌ์ฉ๊ฐ๋ฅ
git reflog
: ๋ ์๊ฐ commit ์ด๋ ฅ๋ค์ ๋ณผ ์ ์์
git reset --hard ํด์๊ฐ
: commit ๋ค ๋ค์ ๋ณต๊ตฌ
(reset ์ํจ ํ ๋ณ๋ ๋์๋๊ฑฐ ์ผ์ผํ ์์ ํด์ผ ํจ , ๋ณต๊ตฌ์ ํ์ผ์ ์์ ํ ์ญ์ ํ๋ค๋ฉด ์์ ๋ด์ฉ์ ๋ณต๊ตฌ ๋ถ๊ฐ ์ปค๋ฐ ์ด๋ ฅ๋ง ๋์์ด)
git revert ํด์๊ฐ
: ํด์๊ฐ์ commit ๋ ๋ด์ฉ๋ค ๊ทธ์ ์ํ๋ก ์ ํ ,revert ๋ผ๋ ์ด๋ ฅ ๋จ์ (์ค๋ฅ ๋ฐ์์ git revert --continue -> git revert --no-commit)
git status
: ํ์ฌ Git์ ์ฅ์์ ์ํ๋ฅผ ํ์ธํ๋ ๋ช
๋ น์ด, ์ถ์ ๋์ง ์์ ํ์ผ, ๋ณ๊ฒฝ๋ ํ์ผ, ์ปค๋ฐ๋์ง ์์ ํ์ผ์ ๋ณด์ฌ์ค
git rebase
: ๋ธ๋์น ๊ธฐ๋ฐ์ ๋ณ๊ฒฝํ์ฌ ์ต์ ์ปค๋ฐ์ ์ ์งํ๋ฉด์ ํ์คํ ๋ฆฌ๋ฅผ ์ฌ์ ๋ ฌ ํ๋ ๋ช
๋ น์ด, ํ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ๋ธ๋์น์ ์ต์ ์ํ ์์ ๋ค์ ์ ์ฉ ํ๋ ๋ฐฉ์
git stash
: ํ์ฌ ์์
์ค์ธ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ์ ์ฅํ๊ณ , ์์
๋๋ ํ ๋ฆฌ๋ฅผ ๊บ ๋ํ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ช
๋ น์ด
git cherry-pick
: ํ์ํ ์ปค๋ฐ๋ง ๊ณจ๋ผ์ ํ์ฌ ๋ธ๋์น๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๊ธฐ๋ฅ
git pull request
: Git์์ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์์ ์ฌํญ์ ๋ฉ์ธ ์ ์ฅ์(Repository)์ ๋ณํฉ(Merge) ์์ฒญํ๋ ๊ณผ์ ์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก GitHub, GitLab, Bitbucket ๋ฑ์ ์๊ฒฉ ์ ์ฅ์์์ ์ฌ์ฉ๋ฉ๋๋ค
git revert
vs git reset
:
git tag <ํ๊ทธ๋ช
>
: ์ฐธ์กฐ
git tag <ํ๊ทธ๋ช
> -m "ํ๊ทธ ์ค๋ช
"
Git ์๋ธ๋ชจ๋(Git Submodule)์ ํ๋์ Git ์ ์ฅ์ ์์ ๋ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ํฌํจํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ฆ, ๋ค๋ฅธ ์ ์ฅ์(repository)๋ฅผ ํ์ฌ ํ๋ก์ ํธ์ ์ผ๋ถ๋ก ํฌํจํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
git submodule add <์๋ธ๋ชจ๋_์ ์ฅ์_URL> <์๋ธ๋ชจ๋_๋๋ ํ ๋ฆฌ>
* commit์ ์ธ์ ๋ ์์ฑํ๊ณ ๊ทธ๊ณณ์ผ๋ก ์ด๋ ์์ผ๋ ํ์
์ ์ค์ํ ๊ณณ์๋ง ์ปค๋ฐ์ ๋จ๊น
* ๋
๋ฆฝ์ ์ผ๋ก ์์
์ ์ํ ํ ๋ ์์ฑ
* ๋ช
๋ น์ด
- git branch : ๋ธ๋์น ๋ชฉ๋ก ํ์ธ
- git branch 000(๋ธ๋์น๋ช
) : ๋ธ๋์น์์ฑ
- git switch 000 : ํด๋น ๋ธ๋์น๋ก ์ด๋
- git switch -c 000 : ์์ฑ๊ณผ ๋์์ ๋ธ๋์น๋ก ์ด๋
- git branch -d 000 : ํด๋น ๋ธ๋์น ์ญ์
- git branch -m 000(๊ธฐ์กด์ด๋ฆ) 000(๋ณ๊ฒฝํ ์ด๋ฆ) : ๋ธ๋์น๋ช
๋ณ๊ฒฝ
- git merge 000(ํฉ์น๊ณ ์ํ๋ ๋ธ๋์น) : branch ์ด๋ ฅ์ ์ ์งํ์ฒด ๋ฉ์ธ ๋ธ๋์น์ ํฉ์น๋๊ฒ, ์ด๋ ฅ ๋จ์
1. git switch main
2. git merge 000
3. git log (ํ์ธ)
4. git branch -d 000(์์ค ๋ธ๋์น๋ช
) : mergeํ ํฉ์น ๋ธ๋์น๋ช
์ญ์
* 2๊ฐ์ง merge ๋ฐฉ์
1. 3-way-merge
๋ฉ์ธ์ด ๋์๊ฐ๊ณ ๋ฉ์ธ ์ด์ ์ ํ์๋ ๋ธ๋์น์์ ๋ฉ์ธ์ด๋ ํฉ์ณ์ง๋ ๊ฒ
๋ณํฉ๋ ๋ธ๋์น์ ์ปค๋ฐ ์ด๋ ฅ๊ณผ merge ๋ ๋ธ๋์น ์ด๋ ฅ์ด ์๋จ์ ๋ค์ ์ปค๋ฐ์ ๋ชจ๋ ๋ด์ฉ ์ง์ด๋ฃ๋๊ฒ
2. fast forward
git merge --no -f 0000( ์ด๋ฐฉ์ ์ฌ์ฉ x)
5. git merge --squash 000 : commit ์ด๋ ฅ๊ณผ merge๋ ๋ธ๋์น ์ด๋ ฅ๋ ๋จ๊ธฐ์ง ์๊ณ
์๋ก์ด commit์ ์๋ ๋ธ๋์น์ ๋ด์ฉ์ ๋ชจ๋ ์ง์ด๋ฃ์ ,์๋ ์ปค๋ฐ๋์ง ์์ ๋ณ๋์ ์ปค๋ฐ์๊ตฌ
- git rebase :
๋ธ๋์น์ ์ด๋ ฅ์ ๋ฉ์ธ ๋ธ๋์น์ ์ฐ๊ฑธ์ง์ด ํ๋์ ์ด๋ ฅ์ผ๋ก ๋ง๋ค์ด์ค
๊ธฐ์กด ๋ธ๋์น์ ์ด๋ ฅ์ด ์ฌ๋ผ์ง๋ฏ๋ก ๊นจ๋ํ ์ด๋ ฅ์ ๊ด๋ฆฌํ๊ธฐ ์ฉ์ด
ํ๋์ ์ด๋ ฅ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์์ ๋ชจ๋ ์ปค๋ฐ์ ์ฌ์ ๋ ฌ ๋๊ณ ๊ธฐ์กด ๋ก๊ทธ์ ํด์๊ฐ์ด ๋ณ๋๋์ด ์ถฉ๋๋ฑ์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐ
1. git switch 0000
2. git rebase main
3. git switch main
4. git merge 0000
5. git branch -d 0000
- git cherry-pick 0000(ํด์๊ฐ) : ๋ธ๋์น์์ ์ํ๋ commit ์ ๊ฐ์ ธ์ฌ ์ ์์
๋ณต์ฌํด์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๊ธฐ์ ๋ธ๋์น์ commit์ ์ํฅ ์์
- git --reapply-cherry-pics 0000 : ๋๋๋ฆฌ๊ธฐ
* ๋ฌธ์ ๋ฐ์ *
1. merge ๊ณผ์ ์์ ๊ฐ์ ํ์ผ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ
๊ทธ ๊ฐ์ค ๋ฌด์จ ๊ฐ์ ์ ํํ ์ง ํด๋ฆญ ํ ํ ์ ์ฅ -> git add . -> git commit
2. rebase ๊ณผ์ ์์ ๊ฐ์ ํ์ผ์ ๊ฐ์ด ์ถฉ๋ํ ๊ฒฝ์ฐ
์์ ๊ฐ์ด ์ ํ ํ -> ํ์ผ์ ์ฅ -> git add. -> git rebase --continue
--
* .gitignore : ํด๋์์ .gitignore ํ์ผ๋ช
์์ฑํ ๊ทธ์์ ์ปค๋ฐํ๊ณ ์ถ์ง ์์ ํ์ผ๋ช
์ ์์ฑํ๋ฉด ๊ทธํ์ผ์ ์ปค๋ฐ๋์ง ์๋๋ค.
(ex) admin_info.yaml < ์ด ํ์ผ์ ์ปค๋ฐ๋์ง ์๋๋ค
* vim ํธ์ง๊ธฐ : commit์ ๋์ฌ์ ์์ ์ฌํํธ i or i + :wq(์ ์ฅํ ์ข
๋ฃ) q, esc(์
๋ ฅ์ข
๋ฃ) ์ด์ ๋๋ง ์๋ฉด ๋ ๋ฏ