Git & GitHub Tutorial for Individual Project
Clone์ GitHub์ repo๋ฅผ ๊ฐ์ ธ์ ์์ ํ ์ค๋น๋ฅผ ํ ์ ์๋๋ก ํ๋ ๊ฐ์ฅ ๊ฐํธํ ์ปค๋งจ๋์ ๋๋ค.
์ํ๋ ๋๋ ํ ๋ฆฌ์์ ๋ค์์ ์คํํ์ฌ ์ด repo๋ฅผ ์์ ์ working directory์ local repo๋ก ๋ณต์ ํด ๋ณด์ธ์:
git clone [link of this repository]
cd [repository directory]
์ด์ ๋ณต์ ํ repo๋ฅผ ์ง์ ์์ ํด๋ณผ ์ฐจ๋ก์ ๋๋ค!
์ด README.md ํ์ผ์ ์๋ ๋ธ๋ญ ๋ถ๋ถ์ ํ
์คํธ๋ฅผ ์ถ๊ฐํด ๋ณด์ธ์:
์๋ ๋ถ๋ถ์ ๋ง์๊ป ๊ธ์ ์ ์ด ๋ณด์ธ์
์ ๋ถ๋ถ์ ๋ง์๊ป ๊ธ์ ์ ์ด ๋ณด์ธ์
์ง๊ธ ์์ ํ ๋ถ๋ถ์ด local repo์ ํ์ฌ commit๊ณผ ์ผ๋งํผ ๋ค๋ฅธ์ง ๊ถ๊ธํ๋ค๋ฉด, ๋ค์ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํด ๋ณด์ธ์:
git diff
๋ง์ฝ ํน์ ํ์ผ์ด๋ ํด๋์ ๋ํด์๋ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด, ์ ์ปค๋งจ๋์ ๋ค์ ์ํ๋ ํ์ผ ๋๋ ํด๋ ์ด๋ฆ์ ์ถ๊ฐ๋ก ๋ฃ๊ณ ์คํํ๋ฉด ๋ฉ๋๋ค.
๋ง์ฝ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ด ์๋, ์ด๋ค ํ์ผ์ด ์์ ๋์๊ณ ์ถ๊ฐ๋์์ผ๋ฉฐ ์ญ์ ๋์๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ๋ค์์ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํด ๋ณด์ธ์:
git status
์ด ๋ git์ local repo์ ํ์ฌ commit์ ๊ธฐ์ค์ผ๋ก ํ์ฌ working directory์์ ์ด๋ค ํ์ผ์ด ์ถ๊ฐ๋์๊ณ , ์์ ๋์๊ณ , ์ญ์ ๋์๋์ง ๋ชฉ๋ก์ ๋ณด์ฌ์ค ๊ฒ์
๋๋ค.
์ง๊ธ์ README.md ํ์ผ๋ง ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์
๋๋ค:
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
๋ฏธ๋ จ ์์ด ๊ธ์ ์ ๋ถ ์ผ๋ค๋ฉด, ์ด์ ์ด ์์ ์ฌํญ์ commit์ผ๋ก ๋จ๊ฒจ ์ ์ฅํด ๋ด ์๋ค.
์์ ์ ์์
๊ณต๊ฐ(working directory)์์ ์๋ก ์์ ํ ๋ถ๋ถ์ local repo์ ๋ฐ์ํ๊ธฐ ์ํด์ , ์ผ๋จ ์ฅ๋ฐ๊ตฌ๋์ ์ญํ ์ ํ๋ staging area์ ์์ ํ ํ์ผ(๋๋ ์ผ๋ถ๋ถ)์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ค์์ ์คํํด README.md ํ์ผ์ stage์์ผ ๋ด
์๋ค:
git add README.md
๋ง์ฝ README.md ํ์ผ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ํ์ผ์ ์์ ํ๊ณ , ๋ชจ๋ ์์ ์ฌํญ์ ํ ๋ฒ์ stage์ํค๊ณ ์ถ๋ค๋ฉด ์ ์ปค๋งจ๋์์ ํ์ผ ์ด๋ฆ ๋์ -A ์ต์
์ ๋ฃ์ด ์คํํ๋ฉด ๋ฉ๋๋ค.
์ด์ README.md๋ ์ง๊ธ๊น์ง์ ์์ ์ฌํญ ๊ทธ๋๋ก staging area์ ๋ด๊ฒจ์์ ๊ฒ๋๋ค.
์ด ๋ git status๋ฅผ ์คํํด ๋ณด๋ฉด, Changes to be committed: ๋ชฉ๋ก์ README.md ํ์ผ์ด ์๊ฒผ์ ๊ฒ์
๋๋ค.
๋ค์์ stage์ํจ ์์ ์ฌํญ์ local repo์ ์ค์ ๋ก commitํ ์ฐจ๋ก์ ๋๋ค. ๋ค์์ ์คํํด stage๋ ์์ ์ฌํญ์ commitํด ๋ณด์ธ์:
git clommit -m "[commit message]"
์ด์ ๋น์ ์ local repo์๋ ์์ ์ฌํญ์ด ์๋ก์ด commit์ผ๋ก ๋ฐ์๋์์ต๋๋ค.
์ด๋ฅผ ํ์ธํด ๋ณด๊ณ ์ถ๋ค๋ฉด git log๋ฅผ ์คํํ๋ฉด ๋ฉ๋๋ค.
์ถ๋ ฅ๋๋ ๋ชฉ๋ก์ local repo ๊ธฐ์ค commit ์ด๋ ฅ์ด๋ฉฐ, ๋ฐฉ๊ธ ์๋ก commitํด์ค ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์์ ์๋ commit์ HEAD๊ฐ ์กด์ฌํ๊ณ , ๊ทธ ๋ค์ commit์ origin/main, origin/HEAD๊ฐ ์กด์ฌํ ๊ฒ์
๋๋ค.
์ด๋ฅผ ํ์ด์ ๋ณด์๋ฉด, ๊ฐ์ฅ ์ commit์ ๋ฐฉ๊ธ ์๋ก ์ถ๊ฐํ์๊ธฐ ๋๋ฌธ์ local repo ๊ธฐ์ค์ผ๋ก main ๋ธ๋์น์ ๊ฐ์ฅ ๋ง์ง๋ง commit์ด ๋ฐ๋์๊ณ , HEAD๋ ์ด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ํ์
๋๋ค.
๊ทธ๋ฌ๋ ์์ง remote repo์๋ ์ด ์ฌํญ์ด ๋ฐ์๋์ง ์์๊ธฐ ๋๋ฌธ์, remote repo์ ๋ณ๋ช
์ธ origin์ main ๋ธ๋์น์ origin์ HEAD๋ ๊ทธ ์ด์ commit์ ๋จ์์๋ ๊ฒ์
๋๋ค.
์ด๋ฅผ ๋ฐ๋ก ์ดํดํ ์ ์๋ค๋ฉด, ๋น์ ์ ์ด๋ฏธ git์ ๊ตฌ์กฐ๋ฅผ ์ ํ์
ํ๊ณ ๊ณ์ญ๋๋ค!
๋ฌผ๋ก ๋ฐ๋ก ์ดํดํ์ง ๋ชปํ๋๋ผ๋, ๋๋ดํ์ง ๋ง์ธ์.
๋ง์ฝ ๊น์ฌํธ ํํฐ์ Git & GitHub ์คํฐ๋๋ฅผ ๋ฃ๊ณ ๊ณ์๋ค๋ฉด, pdf ์๋ฃ์ ๊ทธ๋ฆผ์ผ๋ก ์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค!
์ด์ ๋๋์ด remote repo์ ์์ ์ฌํญ์ ๋ฐ์์์ผ๋ณผ ์ฐจ๋ก์ ๋๋ค. ๋ค์์ ์คํํ์ฌ local repo์ commit ์ด๋ ฅ์ remote repo์ ๋ฐ์์์ผ ๋ณด์ธ์:
git push origin main
๋ฌผ๋ก ์ง๊ธ์ origin์ด๋ผ๋ ์ด๋ฆ์ remote repo์ main์ด๋ผ๋ ๋ธ๋์น์ pushํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ ์ปค๋งจ๋ ๊ทธ๋๋ก ์คํํ๋ฉด ๋์ง๋ง, ๋ง์ฝ remote repo๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ์ ๋ค๋ฅธ ๋ณ๋ช
์ ์ง์ด์คฌ๋ค๊ฑฐ๋, ํ์ฌ ๋ธ๋์น์ ์ด๋ฆ์ด ๋ค๋ฅด๋ค๋ฉด origin main๋ถ๋ถ์ด ๋ฐ๋์ด์ผ๊ฒ ์ฃ ?
์ด์ GitHub์์ ์ฐ๋ฆฌ๊ฐ ๋ณต์ ํด ์๋ remote repo ํ์ด์ง๋ฅผ ๋ค์ ์ ์ํ๋ฉด(์๋ก๊ณ ์นจํ๋ฉด), ํด๋น ํ์ด์ง์ ์์ ์ฌํญ์ด ๋ฐ์๋์ด ์์ผ๋ฉฐ commit ์ด๋ ฅ์ด ์๋ก ์ถ๊ฐ๋์์์ ํ์ธํ ์ ์์ ๊ฒ๋๋ค!
๋ ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์ง๊ณ ๋์ด๊ฐ ๋ถ๋ถ์, commit์ด ์ค์ ๋ก ๊ธฐ๋ก๋๋ ๊ฒ์ git commit ์ปค๋งจ๋๋ฅผ ์คํํ์ ๋๋ผ๋ ๊ฒ์
๋๋ค.
๋ง์ฝ ์ํ๋ค๋ฉด ์ด๋ ์ ๋ ์์ ์ด ์ด๋ฃจ์ด์ก์ ๋๋ง๋ค ์์ฃผ commitํด์ฃผ๋ฉด์ ๊ทธ๋๊ทธ๋์ ๊ธฐ๋ก์ local repo์ ์์ ๋๊ณ , ์์
์ด ๋ง์ด ์ง์ ๋์๋ค ์ถ์ ๋(์ ์ ๊ฒฝ์ฐ ๋ฐฅ ๋จน์ผ๋ฌ ๊ฐ๊ฑฐ๋ ํด๊ทผํ๊ธฐ ์ ์) push๋ฅผ ํด์ค๋ ๋ฉ๋๋ค.
์ฌ์ค ์ง๊ธ์ repo๋ README.md๊ฐ ์ ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋ณ ๊ฐํฅ์ด ์๊ฒ ์ง๋ง, ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ๋น๋์์คํ
์ด ๋ณต์กํด์ง์๋ก, ๋ ์ฌ๋ฌ ์๋ํฐ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ์ผ์๋ก repo์ ๊ตณ์ด ์ฌ๋ผ๊ฐ์ง ์์์ผ๋ฉด ํ๋ ํ์ผ๋ค์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, C์ธ์ด๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ *.c ํ์ผ์ ์ปดํ์ผํ๋ฉด ์คํ ๊ฐ๋ฅํ object file์ด ํ๋ ํ์ด๋์ฌ ๊ฒ๋๋ค.
์ด๋ ๋ณดํต ์ค์ ํด์ฃผ์ง ์์ผ๋ฉด a.out์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๋๋ค.
์ด ์คํํ์ผ์ ์ฌ์ค ๊ตณ์ด ์ฐ๋ฆฌ์ repo์ ๊ธฐ๋ก๋์ด ์ ๊ทธ๋๋ ๋ณต์กํ ํ๋ก์ ํธ๋ฅผ ๋ ๋ณต์กํ๊ฒ ๋ณด์ด๋๋ก ํ๋ ๊ฒ๋ณด๋จ, ๊ทธ๋ฅ working dir์๋ง ๋จ๊ฒจ๋๊ณ add, commit, push๋ฅผ ํ ๋ ๋ฌด์ํด ๋ฒ๋ฆฌ๋ ๊ฒ ๋ซ์ต๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ํ์ฌ ์์
์ค์ธ ๋๋ ํ ๋ฆฌ์ .gitignore๋ผ๋ ์ด๋ฆ์ ํ์ผ์ ๋ง๋ค๊ณ , ๊ทธ ํ์ผ์ ๋ฌด์ํ๊ณ ์ถ์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ๋์ดํ๋ฉด ๋๋ ๊ฒ์
๋๋ค.
ํ ๋ฒ ํด๋ด ์๋ค.
์ง๊ธ ์์
์ค์ธ ๋๋ ํ ๋ฆฌ์ ignore_test ํ์ผ์ ํ๋ ๋ง๋ค์ด์, ๋ด์ฉ์ ์ํ๋ ๋๋ก ์ฑ์ ์ฃผ์ธ์.
์ด ๋ git status๋ฅผ ์คํํ๋ฉด, ๋น์ฐํ ์๋ก์ด ํ์ผ์ด ์ถ๊ฐ๋์๊ธฐ ๋๋ฌธ์ ignore_testํ์ผ์ด ์ถ๊ฐ๋ ํ์ผ ๋ชฉ๋ก์ ๋ฐ ๊ฒ์
๋๋ค.
์ด์ ์์
์ค์ธ ๋๋ ํ ๋ฆฌ์ .gitignore ํ์ผ์ ๋ง๋ ๋ค, ignore_test๋ผ๊ณ ์ ๊ณ ์ ์ฅํด ์ค์๋ค.
์ดํ git add .gitignore, git commit -m "update .gitignore"์ ์คํํ ๋ค, ๋ค์ git status๋ฅผ ์คํํด ๋ณด์ธ์.
๋๋๊ฒ๋ ignore_testํ์ผ์ ๋ ๊ฐ์๋์ง ์๊ณ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ฐ๋ฆฌ๋ ๋ณ๋ก ๊ธฐ๋กํด ๋๊ณ ์ถ์ง ์์ ์ฌ๋ฌ ์ฐ๋ ๊ธฐ ํ์ผ๋ค(๋ํ์ ์ผ๋ก .DS_Store, *.o, *.out, .vscode, .idea ๋ฑ์ด ์์ฃ )์ ๋ฌด์ํ ์ ์๊ฒ ๋์์ต๋๋ค!
์ง๊ธ์ ํ๋์ ์ฅ์น, ํ๋์ working directory์์ ์์ ํด์คฌ๊ธฐ ๋๋ฌธ์ ์ฌ์ค ๋ด๊ฐ ๊ณง ๋ฒ์ด๊ณ ์์ ์ฌํญ์ ์ ๋ถ์ผ ๊ฒ์ ๋๋ค. ์ด๋ฐ ์ํฉ์์ Git๊ณผ GitHub๋ ์ฌ์ค ์ฒดํฌํฌ์ธํธ ์์ฑ๊ธฐ ๊ทธ ์ด์๋ ์ดํ๋ ์๋ ๊ฒ๋๋ค. ํน์ ์ํฉ์ผ๋ก ๋๋์๊ฐ๋ ๋ฐ์ ์กฐ๊ธ ๋ ํนํ๋ ์๋ํ๋ก์ธ์์ ๋ค๋ฅผ ๋ฐ๊ฐ ์๋ ๊ฒ์ด์ฃ .
๊ทธ๋ฌ๋, Git๊ณผ GitHub์ ์ง์ง ์ง๊ฐ๋ ์ฌ๋ฌ ์ฅ์น, ์ฌ๋ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฎ๊ฒจ๋ค๋๋ฉฐ ํ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ ์ผ์ด ์๊ฑฐ๋, ์ฌ๋ฌ ์ฌ๋๊ณผ ํ์ ํด์ผ ํ๋ ์ํฉ์์ ๋ํ๋๊ฒ ๋ฉ๋๋ค. ์ฌ์ค ์ค์ ๋ก ํ์ ์ ํ๊ฒ ๋๋ ํฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ฅผ ๋๊ณ (์ดํ ์ฐ์ตํ๊ฒ ๋ ) Pull Request๋ฅผ ๋ ๋ฆฌ๊ฒ๋ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ง๋ง, ์ผ๋จ ๊ฐ์ธ repo๋ฅผ ์ฌ๋ฌ ์ฌ๋์ด ๊ด๋ฆฌํ๊ฑฐ๋ ์ฌ๋ฌ ์ฅ์น๋ฅผ ์ฎ๊ฒจ๋ค๋๋ฉฐ ์์ ํด์ผ ํ๋ ์ํฉ์ ์์ ํด ๋ด ์๋ค.
์ง๊ธ๊น์ง ์์ ํ๋ ๋๋ ํ ๋ฆฌ๋ ์ ์ ๊ทธ๋๋ก ๋๊ณ , ๋ค๋ฅธ (์กฐ๊ธ ๋ฉ๋ฆฌ ๋จ์ด์ง) ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ ์ฐพ์ ์ด remote repo๋ฅผ ๋ค์ cloneํด๋ด ์๋ค! ๋ฐฉ๋ฒ์ ์์์ ํด๋ดค์ผ๋ ์ด์ ์ ์๊ฒ ์ฃ ?
์ด์ ์๋ก cloneํ ๋๋ ํ ๋ฆฌ์์, ์๋ ๋ธ๋ญ์ ์ํ๋ ๋๋ก ํ ์คํธ๋ฅผ ์ถ๊ฐํด ๋ด ์๋ค:
์๋ ๋ถ๋ถ์ ๋ง์๊ป ๊ธ์ ์ ์ด ๋ณด์ธ์
์ ๋ถ๋ถ์ ๋ง์๊ป ๊ธ์ ์ ์ด ๋ณด์ธ์
์ํ๋ ๋งํผ ์ถ๊ฐํ๋ค๋ฉด, ์ง๊ธ๊น์ง ํ๋ ๊ฒ์ฒ๋ผ add, commit, push๋ฅผ ํด๋ด ์๋ค.
๊ทธ๋ผ ์ด์ remote repo์๋ ๊ฐ์ฅ ์ต์ ์์ ์ฌํญ๊น์ง ๋ฐ์๋์ด ์์ ๊ฒ๋๋ค.
์ด๋ฒ์๋ ๋ค์ ์ด์ ์ ์์
ํ๋ ๋๋ ํ ๋ฆฌ๋ก ๋์๊ฐ ๋ณผ๊น์?
์๋ง ๊ทธ ๋๋ ํ ๋ฆฌ๋ ๋ง์ง๋ง์ผ๋ก ํ
์คํธ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์์
๊ทธ๋๋ก ์๋ฌด ์ง๋ ํ์ง ์์๊ธฐ ๋๋ฌธ์, git log๋ฅผ ํด๋ด๋ ์ต์ commit์ด ์กด์ฌํ์ง ์์ ์ฑ๋ก ๋ฉ๊ทธ๋ฌ๋ ๋จ๊ฒจ์ ธ ์์ ๊ฒ๋๋ค.
์ด์ ์ด ๋๋ ํ ๋ฆฌ์ local repo๋ฅผ ๋ค์ ๊ฐ์ฅ ์ต์ commit์ผ๋ก ๋๊ธฐํํด ๋ด ์๋ค. ๋ค์์ ์คํํ์ฌ remote repo์ commit ์ด๋ ฅ์ local repo์ ๋๊ธฐํํด ๋ณด์ธ์:
git pull
์ ๋ง ๊ฐ๋จํ๊ฒ, remote repo์ commit ์ด๋ ฅ์ด local repo์ ๋๊ธฐํ ๋์์ต๋๋ค! ์ด์ ์ด๋ฐ ์์ผ๋ก ์ฐ๋ฆฌ๋ ์ธ์ ์ด๋์๋ ๋ค์ ์์ ์ ์์ํด์ผ ํด๋ ์ง๊ธ๊น์ง remote repo์ ๋ฐ์๋์ด ์๋ ๋ถ๋ถ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์์ ์ ์ด์ด์ ํ ์ ์์ต๋๋ค.
*์ฃผ์: ๋ง์ฝ pull์ ์๋ํ๋ ค๋ ๊ณณ์์ stage๋์ด ์์ง ์์ ์์ ์ด๋ ฅ์ด ์๊ฑฐ๋, ํด๋น ๋๋ ํ ๋ฆฌ์ local repo์๋ง ์กด์ฌํ๋ commit ์ด๋ ฅ์ด ์๋ค๋ฉด ์ถฉ๋(conflit)์ด ์ผ์ด๋ ์ ์์ต๋๋ค!
์ด ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด, ์ฌ๋งํ๋ฉด ๊ฐ ์์ ๊ณต๊ฐ์ ๋ฐ๋ก๋ฐ๋ก ์ต์ ํํ๋ ๊ฒ์ด ์ข๊ฒ ์ง๋ง, ํ์ ๊ณผ์ ์์๋ ํน์ ์ฌ๋ฌ ์ํฉ์์ ์ด์ฉ ์ ์์ด ๋ค๋ฅธ local repo๊ฐ pushํ ๊ฒ์ ๋ฐ์ํ์ง ๋ชปํ ์ฑ ์์ ํ๋ค๊ฐ push์์ ๋ญํจ๋ฅผ ๋ณด๊ณ , ์ด์ ๋ผ๋ pullํ์๋ ์์ ์ฌํญ์ด ์์ด ์ถฉ๋์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ๊ฐ ์ ๋ง์ ๋ง ๋ง์ ๊ฒ์ ๋๋ค. ์ด๋ด ๋๋ฅผ ์ํด ์ฌ๋ฌ ๊ณ ๊ธ ์คํฌ๋ค์ด ์ค๋น๋์ด ์๋๋ฐ, ์ค๋ ์คํฐ๋์์๋ ๊ทธ ์ข ๋ฅ๋ง ํ์ด๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํฉ์๋ค.
git fetch
์ ์ปค๋งจ๋๋ pull ๊ณผ์ ์์ remote repo๋ฅผ local repo๋ก ๋ถ๋ฌ์ค๋ ๊ฒ๊น์ง๋ง ํด์ค๋๋ค. ๊ทธ๊ฒ pull์ ์ ๋ถ๊ฐ ์๋๊ฐ? ํ๊ณ ์ฐฉ๊ฐํ์ค ์๋ ์๊ฒ ์ง๋ง local repo์ ๋ฐ์๋์๋ค๊ณ ํ์ฌ ์์ ์ค์ด๋ workin directory์ ์ค์ ๋ก ์ต์ commit๋๋ก ํ์ผ์ด ๋ฐ๋์ง๋ ์์ ์ํฉ์ ๋๋ค. ์ดํ ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ฉด์ ํ์ฌ ์์ ํ๋ ์ฌํญ๊ณผ ์ต์ commit์ ์๋์ผ๋ก ๋ณํฉ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค:
git merge
์ฌ์ค ์ ๋ ์ปค๋งจ๋๋ฅผ ํ ๋ฒ์ ์งํํ๋ ๊ฒ git pull์ผ ๋ฟ์
๋๋ค!
๋๋, ๋ค์์ ์ปค๋งจ๋๋ฅผ ํตํด ๋ด๊ฐ ์์ ์ค์ด๋ ์์ ์ฌํญ์ ๋๋ง์ ๊ณต๊ฐ(์คํ)์ ์ ์ ํตํด ๋ ์๋ ์์ต๋๋ค:
git stash
์ดํ git pull์ ์งํํ๊ณ , ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํํ์ฌ ์์ ํ๋ ์ฌํญ์ ๋ค์ ๊บผ๋ด์ ๋ฐ์ํ๋ ๊ฒ๋๋ค:
git apply
์ถํํฉ๋๋ค! ๋น์ ์ ์ด์ Git & GitHub์ ์ฒซ ๋ฐ์ ๋์ต๋๋ค. ์๋ง ์์ผ๋ก ๋ ๋ง์ ๊ณ ๋๊ณผ ์ญ๊ฒฝ์ด ์๊ฒ ์ง๋ง, Git๊ณผ GitHub๋ ๋น์ ์ ๋ ๋ ํ ๋๋ฐ์๊ฐ ๋ ๊ฒ์ ๋๋ค.
ํน์ ์ง๊ธ๊น์ง์ ๊ธฐ๋ณธ ์ฌํญ๋ค์ ์ด๋ฏธ ๋ค ์๊ณ ์์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค๋ ์์๋๋ฉด ์ข์ต๋๋ค.
git rebase๋ merge ๋์ ํ์ฉํ์ฌ commit ์ด๋ ฅ์ด ๋๋ฌ์์ง์ง ์๋๋ก ํด์ค๋๋ค. ์์ธํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ง์ ์ฐพ์๋ณด๋ ๊ฒ ์ข์ต๋๋ค.git checkout์ ํตํด unstaged ์ํ์ ํน์ ํ์ผ/๋๋ ํ ๋ฆฌ๋ฅผ ํ์ฌ local repo๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ commit์ผ๋ก ๋๋๋ฆฌ๊ฑฐ๋, local repo๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ commit ์์ฒด๋ฅผ ๋ค๋ฅธ commit์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ฌ์ง์ด-b [branch name]์ ์ถ๊ฐํด์ ์คํํ๋ฉด ์ํ๋ ์ด๋ฆ์ ์ ๋ธ๋์น๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค.git remote add๋ฅผ ํตํด ํด๋น local repo์ ์ฐ๊ฒฐ๋ remote repo๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ์ฌ ์ฐ๊ฒฐ๋์ด ์๋ remote repo์ ์ข ๋ฅ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉดgit remote -v๋ฅผ ์คํํ์ธ์.git log์๋ ์ ๋ง ๋ง์ ์ต์ ์ด ์์ต๋๋ค.-n1์ต์ ์ local repo๊ฐ ํ์ฌ ๊ฐ๋ฆฌํค๊ณ ์๋ commit์์๋ถํฐ 1๊ฐ์ commit ์ด๋ ฅ๋ง ๋ณด์ฌ์ค๋๋ค. ๋ฌผ๋ก-n10๊ณผ ๊ฐ์ด 10๊ฐ๋ง ๋ณผ ์๋ ์์ต๋๋ค.--pretty=format"%P"์ต์ ์ commit ์ด๋ ฅ์ ๊ฐ๊ฐ์ ๋ถ๋ชจ commit๋ค์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ์ด์ธ์๋ ๋ฌด๊ถ๋ฌด์งํ ์ต์ ๋ค์ด ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ ํ์ฉํ๋ฉด ์ข์ ์ผ์ด ์๊ธธ ๊ฒ์ ๋๋ค.git bisect๋ผ๋ ์ปค๋งจ๋๋ ์๋๋ฐ, ์๋ง ์ฌ๋งํ๋ฉด ์ฌ์ฉํ ์ผ์ ์๊ฒ ์ง๋ง, ์ฝ๊ฒ ๋งํด git์ commit ์ด๋ ฅ๋ค์ binary search, ์ฆ ์ด์ง ํ์์ผ๋ก ๋น ๋ฅด๊ฒ ์ฐพ์ ์์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.