Git - f-lab-edu/myinsta GitHub Wiki
Git
์ ์
- ์๊ฒฉ ์๋ฒ(remote server)์ ์ ์ฅ์(repository)์ ๋ก์ปฌ ์์ค๋ค์ ์ ์ฅํ๋ฉฐ ๋ฒ์ ์ ๊ด๋ฆฌ ํ๋ ์์คํ
์๊ฒฉ ์ ์ฅ์(repository)
- ๋ก์ปฌํ์ผ๋ค์ ์ ๋ก๋ ํ์ฌ ๋ณด๊ด์ํค๋ ์ ์ฅ์
- ํ๋ก์ ํธ ํ๊ฐ๋น ํ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ณดํธ์
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ํ๊ฐ์ ์๊ฒฉ ์ ์ฅ์์ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ธฐ๋ ํ๋ค.
- ๋ฆฌํ์งํ ๋ฆฌ๋ URL๋ก ํํ๋๋ค
- https://github.com/user/repository.git
์๊ฒฉ ์ ์ฅ์ ์ ๊ณต ํด์ฃผ๋๊ณณ(์๊ฒฉ ์๋ฒ)
- GitHub
- Bitbucket
- GitLab
์๊ฒฉ ์ ์ฅ์ ์ด๋ฆ
- ์๊ฒฉ ์ ์ฅ์์ ๊น์ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑ์ ์ด๋ฆ์ ์ ํด์ค์ผํ๋ค
- ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ด origin
- ์๊ฒฉ ์ ์ฅ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ ์์ฒด๋ฅผ remote๋ผ๊ณ ๋ช ๋ช ํ๋ค
๋ก์ปฌ ํ์ผ
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉ์ค์ธ ๋ก์ปฌ์ปดํจํฐ์ ํ์ผ
์๋์๋ฆฌ
- ๋ก์ปฌ ํ๊ฒฝ์ ํ์ผ์ ์ถ์ ํ๊ณ ์๋ค๊ฐ ์ฌ์ฉ์๊ฐ ํ์ผ์ ์์ ํ๋ฉด ๋ณ๊ฒฝ์ ๊ฐ์ง, ์์ ๋ด์ฉ๋ค์ค ์ ์ฅ ์ค์ธ ์๊ฒฉ ์๋ฒ์ ๋ฐ์ ํ๊ณ ์ถ์ ํ์ผ์ ๊ณจ๋ผ์ ๋ฐ์
๊น 3๊ฐ์ง ๊ธฐ๋ณธ ๊ธฐ๋ฅ
push
- ๋ณ๊ฒฝ๋ ๋ก์ปฌ ํ์ผ์ ์๊ฒฉ ์ ์ฅ์๋ก ๋ฐ์ด ์ฌ๋ฆฌ๋ ๊ธฐ๋ฅ
pull, fetch
- ์๊ฒฉ ์ ์ฅ์์ ํ์ผ์ ๋ก์ปฌ ์ปดํจํฐ๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ
๋ธ๋์น
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์์ฑํ๋ ๋ฉ์ธ์ผ๋ก ๋ถํฐ ๋ถ๋ฆฌ๋ ์์ ๊ณต๊ฐ, ์๋กญ๊ฒ ์์ฑ๋ ๋ธ๋์น์ ๋ฉ์ธ์ ๊ฐ์ ์ํ๋ฅผ ๊ฐ๋๋ค.
- ๊น์ ์ด์ฉํ์ฌ ์ฒ์ ์ด๊ธฐํ์ ๊ธฐ๋ณธ์ ์ผ๋ก master ๋ธ๋์น๊ฐ ์์ฑ๋๋ค.
- ์์ ์ด ์๋ฃ๋์ด ์ ์์ ์ผ๋ก ์ํ๋๋ ๋ธ๋์น๋ ๋ง์คํฐ๋ก ๋ค์ ํฉ๋ณ ์ํจ๋ค.
๋ช ๋ น์ด
clone
- ์๊ฒฉ ์๋ฒ์ ์กด์ฌํ๋ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ์ปดํจํฐ๋ก ์นดํผ ํ๋ ๋ช ๋ น์ด
- ๋ก์ปฌ ์์คํ ์์ ์นดํผํ๊ณ ์ ํ๋ ํด๋๋ก ์ด๋ํ์
- git clone repositoryURL ์ฌ์ฉ
pull
- ํด๋ก ํ์ ์๋ก์ด ๋ณ๊ฒฝ์ฌํญ์ ์๊ฒฉ์๋ฒ์ ์๊ธฐ๋ฉด ํด๋น ๊ธฐ๋ฅ์ ๋ก์ปฌ๋ก ๋ฐ์ํด์ฃผ๋ ๋ช ๋ น์ด
- git pull //ํ์ฌ ๋ด ๋ก์ปฌ ๋ธ๋์น์ ๊ฐ์ ์ด๋ฆ์ ๋ฆฌ๋ชจํธ ์๋ฒ ๋ธ๋์น๋ฅผ ์ฌ์ฉ
- git pull origin master //origin๋ฆฌ๋ชจํธ ์๋ฒ์ master ๋ธ๋์น๋ฅผ ์ฌ์ฉ
fetch
- ๋ณ๊ฒฝ๋ด์ฉ์ ๋ฐ์๋ ์ค๋ ๋ก์ปฌ ์ปดํจํฐ์ ๋ฐ์์ ํ์ง ์๋๋ค.
- ๋ณดํต fetch๋ก ๋ณ๊ฒฝ ์ฌํญ ํ์ธํ pull๋ก ๋ฐ์์ํจ๋ค
- git fetch
add
- ์ปค๋ฐ์ ์ ๋ก์ปฌ์์ ๋ณ๊ฒฝ๋์ด ์๊ฒฉ ์๋ฒ์ ๋ฐ์ํ๊ณ ์ถ์ ํ์ผ์ ์ถ๊ฐํ๋ ๋ช ๋ น์ด
- git add <๊ฒฝ๋ก> ํ๋ฉด ํด๋น ๊ฒฝ๋ก์ ์๋ ๋ชจ๋ ํ์ผ์ ์ถ๊ฐ ํ๋ค
- ์๋ฅผ ์คํ ์ด์ง ํ๋ค๊ณ ํ๋ค
commit
- add๋ช ๋ น์ด ์ดํ์ ํด๋น ํ์ผ๋ค์ ์คํ ์ด์ง ํ ์ดํ์ ์ปค๋ฐ์ ์ฌ์ฉ
- ์ปค๋ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฒ์ ์ ๋๋๋ค๊ณ ํ๋ค.
- ๊ฐ๊ฐ์ ์ปค๋ฐ์ ๊ณ ์ ํ ํด์ฌ๊ฐ์ ๊ฐ์ง๋ค
- ์ด ํด์ฌ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฒ์ ๋ณ๋ก ์ด๋์ ํ ์ ์๋ค๊ณ ํ๋ค.
- ์ปค๋ฐ ํ ๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ ์์๋ค
- add๋ก ์ถ๊ฐ๋ ๋ณ๊ฒฝ ํ์ผ์ ํ๋์ ๋ฒ์ ์ผ๋ก ํฌ์ฅํ๋ ์์ ์ด๋ผ๊ณ ์๊ฐ ํ๋ฉด๋๋ค.
push
- add, commit์ดํ ํด๋น ๋ณ๊ฒฝ ๋ด์ฉ์ ์๊ฒฉ ์๋ฒ์ ๋ฐ์ํ๋ ๋ช ๋ น์ด
- ์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ์ผ ์ง์ ์ ์ผ๋ก ์ ์ฅ์์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ค.
- git push origin master // origin ๋ฆฌ๋ชจํธ ์๋ฒ์ master ๋ธ๋์น๋ก ๋ฐ์
git ์ฐธ๊ณ
- https://rogerdudler.github.io/git-guide/index.ko.html
- https://evan-moon.github.io/2019/07/25/git-tutorial/
- https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html
GitFlow
Merge Conflict
- ์๊ฒฉ ์ ์ฅ์ ์ฌ์ฉ์ ๋ฐ์ํ ์ ์๋ ์๋ฌ
- ๋์์ ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ์๋ก ๋ค๋ฅธ ์์ ์ด ์ด๋ฃจ์ด์ง ์ํฉ
- ๋์ค ํ๋๋ง ๋ฐ์, ์๋๋ฉด ์๋ฌด๊ฒ๋ ๋ฐ์ํ์ง ์์์ง ์ ํํ ์์๋ค.
๋ธ๋์น๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์์ ํฉ๋ณ ์ถฉ๋์ ์ํฉ์ ๋ฐฉ์ง ํ๊ธฐ์ํด ๊ฐ์ ๋งก์ ๊ธฐ๋ฅ๋ณ๋ก ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ๋ ๋ฆฝ๋ ํ๊ฒฝ์์ ๊ฐ์ ๊ฐ๋ฐ
๋ธ๋์น ์ ๋ต
- Git์ฌ์ฉ์ ์ด๋ป๊ฒ ํ๋ฉด ๋ธ๋์น๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌ ํ ์์์๊นํ๋ ๊ด์ ์์ ์ธ์ฐ๋ ์ ๋ต
- ๋ํฌ์ ์ผ๋ก GitFlow๊ฐ ์๋ค
GitFlow ์ ๋ต ์ค๋ช
- master์ develop ๋ธ๋์น๋ฅผ ๊ฐ์ง๊ณ ์์ํ๋ ์ ๋ต
- master๋ก๋ ์ ๋ ์ง์ ์ปค๋ฐ์ ํ์ง ์๋๋ค.
- develop์ ํ์ฌ ๊ฐ๋ฐ์ ์งํํ๊ณ ์๋ ๋ธ๋์น.
- develop์ผ๋ก ๋ถํฐ feature๋ณ๋ก ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ๊ธฐ๋ฅ๋ณ ๋ธ๋์น๋ฅผ ์ถ๊ฐ ์์ฑํ์ฌ ๊ฐ๋ฐ์ ์งํ.
- ์ถ์ฒ https://evan-moon.github.io/2019/07/28/git-tutorial-advanced/
- ์ ์ด๋ฏธ์ง๋ ํ๋(master)์์ ๋นจ๊ฐ(develop)์ ์์ฑํ์ฌ ์ด๋ก(AddTypeScript) ๋ถํ(kakaoLogin)๋ฑ์ feature ๋ณ๋ก ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ์๋ฃ ์ดํ develop์ผ๋ก merge์ํค๋ ํ๋ก์ ํธ ์งํ์ ๋ณด์ฌ์ฃผ๋ ๊ทธ๋ฆผ์ด๋ค.
- ์ถ์ฒ https://evan-moon.github.io/2019/07/28/git-tutorial-advanced/
- ์ดํ ๊ฐ๋ฐ์๋ฃ ์์ ์ด ์ค๋ฉด master๋ก๋ถํฐ release๋ฅผ ์์ฑ ๋ชจ๋ develop์ ๋ด์ฉ์ ๋ฐ์ ์ํจ๋ค realease๋ ๋ฐฐํฌ๋ง๋ค ์ํ ๋ธ๋์น ์ด๋ฏ๋ก ๋ฐฐํฌ๊ฐ ๋๋๋ฉด ๋ฒ๋ ค์ง๋ค
- ์ ์ด๋ฏธ์ง๋ realease๋ฅผ ์์ฑํ develop์ mergeํ๊ณ ์๋ฃ๊ฐ ๋์ด master๋ก merge๋๋ ํ๋ฆ์ ๋ณด์ฌ์ค๋ค
- ์ถ์ฒ https://evan-moon.github.io/2019/07/28/git-tutorial-advanced/
- ์ฆ๊ฐ์ Hotfix๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- ๊ฐ๋ฐ ๋์ค ๊ธด๊ธํ ๋ฒ๊ทธ ํฝ์ค๊ฐ ์ด๋ฃจ์ด ์ ธ์ผ ํ๋๊ฒฝ์ฐ develop์์ hotfix๋ถ๊ธฐ๋ฅผ ์์ฑํ๋ฉด ์ง๊ธ ์งํ์ค์ธ ํ ์คํธ๊ฐ ์์ ํ ์ด๋ฃจ์ด์ง์ง ์์ ๊ธฐ๋ฅ๋ค๋ ํฌํจ๋ ์๊ฐ ์์ด ์ด๊ฒฝ์ฐ์๋ master๋ก๋ถํฐ hotfix๋ธ๋์น๋ฅผ ์์ฑ ๊ณ ์นํ master๋ก ํฉ๋ณ ์ํจ๋ค
- ์ ๊ทธ๋ฆผ์์ ์ ๋ณด๋ฉด hotfix๊ฐ master๋ก ํฉ๋ณ๋์ดํ develop์ ์๋ ๊ธฐ๋ฅ์ธhotfix๋ด์ฉ์ ๋ฐ์ ์ํค๊ธฐ ์ํด ํฉ๋ณ ์ํค๋ ๋ชจ์ด์ ๋ณผ์์๋ค.
๋ธ๋์น ํฉ๋ณ Merge
์ ์
- ์๋ก๋ค๋ฅธ ๋๊ฐ์ ๋ธ๋์น๋ฅผ ์๋ก ํฉ์น๋ ๊ธฐ๋ฅ
๋ช ๋ น์ด
Merge
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํฉ๋ณ, merge commit์ ๋จ๊ธด๋ค
- git checkout master
- git merge feature
Merge and squash
- git checkout master
- git merge โsquash feature
- ์ผ๋ฐ ํฉ๋ณ์ ๋์ ๋ธ๋์น์ ๋ชจ๋ ์ปค๋ฐ์ ๊ทธ๋๋ก ํ๊ฒ๋ธ๋์น์ ๋ฐ์ํ์ง๋ง squash์ต์ ์ ์ฌ์ฉํ๋ฉด ๋์ ๋ธ๋์น์ ๋ชจ๋ ์ปค๋ฐ์ ํ๋์ ์ปค๋ฐ์ผ๋ก ํฉ์น๊ณ ํ๊ฒ ๋ธ๋์น์ ํฉ๋ณ ์ํจ๋ค
Rebase
- git checkout feature
- git rebase master
- ํฉ๋ณ ์ดํfeature๋ธ๋์น์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ด master์ ๋ด์ฉ์ธ๊ฒ์ฒ๋ผ ๋๋ค feature์ ๊ธฐ์ ์ด master์๋๊ฒ์ฒ๋ผ๋๋ค.
- ๋ฌธ์ ์
- ๋ค๋ฅธ ํ์๋ค์๊ฒ๋ ๋ฐ์์ํค๊ธฐ ์ํด์๋ ์๊ฒฉ ์๋ฒ์ master์ ๋ก์ปฌ์ master๋ฅผ ๊ฐ์ ๋ก ๋ณํฉํ์ฌ์ผ ํ๋ ์ํฉ์ด ๋ฐ์
- ์ถ์ฒ https://dzone.com/articles/merging-vs-rebasing
- ์์ ๊ฐ์ ์ํฉ์ด ๋๋ฉด ๋ชจ๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๊ผฌ์ด๊ฒ ๋ ์์๋ค.
- ๊ทธ๋์ ๋ฆฌ๋ฒ ์ด์ค ์ ์ ํญ์ squash๋ฅผ ์ฌ์ฉํ๋ค ํ๋๊ฒ์ด ์ข๋ค.
cherry pick
- git checkout master
- git cherry-pick #์ปค๋ฐํด์๋๋ฒ
- ๋ค๋ฅธ ๋ธ๋์น์์ ์ด๋ค ํ๋์ ์ปค๋ฐ๋ง ๋ด ๋ธ๋์น๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ
- ๋ณํฉ๋ณด๋จ ํด๋น ์ปค๋ฐ์ด ๋ด ๋ธ๋์น์ ์ปค๋ฐ๋๋ ํ์์ผ๋ก ๋ฐ์ ๋๋ค
stash
- ์์๋ก ์์ ๋ด์ฉ์ ์ ์ฅ
- git stash // ํ์ฌ ๋ณ๊ฒฝ๋ด์ฉ ์คํ์ ์ ์ฅ
- git stash list // ์คํ์ฌ ๋ชฉ๋ก์ ํ์ธ
- git stash apply //๊ฐ์ฅ ์ต๊ทผ์ ์คํ์ฌ๋ฅผ ๋ค์ ๋ถ๋ฌ์ด
- git stash brach-name // ์คํ์ฌ ์ด๋ฆ์ branch-name์ผ๋ก ์ง์ ํ๊ณ ์คํ์ ์ ์ฅ
- git stash apply branch-name // ์คํ์ ์ ์ฅ๋ branch-name์ ๊ฐ์ ธ์ด
- ์คํ์ FIFO์ด๋ฏ๋ก ์ด๋ฆ ๋ถ์ฌ ์ฌ์ฉ ํ๋๊ฒ์ ๊ถ์ฅ
Reset
- ์ง์ ํ ์ปค๋ฐ ๋น์๋ก ๋๋๋ฆฌ๊ธฐ, ์ง์ ์ปค๋ฐ ์ดํ์ ๋ชจ๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ ์ญ์ ๋จ
- git reset โhard #์ปค๋ฐํด์์ฝ๋
- hard soft mixed 3๊ฐ์ ์ต์
- hard ์ง์ ํ ์ปค๋ฐ ์ดํ์ ํ์คํ ๋ฆฌ ์ญ์ , ์ญ์ ๋ ๋ด์ฉ์ ๊ทธ๋๋ก ์ฌ๋ผ์ง
- soft ์ง์ ํ ์ปค๋ฐ ์ดํ์ ํ์คํ ๋ฆฌ ์ญ์ ์ญ์ ๋ ๋ด์ฉ๋ค์ ์คํ ์ด์ง(add)์ํ๋ก ๋์๊ฐ
- mixed ์ง์ ํ ์ปค๋ฐ ์ดํ์ ํ์คํ ๋ฆฌ ์ญ์ , ์ญ์ ๋ ๋ด์ฉ์ ์คํ ์ด์ง์ ์ฌ๋ผ๊ฐ์ง ์์ ์ํ
- ๊ธฐ๋ณธ์ mixed์ด๋ค
revert
- ์ปค๋ฐ์ ๋ฐ์ , ์ถ๊ฐ ๋ ์ปค๋ฐ์ด๋ฉด ์ญ์ , ์ญ์ ๋ ์ปค๋ฐ์ด๋ฉด ์ถ๊ฐ, ๊ฒฐ๊ณผ๋ ์ปค๋ฐ์ผ๋ก ๋ฐ์๋จ
- git revert #์ปค๋ฐํด์์ฝ๋
- git revert #์ปค๋ฐํด์์ฝ๋โฆ#์ปค๋ฐํด์์ฝ๋ // ๋ฒ์์ ์ปค๋ฐ์ ๋ชจ๋ ๋๋๋ฆผ
- git revert HEAD // ํ์ฌ ํค๋๊ฐ ์์นํ ์ปค๋ฐ์ ๋๋๋ฆฐ๋ค.