git์ VCS(Version Control System/๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
) ์ค ํ๋๋ก, ์ฝ๋ ๋ฟ๋ง ์๋๋ผ ํ
์คํธ ๋์์ธ ๋ ์ด์์ ํ์ผ ๋ชจ๋ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ค์ ํ๋ก์ ํธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋กํ๊ณ , ํน์ ์์ ์ ๋ฒ์ ์ผ๋ก ์ธ์ ๋ ๋์๊ฐ ์ ์๋ค.
์ด๋ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ๋ง์ ์ฌ๋๋ค์ด ํจ์จ์ ์ผ๋ก ํจ๊ป ์์
ํ๊ณ , ํ๋ก์ ํธ๋ฅผ ์ค์ฌ์ผ๋ก ํ์
ํ ๋ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ ๊ฐ๋ฐ์๊ฐ ์์ ๋ง์ ํ๋ก์ ํธ ๋ฒ์ ์ ๋ณธ์ธ ์ปดํจํฐ์ ๊ฐ๊ฒ๋๋ค. ๋์ค์ ์ด๋ฌํ ๊ฐ๋ณ ๋ฒ์ ์ ํ๋ก์ ํธ๋ฅผ ๋ณํฉํ์ฌ ๊ธฐ์ค์ด ๋๋ ๋ฒ์ ์ ํ๋ก์ ํธ์ ์ ์ฉ ํ ์ ์๊ฒ ๋๋ค.
VCS์๋ ๋ ์ข
๋ฅ๊ฐ ์๋ค.
๊ฐ ๊ฐ๋ฐ์๊ฐ ํ์คํ ๋ฆฌ๋ฅผ ์๋ฒ์ ์
๋ฐ์ดํธํ์ฌ ์ฆ๊ฐ์ ์ธ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ตฌ์กฐ์ด๋ค.
๋ฌธ์ ์ ์ ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ผ์ ํ ์ ์๊ณ , ์คํ๋ผ์ธ์์๋ ๋ํ ์ผ์ ๋ชปํ๋ค๋ ๊ฒ์ด๋ค.
Centralized Version Control์ ๋จ์ ์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก Distributed Version Control์ด๋ค.
CVC์ฒ๋ผ Server์๋ง ํ์คํ ๋ฆฌ ์ ๋ณด๊ฐ ์๋ ๊ฒ์ด ์๋๋ผ, ๋ชจ๋ ๊ฐ๋ฐ์๋ค์ด ๋์ผํ ํ์คํ ๋ฆฌ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ตฌ์กฐ์ด๋ค.
๊ณ ๋ก, ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฑฐ๋ ๋ค์ด์ด ๋์ด๋ ๊ฐ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ์ ์๋ก ์ ๋ณด๋ฅผ ์ด์ฉํด ์๋ฒ๋ฅผ ๋ณต์ํ๊ณ ์ผ์ ์ด์ด๋๊ฐ ์ ์๋ค. ๋ํ ์คํ๋ผ์ธ์์๋ ์ผ์ ํ ์ ์๋ค.
์ฌ๊ธฐ์ server๋ ํ์ฌ๋ด๋ถ์์๋ง ์ฌ์ฉํ๋ private server๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๊ณ Github, Bitbucket๊ฐ์ ํด๋ผ์ฐ๋๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
ํฐ๋ฏธ๋์์ code .
ํ๋ฉด ์ด๋ฆฐ๋ค.
git ๋ช
๋ น์ด -option
git commit -m
git ๋ช
๋ น์ด --์์ฑ
git config --global
git ๋ช
๋ น์ด --h
๋ฅผ ํฐ๋ฏธ๋์์ ์คํํ๋ฉด ํด๋น ๋ช
๋ น์ด์ ๋ํ ์ ์ฒด ์ต์
๊ณผ ์์ฑ์ ๋ํ ๊ฐ๋จํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
๋ ์์ธํ ์ค๋ช
์ ์ด Git ๋งํฌ์์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
git init
๋ช
๋ น์ด๋ ๋์ local ํ๋ก์ ํธ ํด๋ ๋ด์ ์จ๊ฒจ์ง .git ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค. ์ด์ Git์ ํ์ฌ ์ ์ฅ์์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ /๊ด๋ฆฌํ๊ฒ ๋๋ค.
(ํ์ผ์ด๋ ํด๋ ์์ .์ด ๋ถ์ผ๋ฉด ๊ทธ ํ์ผ/ํด๋๋ ์จ๊ฒจ์ง ํ์ผ/ํด๋์ด๋ค.)
ls -a
๋ ์จ๊ฒจ์ง ํ์ผ๊น์ง ๋ณด์ฌ์ฃผ๋ ๋ฐ๋ฉด,-a
์ต์
์ ์ ๊ฑฐํ ls
๋ ์จ๊ฒจ์ง ํ์ผ์ ์ ์ธํ ํ์ผ์ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ฏ๋ก ๊ฒฐ๊ณผ์ .git
ํ์ผ์ด ๋ณด์ด์ง ์์์ ์ ์ ์๋ค.
gitํ์ผ์ ์์ฑํ๋ฉด Git์ ๊ธฐ๋ณธ์ ์ผ๋ก 'master'๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค. ์ด ์๋ก์ด ์ ์ฅ์์ ์๋ก์ด ํ์ผ์ ์ถ๊ฐ ํ๋ค๊ฑฐ๋ ์ถ๊ฐํ ํ์ผ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ์ฌ ๊ทธ ๋ด์ฉ์ commitํ๋ ๊ฒ์ ๋ชจ๋ 'master'๋ผ๋ ์ด๋ฆ์ ๋ธ๋์น๋ฅผ ํตํด ์ฒ๋ฆฌํ ์ ์๋ ์ผ์ด ๋๋ค.
'master'๊ฐ ์๋ ๋ ๋ค๋ฅธ ์๋ก์ด ๋ธ๋์น๋ฅผ ๋ง๋ค์ด '์์ผ๋ก ์ด ๋ธ๋์น๋ฅผ ์ฌ์ฉํ ๊ฑฐ์ผ!'๋ผ๊ณ checkoutํ์ง ์๋ ์ด์, ์ด ๋์ ๋ชจ๋ ์์
์ 'master'๋ธ๋์น์์ ์ด๋ฃจ์ด์ง๋ค.
git init
์ ํ๋ฉด ์ด์ ํด๋น ํ๋ก์ ํธ์ ํ์ผ๋ค์ git์ ์์
ํ๊ฒฝ์ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
git์๋ ์ด 3๊ฐ์ง์ ์์
ํ๊ฒฝ์ด ๋๋์ด์ ธ ์๋ค.
ํ๋ก์ ํธ์ ํ์ผ๋ค์ ์์ ์์ฑํ๋ ์์
์ ํ๋ working directory, ์ด๋์ ๋ ์์
ํ๊ณ ์๋ค๊ฐ ๋ฒ์ ํ์คํ ๋ฆฌ์ ์ ์ฅํ ์ค๋น๊ฐ ๋์ด์๋ ํ์ผ๋ค์ ์ฎ๊ฒจ๋๋ staging area, ๋ฒ์ ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ .git repository(.git directory)๋ก ์ด๋ฃจ์ด์ง๋ค.
working directory๋ฅผ ์๋ฐํ ๋งํ๋ฉด git์ด tracking์ ํ๊ณ ์๋ tracked, ์๋ก๋ง๋ค์ด์ก๊ฑฐ๋ ์์ง tracking์ด ๋์ง ์์ untracked๋ก ๋๋ ์ ์๋ค.
๊น์ด trackingํ๊ณ ์๋ ์ค์ธ tracked์์๋ ์ง๊ธ ์ด์์ ์ ์์ ์ด ๋์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ unmodified , modified๋ก ๋๋ ์ ์๋ค. unmodified๋ ์ด์ ๋ฒ์ ๊ณผ ๋น๊ตํ์ ๋ ์์ ์ด ์ ๋ ๊ฒ์ด๋ฏ๋ก modified๋ง staging area๋ก ์ฎ๊ฒจ๊ฐ๋ค.
์ด์ ์์๋ฅผ ๋ณด๋ฉฐ, ๋ช
๋ น์ด์ ํจ๊ป ์ดํดํด๋ณด์.
echo ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด์ 3๊ฐ์ txtํ์ผ์ ์ ์ด ์ ์ฅํ์๋ค.
๋ฐฉ๊ธ ๋ง๋ค์ด์ง ์ ํ์ผ๋ค์ด๊ธฐ์ ์์ง untracked์ธ working directory์ ์์นํ๋ค.
๋ง์คํฐ๋ธ๋์น์ ์์์ด ์ด๋ก์์ ๋ ธ๋or ์ฃผํฉ์ด ๋ ์ด์ ๋?!
working directory์ commit ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ์์ ๋ณด์ฌ์ค๋ค. ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ๋ค์ด commit๋๋ฉด master branch์ ์์์ ๋ค์ ์ด๋ก์์ด ๋๋ค.
git์ด trackingํ ์ ์๋๋ก working directory์์ staging area์ ์ฌ๋ฆฌ๋ ค๋ฉด add๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
์์ ๊ฐ์ด ๊ณต๋ฐฑ์ผ๋ก ํ์ผ ๊ฐ์ ๊ฐ๊ฒฉ์ ์ฃผ๋ฉด ์ฌ๋ฌ ํ์ผ์ ํ ๋ฒ์ add ํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, a.txt, b.txt, c.txt๋ชจ๋ add๋์ด staging area์ ์ฌ๋ผ๊ฐ์์ ์ ์ ์๋ค.
์์ ์ ์์น๋ถํฐ ํ์ ํด๋์ ํ์ผ๋ค๊น์ง ๋ชจ๋ ์ฌ๋ฆฌ๋ ค๋ฉด git add .
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ง์ฝ, txtํ์ผ๋ง ์
๋ก๋ ํ๊ณ ์ถ๋ค๋ฉด git add *.txt
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
staging area์ ์ฌ๋ผ๊ฐ a.txt์ 'ellie'๋ฅผ ์ถ๊ฐ๋ฅผ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
๋์ผํ ํ์ผ์ด์ด๋ ์ถ๊ฐ๋ 'ellie'๊ฐ staging area์ a.txt์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์, ๋์ผํ ํ์ผ ์ผ์ง๋ผ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๋ฉด ๋ค์ add, commit์ ํด์ผํ๋ค.
์ฌ๊ธฐ์ a.txt๊ฐ tracking์ด ๋๋ staging area์ ์์ผ๋ฏ๋ก git status๋ฅผ ํ์ ๋ modified: a.txt๋ผ๊ณ ๋จ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
workflow์ ๋ณด๊ธฐ์ข๊ฒ ํํํ๋ฉด ์์ ๊ฐ์ด ํํํ ์ ์๋ค.
๋ก๊ทธ๋ ๋น๋๋ฅผ ํ์ ๋ ๋น๋ ์์ ๋ถ์์ ์ธ ํ์ผ๋ค์ git์ ํฌํจํ๊ณ ์ถ์ง ์์ ์ ์๋ค. ์ด๋ ๊ฒ ์จ๊ธฐ๊ณ ์ถ์ ํ์ผ๋ค์ด ์กด์ฌํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด .gitignoreํ์ผ์ด๋ค.
git๊ณผ github์ ์ฌ๋ฆฌ๊ณ ์ถ์ง ์์ ํ์ผ(track ํ๊ณ ์ถ์ง ์์ ํ์ผ)๋ค์ .gitignore์ด๋ผ๋ ํ์ผ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
log.log๋ผ๋ ํ์ผ์ ์จ๊ธฐ๊ณ ์ถ๋ค๊ณ ํ์.
ํ์ฌ๋ git status
์ ์ถ๊ฐํ์ง ์์ ํ์ผ๋ก ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
echo *.log > .gitignore
๋ก .logํ์ผ๋ค์ .gitignore ํ์ผ์์ ๋ฃ์๋ค.
list๋ฅผ ๋ณด๋ฉด .gitignore๊ฐ ์๊ธด ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค์ git status๋ฅผ ํ๋ฉด ์ด๋ป๊ฒ ๋์ฌ๊น?
log.log๋ ์จ๊ฒจ์ ธ ์ด์ ๋ณด์ด์ง ์๊ณ .gitignore๋ง ๋ณด์์ ์ ์ ์๋ค.
ํด๋ ํ์ผ ํํํ๊ธฐ
*.log
.log๋ก ๋๋๋ ํ์ผ
build/
build๋๋ ํ ๋ฆฌ ์๋์ ์๋ํ์ผ
build/.log
build ๋๋ ํ ๋ฆฌ ์๋์ .log๋ก ๋๋๋ ํ์ผ
git status
๋ git์ ์ํด ๊ด๋ฆฌ๋๋ ํ์ผ๋ค์ ์ํ๋ฅผ ์๋ ค์ค๋ค.
git status -s
๋ก ๊ฐ๋จํ๊ฒ ๋ณด์.
A๋ added๊ฐ ๋์ด staging area์ ์๋ค๋ ๋ป์ด๋ค.
?๋ ์์ง ํธ๋ํน์ด ๋์ง ์๋ working directory์ ์๋ค๋ ๋ป์ด๋ค.
์ฌ๊ธฐ์ c.txt ํ์ผ์ ํ
์คํธ๋ฅผ ์ถ๊ฐํด๋ณด์.
AM์ stagingarea์ add๊ฐ ๋์๊ณ , working directory์์ modified๋์๋ค๋ ๋ป์ด๋ค.
staging area์ ์๋ a.txt ํ์ผ์ .git directory์ ์ฌ๋ฆฌ๊ณ ์ถ์ผ๋ฉด ์ด๋ค ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊น?
commit ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด์ staging area์ ์๋ ํ์ผ์ git diretory๋ก ์ด๋ ์ฆ, history์ ์ ์ฅํ ์ ์๋ค.
(์ด๋ ๊ฒ ๊น ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋ ๋ฒ์ ๋ค์ checkout๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ์ํ๋ ๋ฒ์ ์ผ๋ก ๋์๊ฐ ์ ์๋ค.)
์ด๋ ๊ฒ ์ ์ฅ๋ ๊นํ์คํ ๋ฆฌ๋ ๋์ ์ปดํจํฐ์๋ง ๋ณด๊ด๋๋ค. ๋ค๋ฅด๊ฒ ๋งํ๋ฉด, ๋ด ์ปดํจํฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ด ํ์คํ ๋ฆฌ๋ฅผ ๋ค ์์ด๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ณดํต .git directory๋ Github๊ฐ์ ์๋ฒ์ push๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ์
๋ก๋๋ฅผ ํ์ฌ, ํ์คํ ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๋ค. ( ๋ฐ๋๋ก ์๋ฒ์์ local๋ก ๋ค์ด๋ฐ๊ณ ์ถ์ผ๋ฉด pull๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.)
์ฌ๊ธฐ์ ๊ฐ๊ฐ์ ๋ฒ์ ๋ค์ ์ด๋ค ์ ๋ณด๊ฐ ๋ค์ด์๋์ง ํ์ธํด๋ณด์.
๊ฐ๊ฐ์ ์ปค๋ฐ๋ค์ ์ค๋
์ท๋ ์ ๋ณด๋ค์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๊ณ ์ ํ ํด์์ฝ๋๊ฐ ๋ถ๊ณผ๋๋ค. ํด์์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ๋ฒ์ ์ ๋ณด์ ๋ํด ์ฐธ์กฐํ ์ ์๋ค. commit์๋ ์์ด๋ ๋ฟ๋ง ์๋๋ผ ๋ฒ์ ๊ด๋ฆฌ ๋ฉ์์ง์ ๋๊ฐ ์์ฑํ๋์ง, ๋ ์ง์ ์๊ฐ ๊ฐ์ ๊ฒ๋ ์์ฑ๋๋ค.
๋ณดํต git add .
๋ก working directory์์ staging area๋ก ์ฎ๊ธฐ๊ณ , staging area์์ git commit -m " ~ "
๊ผด์ ์ฌ์ฉํ์ฌ ๋ฉ์ธ์ง๋ฅผ ๋จ๊ธฐ๋ฉฐ commit์ ํ์ฌ git directory๋ก ์ฎ๊ธด๋ค.
๋ง์ฝ ์ํน ๋๋ ํ ๋ฆฌ์ ์๋ ๊ฒ์ด ๋ชจ๋ ๋ง์ ๋ ๋ค๋ฉด git commit -am " ~ "
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ add์ commit์ ํ ๋ฒ์ ํ ์ ์๋ค.
๊น๋๋ ํ ๋ฆฌ์ ์๋ ์ฐ๋ฆฌ์ ์ปค๋ฐ๋ค์ ์์ ๋ค์ ๋ฒ์ ๋ณ๋ก ๋๋์ด ๊ด๋ฆฌํ ์ ์๋ ์ ์ฉํ history ์ฐฝ๊ณ ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ๋ฌ ๋ณ๊ฒฝ๋ค์ ํ๋๋ก ๋ฌถ์ด ์ปค๋ฐํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๋ค.
Tip 1
์๋ฏธ๊ฐ ์๋ ๋ณ๊ฒฝ๋ค์ ์๋ฏธ๋ฅผ ์์๋ณผ ์ ์๋ ๋ฉ์ธ์ง๋ฅผ ์ ์ด ์ปค๋ฐํ๋ ๊ฒ์ด ์ข๋ค. ๋ณดํต ์ปค๋ฐ์ ๋ฉ์ธ์ง๋ ํ์ฌํ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋์ฌํ์ผ๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค..(e.g. init, add, fix)
Tip 2
ํ์
์์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ํ๋ ์ค์์ด๋ค.
๋ด๊ฐ Fix crashing on login module
์ฆ, crashing์ ๊ณ ์ณค๋ค๋ ๋ฉ์ธ์ง๋ฅผ ๋จ๊ธฐ๋ฉด ์ ๋ง ๊ทธ code๋ง ์์ ํ์ฌ commit ํด์ผํ๋ค. 'ํ๋ ๊น์ ๋ค๋ฅธ ๋ฒ๊ทธ๋ค๋ ๊ณ ์น์'๋ผ๋ ๋ง์์ผ๋ก ์ฌ๋ฌ ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ๋ฉด ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํ๊ฑฐ๋, ํ์คํ ๋ฆฌ๋ฅผ ๋ฐ๋ผ๋ณผ ๋ ํผ๋์ด ์จ๋ค.
git log
ํ๋ก์ ํธ์ ๋ชจ๋ ์ปค๋ฐ ๋ด์ญ์ ๋ณด๋ ค๋ฉด git log
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
์์
๋๋ ํ ๋ฆฌ์ ์คํ
์ด์ง ์์ญ์ ์ ์ดํ๋ git status
์ ๋น๊ตํ์ฌ git log
๋ ์ปค๋ฐ๋ ํ์คํ ๋ฆฌ์์๋ง ์๋ํ๋ค. ์ ๋ฐ์ ์ผ๋ก git log ๋ช
๋ น์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ธฐ๋ก์ ์ดํด๋ณด๊ณ ํ๋ก์ ํธ์ ํน์ ๋ฒ์ ์ ์ฐพ๋ ๋ฐ ์ ์ฉํ๋ค.
git log ๋ช
๋ น์ด๋ฅผ ํตํด ๋ณด์ฌ์ง๋ log๋ ๊ฐ ์ปค๋ฐ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. (์์ฑ์, hash ๊ฐ, ๋ ์ง์ ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ปค๋ฐ ๋ฉ์ธ์ง)
$ git log
commit a7b4db3d6cfa0267712a3b6b6adbb1bc78f84abb (HEAD -> main, origin/main)
Author: seoyun <dhn04100@gmail.com>
Date: Thu Jan 5 21:13:33 2023 +0900
Git ํด๋ ์ด๋
commit 2a2a4ad104445e46566a9996fca646408ad8df44
Author: seoyun <dhn04100@gmail.com>
Date: Thu Jan 5 21:12:34 2023 +0900
add Git workflow
๋ง์ฝ ํน์ ์ปค๋ฐ ์์ ์ ์ฝ๋๋ก ๋๋๋ฆฌ๊ณ ์ถ๋ค๋ฉด, ์๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
git checkout <commit-hash>
๋๋ git reset <commit-hash>
<commit-hash>
๋ฅผ git log ์์ ๋ณด์ด๋ ์ปค๋ฐ์ ์ค์ hash ๊ฐ์ผ๋ก ๋์ฒดํด์ค์ผ ํ๋ค.
๋ค์์ฒ๋ผ --oneline์ผ๋ก ๊ฐ๋ตํ๊ฒ ๋ณผ ์๋ ์๋ค.
$ git log --oneline
a7b4db3 (HEAD -> main, origin/main) Git ํด๋ ์ด๋
2a2a4ad add Git workflow
ํน์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด -n ํ๋๊ทธ๋ฅผ ํ์ฉํ๋ค.
$ git log -n 10
์ต๊ทผ 10๊ฐ ์ปค๋ฐ๋ง ์ ์
๊น์ ๊ทธ๋ํ ํํ๋ก ๊น๋ํ๊ฒ ๋ณด๊ณ ์ถ์ ๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
์ปค๋ฐ์ ์ ์ฒด์ ์ธ ๋ฐฉํฅ๊ณผ ๋จธ์ง๋ ํ๋ฆ๋ ํ์
ํ ์ ์๋ค.
$ git log --oneline --decorate --graph
์ปค๋ฐ๊ณผ ๋ธ๋์น์ ํ์คํ ๋ฆฌ๋ฅผ ๋ค์ํ๊ณ ์ฝ๊ฒ ๋ณด์ฌ์ฃผ๋ Sourcetree๋ GitHub Desktop ๊ฐ์ GUI ํด์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
git show
git show ๋ช
๋ น์ด๋ก ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ์ ์ ๋ณด๋ฅผ ํ์ธํ ์๋ ์๋ค.
$ git show
commit a7b4db3d6cfa0267712a3b6b6adbb1bc78f84abb (HEAD -> main, origin/main)
Author: seoyun <dhn04100@gmail.com>
Date: Thu Jan 5 21:13:33 2023 +0900
Git ํด๋ ์ด๋
diff --git a/CS/Git/workflow.md b/Git/workflow.md
similarity index 100%
rename from CS/Git/workflow.md
rename to Git/workflow.md
ํน์ ์ปค๋ฐ ์ ๋ณด๋ฅผ ํ์ธํ๋ ค๋ฉด git show ์ปค๋ฐ ํด์๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
$ git show c008c4785eeb14a395b4aa6cf9fa3b9e5896f5a4
$ git show HEAD^
# HEAD ํฌ์ธํฐ๋ฅผ ํ์ฉํ ์๋ ์๋ค.
git reflog
reflog
๋ ์๊ฒฉํ๊ฒ ๋ก์ปฌ์ด๋ฉฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ผ๋ถ๊ฐ ์๋๋ค. push, pull ๋๋ clone์๋ ํฌํจ๋์ง ์๋๋ค. Git์ git reflog
๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ branch tip(๋ง์ง๋ง ์ปค๋ฐ)์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ค.
git reflog ๋ช
๋ น์ด๋ฅผ ํตํด git reset, git rebase ๋ช
๋ น์ด๋ก ์ญ์ ๋ ์ปค๋ฐ์ ํฌํจํ ๋ชจ๋ ์ปค๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๋ณผ ์ ์๋ค.
$ git reflog
a7b4db3 (HEAD -> main, origin/main) HEAD@{0}: commit: Git ํด๋ ์ด๋
2a2a4ad HEAD@{1}: commit: add Git workflow
74f2bad HEAD@{2}: commit: fix ๋ณ์๋ช
๊ท์น
447a5a3 HEAD@{3}: commit: add JAVA ch2
a5b1039 HEAD@{4}: pull origin main: Fast-forward
git reflog๋ ์ด์ ๋ช
๋ น์ด(ex. git reset --hard
)๋ฅผ ์ทจ์ํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
git reset ๋ช
๋ น์ด์ ๋ํ ์ค๋ช
์ ์๋์์ ๋์ค์ง๋ง, ์ฌ๊ธฐ์ ๊ฐ๋ตํ๊ฒ git reflog๋ฅผ ์ฌ์ฉํ๋ ์ํฉ์ ์ดํด๋ณธ๋ค.
๋ง์ฝ ์์
์ค์ ๋ค์์ฒ๋ผ git reset โhard
๋ก ์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ค.
$ git reset 74f2bad --hard
HEAD is now at 74f2bad fix ๋ณ์๋ช
๊ท์น
์ด๋ ์ผ๋ฐ์ ์ด๋ผ๋ฉด git reset ํ๊ธฐ ์ ์ ์์
๋ด์ญ์ผ๋ก ๋์๊ฐ ์ ์์ง๋ง, git reflog์๋ ์ด๋ ๊ฒ git reset ํ ๋ช
๋ น ๋ด์ญ๊น์ง ๋ชจ๋ ๋จ์์๋ค.
$ git reflog
74f2bad HEAD@{0}: reset: moving to 74f2bad
a7b4db3 (HEAD -> main, origin/main) HEAD@{1}: commit: Git ํด๋ ์ด๋
2a2a4ad HEAD@{2}: commit: add Git workflow
74f2bad HEAD@{3}: commit: fix ๋ณ์๋ช
๊ท์น
๋ฐ๋ผ์ git reset --hard ํ ๋ช
๋ น์ ์ทจ์ํ๊ณ ์ถ์ผ๋ฉด (๋ช
๋ น ์ด์ ์ผ๋ก ๋์๊ฐ๊ณ ์ถ์ผ๋ฉด) git reflog ์์ ํด๋น ๋ช
๋ น ์ง์ ์ ์ปค๋ฐ ํด์ ๊ฐ์ ์ฐธ์กฐํ์ฌ git reset --hard ํ๋ฉด ๋๋ค.
$ git reset a7b4db3 --hard
HEAD is now at a7b4db3 Git ํด๋ ์ด๋
git log v.s. git reflog
1. log
๋ ๋ฆฌํฌ์งํ ๋ฆฌ ์ปค๋ฐ ๊ธฐ๋ก์ ๊ณต๊ฐ ๋ ์ฝ๋์ธ ๋ฐ๋ฉด reflog
๋ ๋น๊ณต๊ฐ๋ผ๋ ๊ฒ์ด๋ค. push, fetch ๋๋ pull ํ์ git ๋ก๊ทธ๋ git ์ ์ฅ์์ ์ผ๋ถ๋ก ๋ณต์ ๋๋ค. ๋ฐ๋ฉด์ git reflog
๋ git ์ ์ฅ์์ ํฌํจ๋์ง ์๋๋ค.
2. git log
๋ ์ฐธ์กฐ(ํค๋, ํ๊ทธ, ์๊ฒฉ)์์ ์ก์ธ์คํ ์ ์๋ ์ปค๋ฐ ๋ก๊ทธ๋ฅผ ๋ณด์ฌ์ค๋ค.
git reflog
๋ ์ธ์ ๋ ์ง ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ฐธ์กฐ๋๊ฑฐ๋ ์ฐธ์กฐ๋ ๋ชจ๋ ์ปค๋ฐ ์ ๊ธฐ๋ก์ด๋ค.