git

git์ด ์กด์žฌํ•˜๋Š” ์ด์œ 

  • version

  • backup

  • collaborate

๊ฐœ๋…

  • Working Tree - ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ์ €์žฅ์†Œ์—” X

  • Staging Area - ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ํŒŒ์ผ๋“ค์„ ๋„ฃ์–ด๋‘๋Š” ๊ณณ

  • Repository - ์ €์žฅ์†Œ

๋ฒ„์ „๊ด€๋ฆฌ ๋ช…๋ น์–ด

์ดˆ๊ธฐ ์„ค์ •

## Initialized empty Git repository in /Users/...  
git init .

## ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
nano hello1.txt
touch hello2.txt

## ํŒŒ์ผ ๋‚ด์šฉํ™•์ธํ•˜๊ธฐ
cat hello1.txt

log๋ณ„ ํŒŒ์ผ์„ ๋ณด๋Š” ๋ฐฉ๋ฒ•

## For full path names of changed files:
git log --name-only

## For full path names and status of changed files:
git log --name-status

## For abbreviated pathnames and a diffstat of changed files:
git log --stat

diff ์ฐจ์ด์  ํ™•์ธ

## ์ฐจ์ด์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
git diff

checkout ์‹œ๊ฐ„์—ฌํ–‰

## ์‚ฌ๋ผ์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค. ์ด์ „ํŒŒ์ผ๋กœ ๋˜๋Œ๋ ค์„œ ํ™•์ธํ•˜๊ธฐ
git checkout <id>

## ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
git checkout master

commit -am

## add์™€ commit์„ ํ•œ๋ฒˆ์— ํ•˜๊ธฐ
## ์ตœ์ดˆ๋กœ ํ•œ๋ฒˆ์€ add๋ฅผ ํ•œ ํ›„ ํŠธ๋ž˜ํ‚น ์ƒํƒœ์ผ๋•Œ๋งŒ ๋œ๋‹ค.
git commit -am "Message"

git commit ์ˆ˜์ •ํ•˜๊ธฐ

git commit --amend

reset ๋ฒ„์ „์œผ๋กœ resetํ•˜๊ธฐ

## ํ˜„์žฌ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ stage์— ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ  Repository ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
git reset --hard

## ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด
git reset --hard <id>

## ์ˆ˜์ •ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์„ ์‚ด๋ฆฌ๊ณ  ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด soft mixed
git reset --soft <id>

revert commit์˜ ๋ณ€ํ™”๋ฅผ ์ทจ์†Œํ•˜๊ธฐ

## ์ทจ์†Œํ•˜๊ณ  ์‹ถ์€ commit์˜ id
## ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ „์— ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค.
## ํ•œ๋‹จ๊ณ„์”ฉ ๋ฐ–์— ๋ชป๋‚ด๋ ค๊ฐ„๋‹ค.
## ๋ฌด์กฐ๊ฑด ์—ญ์ˆœ์ด๋‹ค.
git revert <id>

Branch & Conflict

log ์˜ต์…˜์œผ๋กœ ํ™•์ธํ•˜๊ธฐ

## --all ๋ชจ๋“  ๋ธŒ๋žœ์น˜๋ณด๊ธฐ
## --graph ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.
## --oneline ๋ฒ„์ „์ด ์žฅํ™•ํ•˜๊ฒŒ ๋‚˜์˜ค์ง€ ์•Š๋„๋ก ํ•ด์ค€๋‹ค.
log --all --graph --oneline

branch

## ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค€๋‹ค.
git branc h

## branch ๋งŒ๋“ค๊ธฐ
git branch <์ด๋ฆ„>

## checkout
## master์™€ ๋™์ผํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ๋“ค์–ด์ง„ ๊ทธ ์‹œ์ ์ด ์ตœ์ดˆ์˜ ์‹œ์ 
git checkout <๋ธŒ๋žœ์น˜์ด๋ฆ„>

๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ master์— ํ•ฉ์น˜๊ธฐ

## ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ commit๊นŒ์ง€ ํ–ˆ๋‹ค๋ฉด master๋กœ checkout
git checkout master

git merge <๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜>

### ์ถฉ๋Œ์ด ๋‚ฌ์„ ๋•Œ

## ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ํ›„ 
git add <ํŒŒ์ผ>

## ๋ฉ”์„ธ์ง€๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
git commit

p4Merge

Merge๋ฅผ ๋„์™€์ค€๋‹ค.

์ฐธ๊ณ  https://gist.github.com/tony4d/3454372

git config --global merge.tool p4mergetool

git config --global mergetool.p4mergetool.cmd \
"/Applications/p4merge.app/Contents/Resources/launchp4merge \$PWD/\$BASE \$PWD/\$REMOTE \$PWD/\$LOCAL \$PWD/\$MERGED"

