- Git ์ค์นํ๊ธฐ
- Github์ ์ฝ๋ ์ ์ฅํ๊ธฐ - ๋ฒ์ ๊ด๋ฆฌ
- Git ๋ณ๊ฒฝ์ฌํญ ํ์ธํ๊ธฐ
- Git์ผ๋ก ์์ ์ฌํญ resetํ๊ธฐ
- Git Branch๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
- Github code versioning
- github์์ ํ์ ์ ํ๋ ๋ฐฉ๋ฒ
- git playground
-
"git bash"๋ฅผ ๋ฐ์คํฌํ ๊ฒ์ํ ํ ์คํํ๋ค.
-
ํ์ฌ git version์ ํ์ธํ๋ค.
$ git --version
-
Homebrew (Mac OS ํจํค์ง ๊ด๋ฆฌ์)๋ฅผ ์ค์นํ๋ค. ๋งํฌ
-
Homebrew๋ฅผ ์ด์ฉํ์ฌ git์ ์ค์นํ๋ค.
$ brew install git
-
์ค์น๋ git ์ ๋ณด ํ์ธ
$ brew info git์ฌ๊ธฐ์ Dependencies์์ Optiona์ pcre๊ฐ (x)๋ก ๋์ด ์๋ค๋ฉด pcre๋ ์ค์นํด์ค๋ค. ($ brew install pcre)
-
์ค์น ํ ์ ๊ณผ ๋์ผํ ๋ฒ์ ์ ๋ณด๊ฐ ๋์จ ๊ฒฝ์ฐ ๋ค์์ ๋ช ๋ นํ๋ค.
echo "export PATH=/usr/local/bin:\$PATH" >> ~/.bash_profile
$ cd ./myFolder # ํ์ฌ ํด๋ ์์ myFolder๋ก ๋ค์ด๊ฐ๋ค. ("./"๋ ์๋ตํ ์ ์๋ค.)
$ cd ../ # ํ์ฌ ํด๋์ ๋ถ๋ชจ ํด๋๋ก ์ด๋ํ๋ค.
$ pwd # ํ์ฌ ์ด๋ ๋๋ ํ ๋ฆฌ์ ์๋์ง ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
$ ls # ํ์ฌ ๋๋ ํ ๋ฆฌ ์์ ์๋ ํ์ผ ๋ชฉ๋ก๋ค์ ๋ณด์ฌ์ค๋ค.
$ tree # ํ์ฌ ๋๋ ํ ๋ฆฌ ์์ ์๋ tree๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋ค.
# brew install tree๋ก ์ค์นํด์ค์ผ ํ๋ค.
$ mkdir myFolder # myFolder ํด๋๋ฅผ ํ์ฌ ๊ฒฝ๋ก์ ์์ฑํ๋ค.
$ touch myFile.html # myFile.html์ ํ์ฌ ๊ฒฝ๋ก์ ์์ฑํ๋ค.
$ rm -rf myFolder # myFolder๋ฅผ ๋ฌป์ง๋ ๋ฐ์ง์ง๋ ์๊ณ ๋ค ์ง์ฐ๊ธฐ.
$ rm -i myFolder # ํ์ผ ํ๋ํ๋ ๋ฌผ์ด๋ณด๊ณ ๋ค ์ง์ฐ๊ธฐ.
$ alias ๋จ์ถ๋ช
๋ น์ด="๋ช
๋ น์ด"$ git config --global --list
- git์ ๋ํ ์ค์ ์ ๋ณผ ์ ์๋ค.(์ ์ญ์ผ๋ก)
$ git config --list์ผ๋ก ์ ์ฅ์๋ณ๋ก ์ค์ ์ ์กฐํํ ์ ์๋ค.
$ git config --global user.name github-username
- git user name ์ค์ (--global์ ์๋ฏธ๋ ํด๋น ๋๋ ํฐ๋ฆฌ๋ฟ๋ง ์๋๋ผ ์ ์ฒด ๋ชจ๋ ๋๋ ํฐ๋ฆฌ์ ์ ์ฉ๋๋ค๋ ์๋ฏธ์ด๋ค.)
- ex)
$ git config --global user.name amamov
$ git config --global user.email github-email
- git email ์ค์
- ex)
$ git config --global user.email ysangsuk78@gmail.com
-
github์ ์ ์ํ์ฌ Repositories์ ๋ค์ด๊ฐ์ New ๋ฒํผ์ ๋๋ฅธ๋ค.
-
Repository๋ฅผ ๋ง๋ค์ด์ค๋ค.
git bash (Window OS)๋๋ ํฐ๋ฏธ๋(Mac OS)๋ฅผ ์คํํ๊ณ ์์ ๋๋ ํฐ๋ฆฌ๋ก ๋ค์ด๊ฐ๋ค.
$ cd work-dir
- git์ ์ด๊ธฐํํ๋ค.
$ git init
- git local ์์ ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ๋ค์ staging area๋ก ์ด๋์ํจ๋ค.
$ git add .
- git local ์์ ๋๋ ํฐ๋ฆฌ์ ํน์ ํ์ผ ๋๋ ํด๋์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ staging area๋ก ์ด๋์ํจ๋ค.
$ git add filename(or dirname)
- git staging area์ ์๋ ๋ณ๊ฒฝ ์ฌํญ๋ค์ repository๋ก ์ด๋์ํจ๋ค.
- ์งง์ commit message๋ก commit ํ๋ ๊ฒฝ์ฐ :
$ git commit -m "commit message" - ๊ธธ๊ณ ์์ธํ commit message๋ก commit ํ๋ ๊ฒฝ์ฐ :
$ git commit์ผ๋ก ์์ฑ ์ฐฝ์ผ๋ก ๋์ด๊ฐ ํ ์์ธํ ์์ฑ $ git commit -am "commit message": add์ commit์ ๋์์ ํ๋ค. (ํ๋ฒ์ด๋ผ๋ commit์ ํ๋ ํ์ผ์ ๋ํด์๋ง ์ฌ์ฉํ ์ ์๋ค.)
- ์งง์ commit message๋ก commit ํ๋ ๊ฒฝ์ฐ :
$ git commit -m "first commit"
- main branch๋ฅผ ์์ฑํ๋ค.
$ git branch -M main
- ์๋ฒ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์์ ํต๋ก๋ฅผ ๋ง๋ ๋ค.
$ git remote add origin https://github.com/amamov/git-study.git
- ๋ก์ปฌ ์ ์ฅ์์ repository๋ฅผ ์๋ฒ์ origin main์ repository์ ์ฌ๋ฆฐ๋ค.
$ git push -fu origin main๋ช ๋ น์ด๋ ๋ก์ปฌ ์ ์ฅ์์ repository๋ฅผ ์๋ฒ์ origin main์ repository์ ๊ฐ์ ๋ก ์ฌ๋ฆฐ๋ค. (์๋ฒ ์ ์ฅ์ ํ์ผ๋ค์ ์ฌ๋ผ์ง๋ค.)
$ git push -u origin main
- ์๋ฒ ์ ์ฅ์์ repository๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๊ฐ์ ธ์จ๋ค.
$ git pull
$ git clone https://github.com/amamov/git-study.git
$ git log: git์ commit๋ ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ ์ ์๋ค.$ git diff commit_1_ID commit_2_ID: commit_1_ID ๊ธฐ์ค์ผ๋ก commit_2_ID์ ๋ณ๊ฒฝ์ฌํญ์ ๋น๊ตํ๋ค.$ git diff ๋ก์ปฌ์ ์ฅ์ ์๊ฒฉ์ ์ฅ์: ์๊ฒฉ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์ ๊ฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋น๊ตํ๋ค.- ex.
$ git diff ๋น๊ต๋์_branch์ด๋ฆ origin/branch์ด๋ฆ
- ex.
$ git diff ๋น๊ต๋์_branch_์ด๋ฆ ๊ธฐ์ค_branch_์ด๋ฆ: ๋ธ๋์น๊ฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋น๊ตํ๋ค.
repository์ ์ฌ๋ฆฐ ์ํ์์ $ git reset์ผ๋ก ๋๋๋ฆด ์ ์๋ค.
| ์ด๋๊น์ง ๋๋๋ฆด๊น? | ์ต์ |
|---|---|
| ์์ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ ํ๊ธฐ ์ ์ผ๋ก ๋ฐ๋๋ค. | --hard HEAD^ |
| addํ๊ธฐ ์ ์ํฉ์ผ๋ก ๋๋์๊ฐ๋ค. (๋ํดํธ) | --mixed HEAD^ |
| commitํ ๊ฒ ๊น์ง๋ง ์ทจ์ํ๋ค. | --soft HEAD^ |
- HEAD : ๊ฐ์ฅ ์ต๊ทผ ๋ฒ์ ์์
- ^ : ํ๋ ๋๋๋ฆฌ๊ธฐ
๋ง์ฝ ๊ฐ์ฅ ์ต๊ทผ ์ปค๋ฐ์ผ๋ก๋ถํฐ ์ธ ๊ฐ ์ ์ผ๋ก ๋๋๋ฆฌ๋ ค๋ฉด $ git reset --hard HEAD^^^๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํน์ ์ปค๋ฐ์ผ๋ก ๋๋๋ฆฌ๋ ค๋ฉด $ git reset --hard ๋ฒ์ _ID ๋ช
๋ น์ ์ฌ์ฉํ๋ฉด ๋๋ค.
$ git add .์ผ๋ก stage์ ์ฌ๋ผ๊ฐ ํ์ผ๋ค์$ git reset HEAD๋ก ์ทจ์ํ ์ ์๋ค.
reset๋์ ์revert๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฆฐ ๋ฒ์ ์ดํ์ ๋ฒ์ ๋ค์ ๋ชจ๋ ์ ์ง๋๊ณ , revert๋์๋ค๋ ์ฌ์ค์ ๋ด์ commit๋ง ์๋ก ์ถ๊ฐ๋๋ค. ์ฆ,reset์ ๊ณผ๊ฑฐ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๋ช ๋ น์ด์ด๊ณ ,revert๋ ๊ณผ๊ฑฐ๋ฅผ ๋ณ๊ฒฝ์์ผฐ๋ค๋ ์๋ก์ด commit์ผ๋ก์จ ์๋ก์ด commit์ ๋ง๋๋ ๋ช ๋ น์ด๋ค.
-
$ git branch- ํ์ฌ branch ๋ชฉ๋ก ๋ณด๊ธฐ
-
$ git branch ๋ธ๋์น์ด๋ฆ- ์๋ก์ด branch๋ฅผ ๋ง๋ค๋ค.
-
$ git checkout ๋ธ๋์น์ด๋ฆ- ํน์ branch๋ก ๋ค์ด๊ฐ๊ธฐ
-
$ git merge ํฉ์น๋ ค๋_๋ธ๋์น_์ด๋ฆ- ํ์ฌ ๋ธ๋์น์ ํฉ์น๋ ค๋ ๋ธ๋์น๋ฅผ ํฉ์น๋ค.
-
$ git branch -d ์ญ์ ํ๋ ค๋_๋ธ๋์น_์ด๋ฆ- ํด๋นํ๋ ๋ธ๋์น๋ฅผ ์ญ์ ํ๋ค.
์๊ฒฉ์ ์ฅ์ ์กฐํ(์ถ๊ฐ)ํ๊ธฐ
- ๋ด ๋ก์ปฌ repository์ ์ํธ์์ฉํ๊ณ ์๋ (ํน์ ํ ์ ์๋) ์๊ฒฉ ์ ์ฅ์๋ค์ ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค.
-v์ต์ : ๋จ์ถ์ด๋ฆ๊ณผ URL ๊ฐ์ด ๋ณด๊ธฐ$ git remote add <๋จ์ถ์ด๋ฆ> <URL>: ๊ธฐ์กด ์ํน ๋๋ ํฐ๋ฆฌ์ ์ ์๊ฒฉ์ ์ฅ์๋ฅผ ์ถ๊ฐํ๋ ๋ช ๋ น์ด$ git remote add origin <URL>: URL์ ์๋ ์๊ฒฉ์ ์ฅ์๋ฅผ origin์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ถ๊ฐํ๊ธฐ
$ git remote rm <๋จ์ถ์ด๋ฆ>: ๋จ์ถ์ด๋ฆ์ ์๊ฒฉ์ ์ฅ์์์ ์ฐ๊ฒฐ์ ์ญ์ ํ๋ค.
์๊ฒฉ์ ์ฅ์์ ๋ฐ์ด๋ฃ๊ธฐ
$ git push -u origin main: ๋ด repository์ main ๋ธ๋์น๋ฅผ origin์ main ๋ธ๋์น๋ก pushํ๋ค.-u: origin main์ ๋ํดํธ๋ก ์ง์ . ์ฆ,$ git push,$ git pull๋ฅผ ํ ๋ ๋ํดํธ๋ก origin main์ push, pullํ๋ค.
์๊ฒฉ์ ์ฅ์ ๊ฐ๊ณ ์์ ํฉ์น๊ธฐ
$ git pull (origin main): origin์ ๋ด repository์ main ๋ธ๋์น๋ก ๊ฐ์ง๊ณ ์จ๋ค.(merge)
์๊ฒฉ์ ์ฅ์ ์ผ๋จ ๊ฐ๊ณ ๋ง ์ค๊ธฐ
$ git fetch (origin main): origin์ ๋ก์ปฌ repository์ mergeํ์ง ๋ง๊ณ ์ผ๋จ ๊ฐ์ง๊ณ ์จ๋ค.$ git checkout origin/main: origin/main ์์ ๋ธ๋์น๋ก ๋ฐ๊พผ๋ค. -> origin์ ๋ณ๊ฒฝ๋ ์ฌํญ์ ํ์ธํ ์ ์๋ค.
์๊ฒฉ์ ์ฅ์ ๋ณต์ฌํ๊ธฐ
$ git clone <URL>: URL์ ์๋ ์๊ฒฉ ์ ์ฅ์ ๋ด์ฉ์ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํด์ค๊ธฐ.- origin ์๋ ์์ฑ. ๋ฐ๋ผ์
remote add๋ ํ ํ์ ์๋ค.
- origin ์๋ ์์ฑ. ๋ฐ๋ผ์
$ git clone <URL> --branch <branch> --single-branch <folder>- URL์ ์๋ ์๊ฒฉ์ ์ฅ์์ ํน์ branch๋ฅผ cloneํ์ฌ folder๋ช ์ ์ง์ ํ๋ค.
git clone์์ origin์ด ์๋์ผ๋ก ์์ฑ๋๋ฏ๋ก ์ด๋ฅผ ์์ ์ฃผ๋ ค๋ฉด,$ rm -rf .git๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
joy๋ผ๋ ํ์ฅ๊ณผ amamov๋ผ๋ ํ์์ด ํ์ ์ ํ๋ค๊ณ ๊ฐ์ ํ์. ํ์ฅ์ด ๋ง๋ repository์ธ ํ๋ก์ ํธ REPO๋ฅผ ์ค์ฌ์ผ๋ก ํ์ ์ ์งํํ๋ค๊ณ ํ์.
amamov๋ ํ์ฅ์ด ๋ง๋ repository๋ฅผ cloneํ ํ, ๋ก์ปฌ์ "amamov/main" branch์์ ํ์ฅ์ ์ฝ๋๋ฅผ ๋ฐ์์ค๊ณ "amamov/newbranch" branch์์ ๋ฐ์์จ ์ฝ๋(main)๋ฅผ ๋ณํฉํ์ฌ ์ถ๊ฐ๋ก ์์ ํ ์ฝ๋์ ํจ๊ป ํ์ฅ์๊ฒ pull request๋ฅผ ๋ณด๋ธ๋ค. pull request๋ฅผ ๋ฐ์ ํ์ฅ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฒดํฌํ๊ณ "joy/main"์ ์ต์ข ์ ์ผ๋ก ๋ณํฉํ๋ค.
amamov๋ joy/REPO์ ๋ค์ด๊ฐ์ fork ๋ฒํผ์ ๋๋ฅธ๋ค.
amamov๋ ์์ ์ด forkํ repository๋ฅผ cloneํ๋ค.
-
amamov๋ cloneํ REPO์ ๋ค์ด๊ฐ์
$ git branch newbranch๋ช ๋ น์ ํตํด "newbranch"๋ผ๋ branch๋ฅผ ๋ง๋ ๋ค.- "amamov/main" branch๋ ํ์ฅ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ ์์ branch์ด๋ค. (amamov๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์ฝ๋ ์์ ์ ํ์ง ์๊ณ ์์ํ๊ฒ ํ์ฅ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์จ branch)
- "amamov/newbranch" branch๋ ํ์ฅ์ ์ฝ๋์ amamov๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์ฝ๋ ์์ ์ ์งํํ branch์ด๋ค.
-
$ git checkout newbranch๋ช ๋ น์ผ๋ก "newbranch"์ ๋ค์ด๊ฐ๋ค. -
amamov๋ newbranch์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํ์ผ์ ๋ง๋๋ ๋ฑ ์์ ์ ํ๋ค.
$ git add .$ git commiti๋ฅผ ๋๋ฅด๊ณ ๋ด์ฉ ์์ฑ ํ์ escํค๋ฅผ ๋๋ฅด๊ณ:wq!๋ช ๋ น์ด๋ก ์ ์ฅํ๊ณ ๋๊ฐ๋ค.
$ git push origin newbranch- "newbranch"๋ฅผ origin์ pushํ๋ค.
-
amamov๋ ์์ ์ด forkํ REPO repository์ ๋ค์ด๊ฐ๊ธฐ ์ํด github์ ๋ค์ด๊ฐ๋ค.
-
github์ ํด๋น repository์ ๋ค์ด๊ฐ์
Compare & Pull request๋ฒํผ์ ๋๋ฅธ๋ค. -
๊ทธ ๋ค์
Create pull request๋ฅผ ๋๋ฌ์ pull request๋ฅผ ์๋ํ๋ค.
-
ํ์ฅ์ github์ amamov๊ฐ pull requestํ
amamov:newbranch๊ฐ ๋ณด์ธ๋ค. -
๋ง์ฝ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ถฉ๋์ ํด๊ฒฐํ๋ค.
-
Merge pull request๋ฒํผ์ผ๋ก ๋ณํฉ์ ๋ฐ์์ค๋ค.- revert๋ฅผ ์ด์ฉํ์ฌ ๋ณํฉ ์ด์ ์ผ๋ก ๋์๊ฐ ์ ์๋ค.
-
(๊ด๋ฆฌ๋ฅผ ์ํด amamov๋ newbranch๋ฅผ ์ง์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.)
6. ํ์ฅ(repository ๊ด๋ฆฌ์)์ด REPO repository๋ฅผ ์์ ํ์์ ๋ amamov(ํ์)๊ฐ ํ์ฅ์ด ์์ ํ "joy/main"์ ๊ฐ์ ธ์์ผ ํ๋ค.
amamov๋ ์์ ์ ๋ก์ปฌ ํ๊ฒฝ์ REPO์์ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ๋ค.
-
$ git remote add upstream <joy-URL>(์ต์ด ํ ๋ฒ๋ง)- "upstream"์ด๋ผ๋ ์ด๋ฆ์ผ๋ก joy์ repository URL์ remoteํ๋ค.
-
$ git fetch upstream- upstream์ fetchํ๋ค.(์ผ๋จ ๊ฐ์ ธ์จ๋ค.)
- ๋ณ๊ฒจ ์ฌํญ ํ์ธ ๊ฐ๋ฅ
-
$ git checkout main- "main" branch๋ก ๋ค์ด๊ฐ๋ค.
-
$ git merge upstream/main- "upstream"๊ณผ main์ ๋ณํฉํ๋ค.
-
$ git checkout newbranch- ์์ ์ฉ branch์ธ "newbranch"์ ๋ค์ด๊ฐ๋ค.
-
$ git merge main- "main" branch์ ํ์ฌ branch์ธ "new branch"๋ฅผ ๋ณํฉํ๋ค.