Git - tobyseo/open GitHub Wiki
๋ฒ ์คํธ ํ๋ํฐ์ค
- commit ํ๊ธฐ ์ ์ git diff๋ก ์ฝ๋ ๋ฆฌ๋ทฐ (๋ฒ๊ทธ ๋ฐฉ์ง)
- git add --patch
- git diff --cached
- ์๊ณ , ๋ ผ๋ฆฌ์ ์ธ ์ปค๋ฐ (์ผ์ฐ ์์ฃผํ๊ธฐ)
-
์ ๊ด๋ฆฌ๋ ์ ์ฅ์์ ์ปค๋ฐ ๋ก๊ทธ๋ ํ๋์ ์คํ ๋ฆฌ๋ค
-
git status์ git diff๋ก ๋ณ๊ฒฝ์ฌํญ ๋ฆฌ๋ทฐ์ ๋จ์ผํ ๋ ผ๋ฆฌ์ ๋จ์, ๋จ์ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช ๋์ด์ผํจ.
-
ํฌ๊ฒ ๋ญ์ณ์๋ ์ปค๋ฐ์ ๋จ์
- "์ด์#123 : ๋น๋์ค ์๋ฆฌ์ฆ๋ฅผ ์ํ ํ๋ก๊ทธ๋ ์ค๋ฐ ์ถ๊ฐ" vs "์ด์#123 : ํ๋ก๊ทธ๋ ์ค๋ฐ๋ฅผ ์ํ jQuery๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ"
- ์ฝ๋์ ํ์คํ ๋ฆฌ๊ฐ ๋ฌด์ฉ์ง๋ฌผ์ด๋จ, ์ฝ๋ ๊ฐ๋ฐ ์ ์ฐจ๊ฐ ๋ฌปํ๋ฒ๋ฆผ.
- ๋๋ฒ๊น ์์ ์ปค๋ฐ ๋จ์๊ฐ ์๊ฒ ๋๋ ์ ธ์๋ ํธ์ด ์ด๋ค ๋ผ์ธ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋์ง ์๊ธฐ ์ฉ์ดํจ
-
๊ฐ์ด๋๋ผ์ธ
- ์ ๋ ํ๋์ ์ปค๋ฐ์ ์ฌ๋ฌ๊ฐ์ ๋ชจ๋๋ค์ ๋ฌถ์ด ๋ฃ์ง ์๋๋ค. (์ฌ๋ฌ ๋ชจ๋์ด ํ์ดํธํ๊ฒ ์ปคํ๋ง๊ด๊ณ๊ฐ ์๋ ์ด์)
- ์ ๋ชจ๋์ ์์ฑํ ๋ ๊ทธ๋ฃจํฐ๊ธฐ ํจ์๋ค์ ๋จผ์ ์์ฑํ๊ณ , ๋์์์ ๊ทธ ๊ฒ๋ค์ ์ฑ์๋ฃ๋๋ค.
- ํญ์ API๋ ๋ฒจ์ ํจ์๋ค์ ์์ฑํ๊ณ ์ปค๋ฐํ๋ค. (๊ทธ ๊ฒ๋ค์ ์ฌ์ฉํ๋ ํจ์๋ค์ ์์ฑํ๊ณ ์ปค๋ฐํ๊ธฐ์ ์)
- ๋ธ๋์น์ ๊ด๋ จ์๋ ๋ฒ๊ทธ ํฝ์ค๋ค์ ์ ๋ธ๋์น์ ๋ณ๋์ ์ปค๋ฐ์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- ๋ช ๋ น์ด๋ฅผ ์ํ alise๋ฅผ ์ฌ์ฉํ ๊ฒ (~/.gitconfig์ ์ถ๊ฐ)
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr, %cn)%Creset' --abbrev-commit --date=relative
hist = log --graph --pretty=format:'%h %ad | %s%d [%an]' --date=short
last = log -1 HEAD
unstage = reset HEAD --
amend = commit --amend -C HEAD
co = checkout
ci = commit
st = status
br = branch
- ๊นจ๋ํ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๋จ๊ฒจ๋ผ git merge๋ฅผ ๋ง์ด ์ฐ๊ฒ๋๋ฉด ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ด๋ ค์์ง (git rebase์ git merge์ ์กฐํฉ์ ์ฌ์ฉํ ๊ฒ)
- push ์ ์ rebase
- ์ฉ๋์ ์๋ง๊ฒ pull request๋ฅผ ์ฌ์ฉํ๋ผ.
- ํ์๋ค์ด ๋ฌด์์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ ์ ์๊ฒ ํด์ค (๋ณ๊ฒฝ์ฌํญ ์ถ์ , ์ปค๋ฐ ์ฐ๊ณ, ๊ฐ๋ฐ ์ค ํ์ , ๋จธ์ง ์ ์ฝ๋ ๋ฆฌ๋ทฐ)
- ๋จธ์ง ์ปค๋ฐ์ด ๋์ ๋๋๊ฒ ์ ์ผํ ๋จ์ ์ด๊ธด ํ์ง๋ง, ํ์ผ๋ก ์ผํ ๋ ์ด ์ ์ ์์๋๋ค.
- ์ ๋ ๊ณต์ ๋ ์ปค๋ฐ์ ๋ฆฌ๋ฒ ์ด์ค ํ์ง ๋ง๋ผ
- ๊ท์น : ํ ๋ฒ ์๊ฒฉ ์ ์ฅ์์ ํธ์ฌํ ์ปค๋ฐ์ ๋ฆฌ๋ฒ ์ด์คํ์ง ์๊ธฐ
- ์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ง๊ฐ๋จ๋ฆฌ์ง ์๊ฒ ํด์ฃผ๊ณ , ๋ด๊ฐ ์์ ํ ๋ฒ๊ทธ๋ ์ค์์ ๋ก๊ทธ๋ ๋ณด์กด์์ผ์ค๋ค.
--
http://kentnguyen.com/development/visualized-git-practices-for-team/
rebase ์ ์ฌ์ด ์ ์ : ๋ง์ง๋ง ํธ์ฌ ๋ถํฐ ๋ก์ปฌ์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ณ๊ฒฝ ์ฌํญ๋ค ์์ ๋๋๊ฒ. ๋ธ๋์น ๋๋๊ธฐ, ์์ฃผ ๋จธ์งํ๊ณ , ์ฑํฌ๋ฅผ ์ ์งํ๊ธฐ
- ๋์ค์ ๋จธ์งํ ๋ ๋ณต์กํจ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก master๋ฅผ ๋จธ์ง
- ์ปค๋ฐ, ๋จธ์ง๋ฅผ ์์ฃผ ํ ๊ฒ http://kentnguyen.com/wp-content/uploads/2012/01/git_merge_often.png
์ข ๋ ๋์ Git ์ฌ์ฉ์ ์ํ ๋ช ๋ น์ด๋ค
merging vs rebasing
git rebase๋ git merge์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ. ๋ธ๋์น์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ๋ธ๋์น์ ๋ณํฉ. https://www.atlassian.com/git/images/tutorials/advanced/merging-vs-rebasing/01.svg ์ ๊ทธ๋ฆผ ์ฒ๋ผ master branch์์ ๊ฐ๋ผ์ ธ ๋์จ ์ด์ ๋ธ๋์น์์ ์์ ์ ํ๊ณ ์๋๋ฐ, Master ๋ธ๋์น๊ฐ ๋ณ๊ฒฝ ๋์๋ค๋ฉด ๋ณ๊ฒฝ ์ฌํญ ๋ฐ์์ ์ํด rebase ๋๋ merge๋ฅผ ํํ ์ ์์
git checkout feature git merge master
์ด๋ ๊ฒ ํ๋ฉด ๋จธ์ง๋จ https://www.atlassian.com/git/images/tutorials/advanced/merging-vs-rebasing/02.svg
์ด๋ฐ ํํ๋ก ์ถ๊ฐ์ ์ธ ์ปค๋ฐ์ด ํ๋ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ ๋จธ์ง์ ์ฅ์ ์ ๋นํ๊ดด์ , ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ธ๋์น๋ ์๋ฌด๊ฒ๋ ๋ฐ๋์ง ์์์.
rebasing์ด ๊ฐ์ง๊ณ ์๋ ์ ์ฌ์ ์ํ ์์ธ์ ๋ฐฉ์งํจ. ๋ฐ๋ฉด์ ์ ๋๋์ง ์์ ๋จธ์ง ์ปค๋ฐ๋ค์ด ๋์ด๋๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ํ์คํ ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ด๋ ค์์ง ์๋ ์์.
๋ฆฌ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ
git checkout feature git rebase master
feature ๋ธ๋์น ์ ์ฒด๋ฅผ ๋ง์คํฐ ๋ธ๋์น์ ๋์ผ๋ก ์ด๋ํ๊ณ , ๋ง์คํฐ ๋ธ๋์น์ ๋ชจ๋ ์๋ก์ด ์ปค๋ฐ์ ๋ฐ์ํจ. ๋จธ์ง์ ๋ฌ๋ฆฌ ์๋ก์ด ์ปค๋ฐ๋ค์ ์์ฑํ๋ฉด์ ํ์คํ ๋ฆฌ๋ฅผ ๋ค์ ์ฐ๊ฒ๋จ
https://www.atlassian.com/git/images/tutorials/advanced/merging-vs-rebasing/03.svg ์ด๋ฏธ์ง๋ ์ด์ ๊ฐ์
์ฅ์ ์ ๊นจ๋ํ ํ์คํ ๋ฆฌ๋ฅผ ์ป๊ฒ๋จ, ์์ ํ ์ ํ์ ์ธ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ git log, git bisect, git gitk๋ฑ์ผ๋ก ํ์ํ๊ธฐ๊ฐ ์ฌ์
์ด๋ ๊ฒ ์ ๊ฒ๊ฐ์ ์ปค๋ฐ ํ์คํ ๋ฆฌ์๋ ํธ๋ ์ด๋์คํ๊ฐ ์์ ํ์คํ ๋ฆฌ๋ฅผ ๋ค์ ์์ผ๋ก ์ ์ฌ์ ์ผ๋ก ํ์ ์ํฌํ๋ก์ฐ์ ํฐ ์ง์ฅ์ ์ด๋ํ ์ ์์
--
์ธํฐ๋ํฐ๋ธ ๋ฆฌ๋ฒ ์ด์ฑ https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EB%8B%A8%EC%9E%A5%ED%95%98%EA%B8%B0#_squashing
--
commit ์ ๊ฐ๋ฆฌํค๋ ์๋์ ์ธ ๋ฐฉ๋ฒ ^ : ๋ถ๋ชจ ^์ซ์ : ์ซ์๋ฒ์งธ ๋ถ๋ชจ (๋จธ์ง ์ปค๋ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ) ~ : ๋ถ๋ชจ ~์ซ์ : ์ซ์๋ฒ์งธ ๋ถ๋ชจ (์กฐ๋ถ๋ชจ) ์์ : https://www.atlassian.com/git/images/tutorials/advanced/refs-and-the-reflog/02.svg
--
๋๋๋ฆฌ๊ธฐ (reset, checkout, revert)
reset ๋ธ๋์น์ ๋์ ๋ค๋ฅด ์ปค๋ฐ์ผ๋ก ์ด๋ํ๋ ๊ฒ. ๋ค์๊ณผ ๊ฐ์ด ์ปค๋ฐ๋ค์ ์ง์ฐ๋๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํจ.
git checkout hotfix
git reset HEAD~2
์ด๋ ๊ฒ ํ๋ฉด ๋์ ๋ ์ปค๋ฐ์ ๋๊ธ๋ง ์ปค๋ฐ(๊ฐ๋น์ง ์ปฌ๋ ์ ๋์)์ด ๋๋ค. https://www.atlassian.com/git/images/tutorials/advanced/resetting-checking-out-and-reverting/02.svg
--soft : ์ปค๋ฐ ํ์คํ ๋ฆฌ์๋ง ์ํฅ์ ์ฃผ๊ณ , ์คํ ์ด์ง๋ ์ํน ๋๋ ํ ๋ฆฌ์๋ ์ํฅ์ ์ฃผ์ง์์ --mixed : ๊ธฐ๋ณธ๊ฐ, ์ปค๋ฐ ํ์คํ ๋ฆฌ์ ์คํ ์ด์ง ์ํฅ์ ์ค --hard : ์ปค๋ฐ ํ์คํ ๋ฆฌ, ์คํ ์ด์ง, ์ํน๋๋ ํ ๋ฆฌ ๋ชจ๋์ ์ํฅ์ ์ค .
๊ฐ์ฅ ๋ง์ด ์ฐ๋ ๊ฒฝ์ฐ
- git reset --mixed HEAD^ : ์ต๊ทผ ์ปค๋ฐ ์ทจ์ (์คํ ์ด์ง๋ ํจ๊ป ์ทจ์)
--
checkout ๋ธ๋์น ๋์ ์ปค๋ฐ ์ฃผ์๋ฅผ ํตํด check out ๊ฐ๋ฅ. ๋ธ๋์น์ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๊ฐ์ ์ผ์ ํจ. HEAD์ฐธ์กฐ๋ฅผ ํน์ ํ ์ปค๋ฐ์ผ๋ก ์ฎ๊น. ์๋ฅผ ๋ค๋ฉด ๋ค์ ๋ช ๋ น์ ํ์ฌ ์ปค๋ฐ์ ์กฐ๋ถ๋ชจ๋ก ์ฒดํฌ์์ ํจ.
git checkout HEAD~2
https://www.atlassian.com/git/images/tutorials/advanced/resetting-checking-out-and-reverting/05.svg
์ค๋๋ ๋ฒ์ ์ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณผ๋ ์ ์ฉํ์ง๋ง, ํ์ฌ HEAD๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ธ๋์น ์ฐธ์กฐ๊ฐ ์์ด์ deteched HEAD ์ํ๊ฐ ๋จ. ์ปค๋ฐ์ ํ๊ณ ๋ค๋ฅธ ๋ธ๋์น๋ก ์ค์์นญ์ ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ๋ค์ ์์ด๋ฒ๋ฆด ์๊ฐ ์์, ๋๋ฌธ์ ์ปค๋ฐํ ๋ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ๋๊ฒ ์ข์.
--
revert ์๋ก์ด ์ปค๋ฐ์ ์์ฑํ์ฌ ๋๋๋ฆฌ๊ธฐ๋ฅผ ํ๋ ๋ฐฉ๋ฒ, ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ์์
git revert HEAD~2
https://www.atlassian.com/git/images/tutorials/advanced/resetting-checking-out-and-reverting/06.svg
--
stash https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning
--
์ฐธ๊ณ ์๋ฃ