Git ์ฌ์ฉ ๋ฐฉ๋ฒ ์ ๋ฆฌ(commit, push, pull request, merge ๋ฑ)
Git
git ๊ฐ๋ ๋ฐ ๋ช ๋ น์ด ์ ๋ฆฌ
๊ฐ์ธ ๊ฐ๋ฐ์ ๋์ด, ๊ณต๋ ๊ฐ๋ฐ์์ ํจ์จ์ ์ธ ์ฝ๋ ํ์ ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ ์ํจ.
Git ์์ญ
(1) Working Directory (Local)
: ๊ฐ์ธ ์ฝ๋ ์์ฑ
(2) Staging ์์ญ
:โ git add ๋ฅผ ํตํด์ ์์ ๋ ์ฝ๋๋ฅผ ์ฌ๋ฆฌ๋ ์์ญ
(3) Repository
: โ git commit ์ ํตํด์ ์ต์ข ์์ ๋ณธ์ ์ ์ถ
Git ์์ ํ๋ก์ฐ
๋จผ์ ํฐ๋ฏธ๋์ git์ ์ค์นํฉ๋๋ค.
linux (Ubuntu) ๊ธฐ์ค
$ sudo apt install git-all
(1) ์ ์ฅ์(Repository) ์์ฑ
์ํ๋ ํด๋ ๋ค์ด๊ฐ ํ
$ git init
๋๋ ๊ธฐ์กด github์ ์๋ ์ ์ฅ์๋ฅผ ๋ด ๋ก์ปฌ๋ก ๋ณต์ ํ ์๋ ์์ต๋๋ค.
$ git clone (git ์ ์ฅ์์ URL)
(2) ์ฝ๋ ์์ฑ (in Working directory)
์ด ์์ ์์๋ README.md ๋ผ๋ ํ์ผ์ ์คํธ๋ง ๋ฌธ์๋ฅผ ์ฐ๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
$ echo "Hello, Git!" > README.md
ํ์ธ >>
|
$ cat README.md |
|
Hello, Git! |
(3) Staging ์์ญ์ ์ถ๊ฐ
์ฝ๋ ์์ ์ด ์๋ฃ๋๋ฉด staging ์์ญ์ ์ถ๊ฐํฉ๋๋ค.
$ git add .
ํ์ฌ ๋๋ ํ ๋ฆฌ์ ์๋ ์ ๋ฐ์ดํธ ๋ ํ์ผ์ ์ ๋ถ ์คํ ์ด์ง ์์ญ์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
๋๋,
$ git add -A
์์ ๋ ํ์ผ ์ ๋ถ๋ฅผ ์คํ ์ด์ง ์์ญ์ ์ถ๊ฐํฉ๋๋ค.
$ git status
๋ก ํ์ฌ add ๋ด์ญ์ ํ์ธํ ์ ์์ต๋๋ค.
(4) Repository์ commit
$ git commit -m "feat: README.md update"
-m ์ ๋ฉ์ธ์ง์ ์ฝ์์ด๊ณ , ๋ค์ ""์์ ๊ณต์ ํ ๋ฉ์์ง ๋ด์ฉ์ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
(5) ์๊ฒฉ ์ ์ฅ์์ push, ์ ๋ฐ์ดํธ ๋ ๋ด์ฉ์ pull
๋ด local ๋๋ ํ ๋ฆฌ๋ก ๋ถํฐ ์๊ฒฉ์ ์ฅ์(Remote repository)๋ก ๋ณด๋ด๊ธฐ ์ํด์๋ push ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ ์ ์ ์๊ฒฉ ์ ์ฅ์์ ๋ด ๋ก์ปฌ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
์๊ฒฉ ์ ์ฅ์ ์ฐ๊ฒฐ (github)
$ git remote add origin (์๊ฒฉ ์ ์ฅ์ github URL)
origin์ remote repository์ ์ด๋ฆ์ด๋ฉฐ, ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ค์ ํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
push
$ git push origin master
origin์ด๋ผ๋ ์๊ฒฉ์ ์ฅ์์ master ๋ธ๋์น (๋ธ๋์น๋ ๋ค์์ ์ค๋ช )์ ํธ์ฌํฉ๋๋ค.
์ต๊ทผ์๋ ๊นํ์์ ๋ฉ์ธ ๋ธ๋์น์ด๋ฆ์ master๊ฐ ์๋ ๊ธฐ๋ณธ์ผ๋ก main ์ผ๋ก ํด๋์์ต๋๋ค. (ํ์์ ์์ ๋ ์ง๋ 2021-05-11)
๋ฐ๋ผ์ ๋ธ๋์น๋ฅผ ๋ฐ๊พธ๊ณ , ๋ฐ๊พผ ๋ธ๋์น๋ก push ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. (๋ธ๋์น ๊ด๋ จ ๋ช ๋ น์ด๋ ๋ฐ์ ๋ ๋์ต๋๋ค.)
|
$ git branch -M main |
|
$ git push origin main |
pull
๋ํ ๋ค๋ฅธ ์ฌ๋์ด ์๊ฒฉ ์ ์ฅ์(Remote repository)์ ์ ๋ฐ์ดํธํ ํ์ผ์ด ์์ ๋, ์๊ฒฉ์ ์ฅ์์ ๋ด ๋ก์ปฌ์ ์ฅ์์ ์ํ๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค๊ธฐ ์ํด pull์ ์ด์ฉํฉ๋๋ค.
$ git pull
๊ทธ ์ธ ์์๋๋ฉด ์ข์ git ๋ช ๋ น์ด
(6) ์ปค๋ฐ ์ด๋ ฅ ํ์ธ
$ git log
๋๋
ํ ์ค๋ก ์์ฝํด์ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ
$ git log --oneline
(7) ํ์ผ๋ณ๊ฒฝ์ (Working drectory → Staging) ๋ด์ญ ํ์ธ ๋ฐ ์ทจ์
ํ์ฌ ๋๋ ํ ๋ฆฌ์ README.md ๊ฐ ์๋ค๋ ๊ฐ์ ํ์,
์ด ํ์ผ์ ๋ค๋ฅธ ๋ด์ฉ์ ์ ์ด ์ ๋ฐ์ดํธํ๊ณ , ๋ฌด์์ด ๋ฐ๋์๋์ง ํ์ธํด๋ด ๋๋ค.
ํ์ผ ๋ด์ฉ ๋ณ๊ฒฝ
$ echo "update test" >> README.md
๋ด์ฉ ๋ณ๊ฒฝ ํ์ธ
|
$ cat README.md |
|
Hello, Git! |
|
update test |
๋ณ๊ฒฝ ๋ด์ฉ ํ์ธ
$ git diff
staging ์ทจ์ (unstage)
$ git reset
๋๋
$ git reset --hard
working directory ๊น์ง๋ ๋ณ๊ฒฝ์ ์ํ๋ก ๋๋๋ฆผ ์ฆ, ๋ณ๊ฒฝํ ๋ด์ฉ์ด ์๋ฉธ๋๋ฏ๋ก ์ฃผ์
(8) commit ์ ๋ฆฌ
์ฌ๋ฌ๊ฐ์ commit์ ํ๋์ commit์ผ๋ก ์ ๋ฆฌ
$ git rebase -i
์ง์ ๊ณผ ๊ธ๋ฒ ์ปค๋ฐ์ ํ๋๋ก ์ ๋ฆฌ
git commit --amend
Git Branch
ํ๋ก์ ํธ ์งํ ์, ์ค๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด๋ฅผ ๊ณ ์ณ์ผํฉ๋๋ค. ํ์ง๋ง ๊ทธ์ ๋์์ ์ง๊ธ ์งํํ๊ณ ์๋ ํ๋ก์ ํธ์์ ์๋ก์ด ๋ชจ๋์ ๊ฐ๋ฐํด์ผ ํ ๊ฒฝ์ฐ ์ ๋ ์ฝ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋์ด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ master (๊ธฐ๋ณธ ๋ธ๋์น) ์ธ์ ๋ค๋ฅธ ๋ธ๋์น๊ฐ ํ๋๋ ํ์ํฉ๋๋ค.
(9) branch ํ์ธ
$ git branch
ํ์ฌ ์ค์ ๋ ๋ธ๋์น ์์ * ๊ฐ ๋ถ์ต๋๋ค.
(10) branch ์์ฑ ๋ฐ ๋ณ๊ฒฝ
$ git branch mybranch
์๋ก์ด ๋ธ๋์น mybranch๋ฅผ ์์ฑํ์ต๋๋ค.
$ git checkout mybranch
๊ธฐ์กด ๋ธ๋์น(master)์์ ์๋ก์ด ๋ธ๋์น(mybranch)๋ก ์ ํํฉ๋๋ค.
๋ฐ๋ผ์ ๋ฐ๋ ๋ธ๋์น์์ commit์ ํ๋ฉด, ์๋ ๋ธ๋์น์๋ ์ ๋ฐ์ดํธ๊ฐ ์๋๊ณ , ์๋ก์ด ๋ธ๋์น์์๋ง ์ ๋ฐ์ดํธ๊ฐ ๋ฉ๋๋ค.
push๋ ๋ค์๊ณผ ๊ฐ์ด ์งํํ๋ฉด ๋ฉ๋๋ค.
$ git push origin mybranch
origin์ด๋ผ๋ ์๊ฒฉ์ ์ฅ์์ mybranch๋ก pushํฉ๋๋ค.
Pull Request์ Merge
commit์ ํ๋ค๊ณ ์ต์ข ์ฝ๋๊ฐ ์์ ๋๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ์ธ์ด commit์ ํ์ผ๋ฉด, ๊ด๋ฆฌ์๊ฐ ์ด ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํ๊ณ ๋ฐ๊ฟ๊ฒ์ด ์์ผ๋ฉด ์์ ํด๋ฌ๋ผ๊ณ ๋ค์ ์์ฒญํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ ๊ณผ์ ์ ์์๋ด ๋๋ค.
1) Pull Request ๋ฐํ (Review ์๋ขฐ์)
github์ ์ ์ ํ, ์๊ฒฉ์ ์ฅ์์ ๋ค์ด๊ฐ์ ํด๋น commit์ pull request ๋ฒํผ์ ๋๋ฅด๋ฉด Reviewer์๊ฒ ํ๋ฆฌํ์คํธ ๋ฉ์์ง ์ ์ก
2) Review & Comment (Review ์ํ์)
๋ฆฌ๋ทฐ ํ comment ํ ๊ฒ์ด ์์ผ๋ฉด comment ๋ฒํผ ํด๋ฆญ
3) Comment ๋์ (Review ์ํ์)
local์์ ์ฝ๋ ์์ ํ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก commit ์ํ
|
$ git add . |
|
$ git commit -m "์ปค๋ฐ ๋ฉ์์ง" |
|
$ git push |
4) Review ๋ฐ ๋ณํฉ (Review ์ํ์)
๋ฆฌ๋ทฐ ํ ์ต์ข ๊ฒฐ๊ณผ ๋ง์กฑ ์ ๋ณํฉ(merge) → github์์ pull request merge ๋ฒํผ ํด๋ฆญ