Git & GitHub โ
Git & GitHub โ
๐ Git โ
- ๐ Git: ๋ถ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ๋ก ์ฝ๋์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ธฐ๋กํ๊ณ ํ์ ์ ๋๋๋ค.
- ์ฝ๊ฒ ๋งํด, ์ฝ๋ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ธฐ๋กํ๋ ๋๊ตฌ๋ค.
๐ GitHub โ
๐ GitHub: Git ์ ์ฅ์๋ฅผ ์จ๋ผ์ธ์์ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ํด๋ผ์ฐ๋ ํธ์คํ ํ๋ซํผ
์จ๋ผ์ธ ๋ฐฑ์ ๊ณผ ๊ณต์ , ํ์ ์ด ๊ฐ๋ฅํ ์จ๋ผ์ธ ์ฝ๋ ์ ์ฅ์
Git GUI โ
Git ๊ธฐ๋ณธ ํ๋ฆ โ
bash
# (1) ํด๋ ์ด๊ธฐํ
$ git init
# (2) ํ์ผ ์ถ๊ฐ
$ git add . # ์ ์ฒด ํ์ผ ์ถ๊ฐ
$ git add ํ์ผ๋ช
# ํน์ ํ์ผ๋ง ์ถ๊ฐ
# (3) ์ปค๋ฐ (์ค๋
์ท ์ ์ฅ)
$ git commit -m "์ปค๋ฐ ๋ฉ์์ง"
# (4) GitHub ์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐ
$ git remote add origin https://github.com/์์ด๋/๋ ํฌ๋ช
.git
# (5) GitHub๋ก ์
๋ก๋ (์
์คํธ๋ฆผ ์ง์ ํฌํจ)
$ git push -u origin main
# (6) ์ํ ํ์ธ
$ git status
๐ช git init
์ง๊ธ ์ด ํด๋๋ถํฐ Git์ผ๋ก ๊ด๋ฆฌํ ๊ฒ์!๋ผ๊ณ ์ ์ธํ๋ ๋ช ๋ น์ด
- ๊ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌํ ์ค๋น๋ฅผ ํ ๋ ํ ๋ฒ๋ง ์ ๋ ฅํ๋ฉด ๋๋ค.
- ์คํํ๋ฉด .git์ด๋ผ๋ ์จ๊น ํด๋๊ฐ ์์ฑ๋์ด, ์ด ํด๋ ์์์ Git์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ฒ ๋๋ค.
- ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ธฐ ์ ์๋ ํ์ฌ ๋๋ ํ ๋ฆฌ ์์น๋ฅผ ๊ผญ ํ์ธํ์! (์์น ์๋ ํด๋์์ ์คํํ์ง ์๋๋ก ์ฃผ์)
โฌ๏ธ git push
-u
์ต์ ์ "์ ์คํธ๋ฆผ(๊ธฐ๋ณธ ์๊ฒฉ ๋ธ๋์น)"์ ์ค์ ํ๋ ์ญํ ์ด๋ค.- ์ดํ๋ถํฐ๋
git push
๋ง ์ ๋ ฅํด๋ origin/main์ผ๋ก ํธ์๋๋ค.
Git ์ค์ โ
Git ์ค์ ๋ฒ์์ ์ค์ ํ์ผ
Git์ ์ง์ญ(Local), ์ ์ญ(Global), ์์คํ (System) 3๊ฐ์ง ๋ฒ์๋ก ์ค์ ๊ฐ๋ฅํ๋ค.
- ์ง์ญ(Local): ํน์ ์ ์ฅ์์๋ง ์ ์ฉ โ ํด๋น ํด๋ ์์์๋ง ์ ํจ (
.git/config
) - ์ ์ญ(Global): ํ์ฌ ์ฌ์ฉ์ ๊ณ์ ์ ์ฒด์ ์ ์ฉ โ ๋๋ถ๋ถ ์ด๊ฑธ ์ฌ์ฉ (
~/.gitconfig
) - ์์คํ
(System): ์ปดํจํฐ ์ ์ฒด ์ฌ์ฉ์์๊ฒ ์ ์ฉ โ ์ ์ฌ์ฉํ์ง ์์ (
/etc/gitconfig
)
์ ์ญ์ค์ โ
bash
# ์ ์ญ ์ค์ (์ฌ์ฉ์ ์ ๋ณด)
$ git config --global user.name ์ด๋ฆ
$ git config --global user.email ์ด๋ฉ์ผ
์ค์ ํ์ธ/์ญ์ โ
bash
# ์ค์ ์ ์ฒด ๋ณด๊ธฐ
$ git config --list
# ์ด๋ฆ๋ง ๋ณด๊ธฐ
$ git config --global user.name
# ์ด๋ฉ์ผ๋ง ๋ณด๊ธฐ
$ git config --global user.email
# ์ด๋ฆ ์ญ์
$ git config --global --unset user.name
# ์ด๋ฉ์ผ ์ญ์
$ git config --global --unset user.email
๋ก์ปฌ ์ค์ (ํด๋น ๋ ํฌ์๋ง ์ ์ฉ) โ
bash
# ์ด๋ฆ ์ค์
$ git config user.name ์ด๋ฆ
# ์ด๋ฉ์ผ ์ค์
$ git config user.email ์ด๋ฉ์ผ
Git ํ์ ๋ช ๋ น์ด โ
์ปค๋ฐ ๋ก๊ทธ ํ์ธ โ
bash
# ์ ์ฒด ๋ก๊ทธ
$ git log
# ํ ์ค ์์ฝ
$ git log --oneline
์ปค๋ฐ ๋ฉ์ธ์ง๋ก ์ฝ๋ ๋ณ๊ฒฝ์ ์ถ์ธก์ด ๊ฐ๋ฅํ๋ค.
๋ณ๊ฒฝ ์ฌํญ ํ์ธ โ
bash
# ํ์ฌ ๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก ํ์ธ
$ git status
# ํ์ผ์ ๋ณ๊ฒฝ ๋ด์ฉ ํ์ธ
$ git diff
์คํ ์ด์ง & ์ปค๋ฐ โ
bash
# ๋ณ๊ฒฝ๋ ํ์ผ์ ์คํ
์ด์ง ์์ญ์ ์ถ๊ฐ
$ git add ํ์ผ๋ช
# ํน์ ํ์ผ๋ง ์ถ๊ฐ
$ git add . # ์ ์ฒด ๋ณ๊ฒฝ ํ์ผ ์ถ๊ฐ
# ์ปค๋ฐ ์์ฑ (ํ์ฌ ์คํ
์ด์ง๋ ๋ณ๊ฒฝ์ฌํญ์ ํ๋์ ๋ฒ์ ๊ธฐ๋ก์ผ๋ก ์ ์ฅ)
$ git commit -m "์ปค๋ฐ ๋ฉ์์ง"
# ๊ธฐ๋ณธ ์ปค๋ฐ (ํธ์ง๊ธฐ ์ด๋ฆผ)
$ git commit
๋๋๋ฆฌ๊ธฐ โ
bash
# ๋ง์ง๋ง ์ปค๋ฐ ์ทจ์ (์คํ
์ด์ง๊น์ง ๋ณต์)
$ git reset HEAD~1
# ์์ ์ ์ํ๋ก ๋ณต์
$ git restore ํ์ผ๋ช
๋ ํฌ์งํ ๋ฆฌ ๋ณต์ฌ & ๋ณ๊ฒฝ ๊ฐ์ ธ์ค๊ธฐ โ
bash
# ์ ์ฅ์ ๋ณต์
$ git clone URL
# ๋ณ๊ฒฝ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
$ git pull
๐งฉ git pull ์ฌ์ฉ ์์
main ๋ธ๋์น์์ ์ต์ ๋ด์ฉ ๊ฐ์ ธ์ฌ ๋ โ
bash
$ git checkout main
$ git pull # == git pull origin main
feature/login ๋ธ๋์น์ main์ ์ต์ ๋ณ๊ฒฝ์ฌํญ์ ๋ณํฉํ ๋ โ
bash
$ git checkout feature/login
$ git pull origin main
๐ฃ git pull
git pull์ ๋ด๋ถ ์๋ โ
bash
$ git pull
# git pull์ ์๋ ๋ ๋ช
๋ น์ด๋ฅผ ์์๋๋ก ์คํํ ๊ฒ๊ณผ ๊ฐ๋ค.
$ git fetch
$ git merge
๐ git fetch โ
bash
$ git fetch origin
- origin ์ ์ฅ์์ ์ต์ ์ปค๋ฐ์ ๊ฐ์ ธ์ค์ง๋ง, ๋ด ๋ก์ปฌ ๋ธ๋์น์๋ ๋ฐ์๋์ง ์๋๋ค.
- ์ฝ๋๋ฅผ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ํ์ธํ ์ ์๋ค.
- ์ดํ merge ๋๋ rebase๋ฅผ ํตํด ์ง์ ๋ด ๋ธ๋์น์ ๋ฐ์ํด์ผ ํ๋ค.
๐ git merge โ
bash
$ git merge origin/main
plaintext
A---B โ main (origin)
\
C---D---M โ feature (merge ์๋ฃ)
- fetch๋ก ๊ฐ์ ธ์จ ๋ณ๊ฒฝ์ฌํญ์ ๋ด ๋ธ๋์น์ ๋ณํฉํ๋ค.
- ๋ณ๊ฒฝ์ ์ด ๊ฒน์น๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
- ๋ณํฉ ์ merge commit์ด ์์ฑ๋์ด, ๋ธ๋์น๊ฐ ํฉ์ณ์ก๋ค๋ ๊ธฐ๋ก์ด ๋จ๋๋ค.
๐ git rebase โ
bash
$ git rebase origin/main
- ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ์ง์ ์ผ๋ก ์ ๋ฆฌํ๋ค.
- ๋ง์น ์ต์ ์ปค๋ฐ ์ดํ์ ์์ ํ ๊ฒ์ฒ๋ผ, ๋ด ์ปค๋ฐ์ ๊ทธ ๋ค์ ๋ค์ ์๋๋ค.
- ์ถฉ๋ ๋ฐ์ ์ ํด๊ฒฐ ํ
git rebase --continue
๋ช ๋ น์ด๋ก ์ด์ด์ ์งํํ๋ฉด ๋๋ค.
plaintext
# rebase ์
A---B---C---D โ origin/main
\
C'---D' โ feature (rebase ์ค)
A
,B
: ๊ณตํต ์กฐ์ ์ปค๋ฐC
,D
: ์๋ feature ๋ธ๋์น์์ ๋ง๋ ์ปค๋ฐC'
,D'
:git rebase origin/main
์ ์คํํ๋ฉด ๋ง๋ค์ด์ง๋ ์ ์ปค๋ฐ(rebased ์ปค๋ฐ)
plaintext
# rebase ํ
A---B---C'---D' (rebased feature ์๋ฃ)
C
,D
: ์ญ์ ๋์ง ์์ง๋ง ํ์คํ ๋ฆฌ์์ ์ฌ๋ผ์ง (git reflog์ผ๋ก ํ์ธ ๊ฐ๋ฅ)C'
,D'
:origin/main
์ต์ ์ปค๋ฐ ์ดํ์ ์๋ก ๋ง๋ค์ด์ง ์ปค๋ฐ (๋ด์ฉ ์ ์ฌ, ID๋ ๋ค๋ฆ)
Git Branch โ
๋ธ๋์น ๊ธฐ๋ณธ โ
bash
# ๋ธ๋์น ๋ชฉ๋ก
$ git branch
# ์ ๋ธ๋์น ์์ฑ
$ git branch ๋ธ๋์น๋ช
# ๋ธ๋์น ์ด๋ (switch ๊ถ์ฅ / checkout ๊ตฌ๋ฒ์ )
$ git switch ๋ธ๋์น๋ช
$ git checkout ๋ธ๋์น์ด๋ฆ
# ์์ฑ + ์ด๋
$ git switch -c ๋ธ๋์น๋ช
$ git checkout -b ๋ธ๋์น์ด๋ฆ
๋ธ๋์น ๋ณํฉ โ
bash
# ๋ณํฉ ๋์(main)์ผ๋ก ์ด๋
$ git switch main
# ๋ณํฉํ ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์ ธ์ด
$ git merge ๋ธ๋์น
- ๋ณํฉ์
main โฌ ๏ธ ๋ธ๋์น
๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ฆ, ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ด main ๋ธ๋์น์ ๋ค์ด์ค๊ฒ ๋๋ค. - ์ค๋ฌด์์๋ ๋ธ๋์น๋ฅผ ์ง์ ๋ณํฉํ๊ธฐ๋ณด๋ค๋ GitHub์
Pull Request
๋ฅผ ํตํด ์ฝ๋ ๋ฆฌ๋ทฐ ํ ๋ณํฉํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด๋ค.
GitHub Pull Request โ
bash
$ git push origin ๋ธ๋์น๋ช
- GitHub Repository๋ก ์ด๋ >
Compare & pull request
- Open a pull request > base(์ต์ข ๋ธ๋์น) & compare(๊ธฐ๋ฅ ๋ธ๋์น) ์ค์
๐ง Linux ๋ช ๋ น์ด โ
๋๋ ํ ๋ฆฌ ์ด๋ ๊ด๋ จ โ
bash
# ํด๋น ํด๋๋ก ์ด๋ (change directory)
$ cd ํด๋๋ช
# ํ์ ํด๋๋ก ํ ๋ฒ์ ์ด๋
$ cd ํด๋๋ช
/ํด๋๋ช
# ์์ ํด๋๋ก ์ด๋
$ cd ..
# ์์ ํด๋ 2๋จ๊ณ ์ด๋
$ cd ../..
ํด๋ ๋ฐ ํ์ผ ํ์ธ โ
bash
# ํ์ฌ ์์น, ๊ฒฝ๋ก (print working directory)
$ pwd
# ํ์ฌ ์์น์ ํ์ผ ๋ชฉ๋ก ๋ณด๊ธฐ (list)
$ ls
# ์จ๊น ํ์ผ ํฌํจ ์ ์ฒด ๋ชฉ๋ก (list all)
$ ls -a
# ์์ธ ์ ๋ณด ํฌํจ ๋ชฉ๋ก
$ ls -l
# ํ์ผ ํฌ๊ธฐ ๋ณด๊ธฐ ์ฝ๊ฒ ์ถ๋ ฅ
$ ls -lh
ํ์ผ ๋ฐ ํด๋ ์์ฑ โ
bash
# ์ ํด๋ ์์ฑ (make directory)
$ mkdir ํด๋๋ช
# ์ ํ์ผ ๋ง๋ค๊ธฐ
$ touch ํ์ผ๋ช
ํ์ผ ๋ฐ ํด๋ ์ญ์ โ
bash
# ํ์ผ ์ญ์ (Remove)
$ rm ํ์ผ๋ช
# ํด๋ ์ญ์ - ์ฌ๊ท์ ์ผ๋ก ๋ด๋ถ๊น์ง ์ญ์ (Recursive)
$ rm -r ํด๋๋ช
# ๐จ ํด๋ ๊ฐ์ ์ญ์ (Recursive + Force)
# ์ญ์ ์ ๋ฌผ์ด๋ณด์ง ์๊ณ , ์กด์ฌํ์ง ์๋ ํ์ผ๋ ์๋ฌ ์์ด ๋์ด๊ฐ
$ rm -rf ํด๋๋ช
# ํด๋ ์ญ์ (Recursive + interactive)
# ํด๋ ๋ด๋ถ ํญ๋ชฉ๋ง๋ค ์ญ์ ์ฌ๋ถ ํ๋์ฉ ๋ฌผ์ด๋ด
$ rm -ri ํด๋๋ช
๊ธฐํ โ
bash
# ํฐ๋ฏธ๋ ํ๋ฉด ์ ๋ฆฌ
$ clear