โ๐ป 31์ผ ๊ณต๋ถ ์ด์ผ๊ธฐ.
์๊ฐ์ ์ผ๋ก ๋ธ๋์น๋ค์ ์ํฉ์ ๋ณผ ์ ์๋ ๊ฒ์ ๋งํ๋๋ฐ VSCode์์ ํ ๋ฒ ์ดํด๋ณด์.
๋จผ์ VSCode์์ git graph
๋ฅผ ๊ฒ์ํด ์ค์นํด์ค๋ค.
๊ทธ ํ ๋ธ๋์น๋ฅผ ๋ณด๊ณ ์ ํ๋ ํด๋์์ VSCode๋ฅผ ์ด๊ณ
git graph ์์ด์ฝ์ ๋๋ฅด๋ฉด ์ค๋ฅธ์ชฝ์ ๋ธ๋์น๋ค์ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ๋ณผ ์ ์๋ค.(๋ฌผ๋ก ์ง๊ธ์ ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ ๋ค๋ฅด๊ฒ ์ ๋ณด์ด๋ ๊ฒ ๋ฟ!)
๊ทธ๋ฌ๋ฉด ์ค์ตํ๊ฒฝ์ ์ง์ ๋ง๋ค๋ฉด์ Git Graph๊ฐ ์ด๋ป๊ฒ ๋ณํํ๋์ง ์ดํด๋ณด์.
'log_project'๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง Remote Repository๋ฅผ ์์ฑํ๊ณ ๋งํฌ๋ฅผ ๋ณต์ฌํ๋ค.
๋งํฌ : https://github.com/castlemi99/log_project.git
'log_project'๋ฅผ Local Repository์ ๋ณต์ ํ๋ค.
์ด์ ์ด๊ณณ์ ํ์ผ์ ์ถ๊ฐํด๋ณด์.
log_project
ํด๋์ ๋ค์ด๊ฐ ํ์ผ์ ํ๋ ์์ฑํด์ฃผ์๋๋ฐ cat > ํ์ผ๋ช
๋ช
๋ น์ด๋ฅผ ์ฐ๋ฉด ๋๋ค. ํ์ง๋ง ์ด ๋ํ, ๋ฆฌ๋
์ค/๋งฅ ๋ช
๋ น์ด๋ผ์ ์๋์ฐ์ธ ๋๋ echo. ๋ด์ฉ > ํ์ผ๋ช
์ ์ด์ฉํด์ฃผ๊ณ commitํด์ฃผ์๋ค.(์์ง ๊นํ๋ธ์๋ ์ฌ๋ผ๊ฐ์ง ์์ ์ํ!)
์ด์ ๊ฐ์ด ๋ณํ ์ํ๋ฅผ ํ์ธํ ์ ์์๋ค.
dev
๋ผ๋ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ dev
์ hello.py๋ฅผ ์์ ํ ํ modify 2๋ก commitํด์ฃผ์๋๋ ์์ ๊ฐ์ด ์์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.git log
๋ฅผ ์
๋ ฅํ๋ฉด ํ์ฌ ๋ธ๋์น์ ๋ณ๊ฒฝ์ด๋ ฅ์ ํ์ธํ ์ ์๋ค.
main branch์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ํ์ธํด๋ณด์.
์ต์ ์์ผ๋ก ๋ํ๋๋๋ฐ, ์์ ๋ง๋ค์๋ create์ modify1์ ํ์ธํ ์ ์๋ค.
dev branch์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ํ์ธํด๋ณด์.
dev ๋ธ๋์น์์ ๋ณ๊ฒฝํ modify2f๋ฅผ ํ์ธํ ์ ์๋ค!
Git์ ๊ธฐ๋ณธ ์๋ํฐ๋ฅผ ์ค์ ํ ์ ์๋ค.
git config --global core.editor "์๋ํฐ์ด๋ฆ --wait"
--wait
์ต์
์ ์ํฉ์ ๋ฐ๋ผ ์ฐ๋ฉด ๋๋๋ฐ, command line์ผ๋ก VSCode๋ฅผ ์คํ์์ผฐ์ ๋ VSCode๋ฅผ ๋ซ์ ๋๊น์ง command๋ฅผ ๋๊ธฐ ์ํ๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋๋ VSCode๋ฅผ ๊ธฐ๋ณธ ์๋ํฐ๋ก ์ค์ ํ ๊ฒ์ด๋ฏ๋ก
git config --global core.editor "code --wait"
๋ฅผ ์คํํด์ฃผ์๋ค.
git diff
๋ ๋ฒ์ ๋ณ ์ฐจ์ด์ ์ ์กฐํํ ์ ์๋ ๋ช
๋ น์ด์ด๋ค. command์์ ์ด๋ฅผ ์กฐํํ๋ฉด ์์ด ๋ง์์๋ก ๋ณต์กํ ์ ์๋๋ฐ ๋ณด๋ค ๋ณด๊ธฐ ํธ๋ฆฌํ VSCode๋ฅผ ํตํด ์กฐํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
git config --global -e
์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด ์ด์ ์ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํ VSCode ๋๋ vim์ด ์คํ๋ ๊ฒ์ด๋ค.
[diff]
tool = vscode
[difftool "vscode"]
cmd = "code --waite --diff $LOCAL $REMOTE"
๊ทธ ํ VSCode๋ก git diff tool์ ์ค์ ํ๊ฒ ๋ค๋ ์๋ฏธ์ ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํ์์ผ์ฃผ๋ฉด ๋๋ค.
๋ธ๋์น/๋ฒ์ ๋ณ ์ฐจ์ด์ ์ ์กฐํํ ์ ์๋ ๋ช ๋ น์ด์ด๋ค.
๐ Local Branch ๊ฐ ๋น๊ต(์ diff / ์๋ difftool)
git diff ๋ธ๋์น์ด๋ฆ1 ๋ธ๋์น์ด๋ฆ2
git difftool ๋ธ๋์น์ด๋ฆ1 ๋ธ๋์น์ด๋ฆ2
diff | difftool |
---|
๐ Commit ๊ฐ ๋น๊ต(์ diff / ์๋ difftool)
git diff commithash1 commithash2
git difftool commithash1 commithash2
commithash
๋ git log
๋๋ remote
๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
๋
ธ๋ ๋ถ๋ถ์ด commit hash์ด๋ค. ๋น๊ตํ๊ณ ์ถ์ commit hash๋ฅผ ๋ณต์ฌํ ํ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
๐ ๋ง์ง๋ง Commit๊ณผ ์ด์ Commit ๋น๊ต(์ diff / ์๋ difftool)
git diff HEAD HEAD^
git difftool HEAD HEAD^
๐ ๋ง์ง๋ง Commit๊ณผ ํ์ฌ ์์ ์ฌํญ ๋น๊ต(์ diff / ์๋ difftool)
git diff HEAD
git difftool HEAD
ํ์ผ์ ์์ ํ ํ commit์ ํ์ง ์์ ์ํ( = ํ์ฌ ์์ ์ฌํญ)์ ๋ง์ง๋ง commit์ ๋น๊ตํ ์ ์๋ค.
๐ Local๊ณผ Remote Branch ๊ฐ ๋น๊ต(์ diff / ์๋ difftool)
git diff ๋ธ๋์น์ด๋ฆ1 origin/๋ธ๋์น์ด๋ฆ2
git difftool ๋ธ๋์น์ด๋ฆ1 origin/๋ธ๋์น์ด๋ฆ2
๋ธ๋์น๋ค์ ๋ค์ ๋ณํฉํด์ฃผ๋ ๊ณผ์ ์ ๋งํ๋ค.
'merge_project' Remote Repository ์์ฑ
https://github.com/castlemi99/merge_project.git
'git_ws' Local Repository์ 'merge_project'๋ฅผ ๋ณต์
main
๋ธ๋์น์์ ํ์ผ์ ํ๋ ์์ฑ ํ, commit
dev
๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ํ์ผ์ ์์ ํ ํ commit
>>
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด์ฉ์ ๋ง๋ถ์ฌ์ค๋ค.
git config --global -e
๋ฅผ ํตํด Git Configuration ํ์ผ์ ์ด๊ณ ์๋ Git Merge ์ค์ ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
[merge]
tool = vscode
[mergetool "vscode"]
cmd = "code --wait $MERGED"
์ ์ค์ ์ ๋ค ํ๋ค๋ฉด
git merge ๋ณํฉํ ๋ธ๋์น์ด๋ฆ
์ ํตํด ํ์ฌ ์์นํ ๋ธ๋์น์ ๋ค๋ฅธ ๋ธ๋์น๋ฅผ ๋ณํฉํ ์ ์๋ค.
ํ์ฌ ์ํ๋ฅผ ์ ๋ฆฌํ๋ฉด ํ๋ ํ์ผ์ด ์๋ main
์์ dev
๋ธ๋์น๋ฅผ ์์ฑํด ์ฃผํฉ ํ์ผ์ด ๋ ์ํ์ด๋ค. ์ด๋ฅผ ๋ค์ main
์ ๋ณํฉ์์ผ๋ณด์.
git log๋ฅผ ๋ณด๋ฉด main์๋ modify 1์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ ๋ธ๋์น๋ค์ ๋ณํฉํ ๋ ๊ฐ์ ๋ถ๋ถ์ ์์ ํ๋ค๋ฉด Conflict์ ์ผ์ผ์ผ ์ฌ์ฉ์๋ค์ด ์๋ ผํ์ฌ ์์ ํ๋๋ก ์๋ ค์ค๋ค.
main
์์ ๋ง๋ "Hello, noma." ํ์ผ์ ๋ธ๋์น๋ฅผ ์์ฑํด ์์ ํ๋๋์(์ฃผํฉ์) main
์์๋ "Hello, zero."๋ผ๊ณ ์์ ํ๋ค. ์ดํ ๋ณํฉํ๋ ค๊ณ ํ๋ฉด(ํน์ Push, Pullํ๋ ๊ณผ์ ์์๋) Conflict๊ฐ ์ผ์ด๋ ์ ์๋ค.
main
๋ธ๋์น์์ "Hello, noma."ํ์ผ ์์ฑ
๋ธ๋์น dev2
๋ฅผ ์์ฑํ๊ณ , main
๋ธ๋์น์์ "Hello, zero."๋ก ํ์ผ ์์
dev2
๋ก ์ด๋ํ, "Hello, base."๋ก ํ์ผ ์์
main
์ผ๋ก ๋์๊ฐ mergeํด๋ณด์. ๊ฐ์ ๋ถ๋ถ์ ์์ ํ๊ธฐ ๋๋ฌธ์ Conflict๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
Conflict ๋ฐ์ ์ดํ git mergetool
์ ํ๋ฉด Conflict๋ ํ์ผ๋ค์ด ์ด๋ฆฌ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋, "Hello, base."๋ฅผ ์ ํํ๋ค๊ณ ํ๋ฉด "Result" ๋ถ๋ถ์ ์ ํํ ๋ด์ฉ์ ์์ ํด์ฃผ๊ณ ์ค๋ฅธ์ชฝ ์๋ "Complete Merge"๋ฅผ ํด๋ฆญํด์ค๋ค.
๊ทธ ํ Conflict๋ฅผ ํด์ ํด์ฃผ๊ณ ๋ค์ commit์ ํด์ฃผ๋ฉด ๋๋ค.
git add ํ์ผ๋ช
git commit
์ ํ๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ํ์ผ์ด ํ๋ ๋จ๋๋ฐ ํ์ธ์ฐจ ๋จ๋๊ฑฐ๋ผ ์ ์ฅํ๊ณ ๋ซ์์ฃผ๋ฉด ๋๋ค.
git log
๋ฅผ ํตํด ํด๊ฒฐ๋ ๊ฒ์ ํ์ธํ ์๋ ์๋ค.
์ค์ํ commit์ Tagging์ ํด์ ๋ฐ๋ก ์ฐพ์๊ฐ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
'tag_project' Remote Repository ์์ฑ
'git_ws' ํด๋ ์๋์ 'tag_project'๋ฅผ ๋ณต์
'hello.txt'ํ์ผ์ ์์ฑํ ํ ์์ ํ๋ฉฐ commit์ 3๋ฒ ํด๋ณด์.
Remote Repository์๋ commitํด์ฃผ์.
git tag ํ๊ทธ์ด๋ฆ
์ ์คํํด์ฃผ๋ฉด ๋ง์ง๋ง ๋ฒ์ ์ ํ๊ทธ์ด๋ฆ์ด ๋งค๊ฒจ์ง๋ค.
๐ ํน์ ๋ฒ์ ์ Tag ๋ฌ๊ธฐ
git tag ํ๊ทธ์ด๋ฆ commithash
์ด๋ ๊ฒ Local Repository์ Tagging์ ํด๋ Remote Repository์๋ ๊ณต์ ๊ฐ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ Tag๋ฅผ Remote Repository์ Push ํด์ฃผ์ด์ผํ๋ค.
๐ Remote Repository์ Tag Push
git push origin ํ๊ทธ์ด๋ฆ
๐ Tag ๋ชฉ๋ก ํ์ธ/ Tag ์์ธ ์ ๋ณด ํ์ธ
git tag <-- ๋ชฉ๋ก ํ์ธ -->
git show ํ๊ทธ์ด๋ฆ <-- ์์ธ์ ๋ณด ํ์ธ -->
๐ Tag ์ญ์
git tag --delete ํ๊ทธ์ด๋ฆ
์ด ๋ํ Local์์๋ง ์ญ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Remote์์๋ ์ญ์ ํด์ฃผ๊ธฐ ์ํด์ ์๋ ์ฝ๋๋ฅผ ์คํํด์ฃผ๋ฉด ๋๋ค.
git push --delete origin ํ๊ทธ์ด๋ฆ
ํ๋ก์ ํธ์ ๋ํ ์ค๋ช , ์ฌ์ฉ๋ฐฉ๋ฒ, ๋ผ์ด์ผ์ค, ์ค์น๋ฒ๊ณผ ๊ฐ์ ๋ถ๋ถ์ ๋ํด ๊ธฐ์ ํ๋ ํ์ผ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฉฐ์น ์ ์ prophet
์ ๋ํด ํ์ตํ๋ ๋ ๋ณด์๋ Github๋ฅผ ์ดํด๋ณด๋ฉด
์์ธํ ํด๋น ๋ด์ฉ์ ๋ํ ์ค๋ช ์ ์ ์ด๋ ๊ฒ์ด ๋ณด์ธ๋ค.
๊นํ๋ธ README.md ์ค๋ฅธ์ชฝ์ ์์นํ ์ฐํ ๋ชจ์์ ํด๋ฆญํด์ ๋ง๋ค ์ ์๋ค.
README๋ Markdown ๋ฌธ๋ฒ์ ๋ฐ๋ผ์ Velog ์์ฑ ๋ฐฉ๋ฒ์ด๋ ๋๊ฐ๋ค.