## ์ž๋™์œผ๋กœ add๊นŒ์ง€ ํ•ด์ค€๋‹ค.
git mergetool

## ์ด์ „ ์ถฉ๋Œ์ƒํ™ฉ ์ฒดํฌ
cat work.txt.orig

git workflow (git flow) ์™€ cherry-pick์™€ rebase

git workflow ๊ทœ์น™์„ ์ ์šฉํ•˜๊ธฐ

cherry-pick์„ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณ‘ํ•ฉํ•˜๊ธฐ

rebase ๊ณต๊ฐ„์„ ๋„ฃ์–ด๋‘๊ณ  ๋ณ‘ํ•ฉํ•˜๊ธฐ

์ถ”ํ›„ ๊ณต๋ถ€๊ฐ€ ๋” ํ•„์š”

HEAD์™€ Branch์™€ commit

Detached

Head๊ฐ€ ๋”์ด์ƒ branch๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ณ  ์ €์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ๋•Œ

git checkout <id>

checkout vs reset

  • checkout (change)

    HEAD๋ฅผ ์ œ์–ดํ•œ๋‹ค.

  • reset (delete ๋А๋‚Œ..)

    ๋ธŒ๋žœ์น˜ / ์ €์žฅ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ์ €์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

backup

  • HTTP

    ๋ณด์•ˆ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค.

  • SSH

    ๋ณด์•ˆ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ์— ๊ณต๋ถ€๊ฐ€ ํ•„์š”

์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐํ•˜๊ธฐ

git remote add origin <์ฃผ์†Œ>

## ์—ฐ๊ฒฐ ํ™•์ธ
git remote

## pushํ•˜๊ธฐ, ์–ด๋–ค ์›๊ฒฉ์ €์žฅ์†Œ์™€ ์—ฐ๊ฒฐํ• ์ง€ ์…‹ํŒ…ํ•œ๋‹ค.
git push --set-upstram origin master

clone

git clone <์ฃผ์†Œ> <๋ณ€๊ฒฝํ•˜๊ณ ์‹ถ์€ ๋””๋ ‰ํ† ๋ฆฌ๋ช…>

pull

## ์›๊ฒฉ์ €์žฅ์†Œ๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
git pull

ํ˜‘์—…

## ์›๊ฒฉ์ €์žฅ์†Œ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•œ๋‹ค.
git clone <์ฃผ์†Œ>

rejected

pushํ›„ rejected๊ฐ€ ๋œฌ๋‹ค๋ฉด ๋‹ค๋ฅธ์‚ฌ๋žŒ์ด ์ž‘์—…ํ•œ ๊ฒƒ์„ pull๋ฐ›์ง€ ์•Š์•„ ์ƒ๊ธด์ผ

git mergetool 

## ์ˆ˜์ •ํ›„ ๋‹ค์‹œ add๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

git fetch -> git merge FETCH_HEAD -> commit -> push

๋ฅผ ํ†ตํ•ด pull -> commit -> push์™€ ๋˜‘๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

(HEAD -> master, origin/master)

HEAD๋Š” ๋กœ์ปฌ์ €์žฅ์†Œ์ธ master๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์›๊ฒฉ์ €์žฅ์†Œ๋Š” origin/master๋ผ๋Š” ๋œป์ด๋‹ค.

## ํ™•์ธํ•ด๋ณด๋ฉด ์›๊ฒฉ์ €์žฅ์†Œ๋Š” ์—…๋ฐ์ดํŠธ ๋˜์–ด์žˆ์ง€๋งŒ ๋กœ์ปฌ์ €์žฅ์†Œ๋Š” ์—…๋ฐ์ดํŠธ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.
git fetch

## ๋”ฐ๋กœ merge๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
git merge origin/master

๋ฐ˜๋ณต์ ์ธ origin/master ํ”ผํ•˜๊ธฐ FETCH_HEAD

cat .git/FETCH_HEAD

## ์ด์ „์— mergeํ•œ HEAD๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค. ํŒŒ์ผ์„ ๋งŒ๋“ฌ์œผ๋กœ
git fetch; git merge FETCH_HEAD

patch

๊ถŒํ•œ์ด ์—†๋Š”๋ฐ ์ „๋‹ฌํ•ด์ฃผ๊ณ  ์‹ถ์€๊ฒฝ์šฐ

## ๋ณด๋‚ด๊ธฐ
git format-patch <์ž‘์—…์ง์ „์˜ id>

## ๋ฐ›๊ธฐ
git am -3 -i *.patch

pull request

ํฌํฌํ›„ ์˜ค๋ฆฌ์ง„ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated

Was this helpful?