๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Memo
CheatSheet
Git

1. git ์ดˆ๊ธฐ ์„ค์ •

1
# ํ˜„์žฌ ์œ„์น˜์—์„œ ์ง€์—ญ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑ
2
$ git init
3
4
# ๊นƒ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ [์‚ฌ์šฉ์ž๋ช…]์œผ๋กœ ์ง€์ •
5
$ git config --global user.name "[์‚ฌ์šฉ์ž๋ช…]"
6
7
# ๊นƒ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ์„ [์‚ฌ์šฉ์ž์ด๋ฉ”์ผ๋ช…]์œผ๋กœ ์ง€์ •
8
$ git config --global user.email "[์‚ฌ์šฉ์ž์ด๋ฉ”์ผ๋ช…]"

2. git ์Šคํ…Œ์ด์ง•

1
# [ํŒŒ์ผ๋ช….ํ™•์žฅ์ž๋ช…]์„ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆผ
2
$ git add [ํŒŒ์ผ๋ช….ํ™•์žฅ์ž๋ช…]
3
4
# ์ƒํƒœ๋ฅผ ํ™•์ธ
5
$ git status
6
7
# ํŒŒ์ผ add ์ทจ์†Œ
8
$ git restore --staged ํŒŒ์ผ๋ช…
9
10
# ์ „์ฒด add ์ทจ์†Œ
11
$ git reset HEAD

3. git ์ปค๋ฐ‹

1
# ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ [๋ฉ”์‹œ์ง€๋ช…]์„ ๋ถ™์—ฌ ์ปค๋ฐ‹
2
$ git commit -m "[๋ฉ”์‹œ์ง€๋ช…]"
3
$ git commit -am "[๋ฉ”์‹œ์ง€๋ช…]" # ์Šคํ…Œ์ด์ง•๊ณผ ์ปค๋ฐ‹์„ ๋™์‹œ์— ์ง„ํ–‰
4
5
6
# ์ตœ๊ทผ ์ˆœ์„œ๋Œ€๋กœ ์ปค๋ฐ‹์„ ์ทจ์†Œ
7
$ git reset HEAD^ # ํ˜„์žฌ HEAD์˜ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
8
$ git reset HEAD~n # ํ˜„์žฌ๋กœ ๋ถ€ํ„ฐ n ๋ฒˆ์งธ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
9
10
11
# ๋กค๋ฐฑํ•  ์ปค๋ฐ‹์„ ์ง€์ •
12
$ git reset [์ปค๋ฐ‹ ํ•ด์‹œ]
13
14
# - reset์˜ 3๊ฐ€์ง€ ์˜ต์…˜
15
$ git reset --soft [์ปค๋ฐ‹ID] # head ๋งŒ ๋ฐ”๋€œ
16
$ git reset --mixed [์ปค๋ฐ‹ID] # staging ๋„ ๊ทธ ๋•Œ๋กœ ๋ฐ”๋€œ
17
$ git reset --hard [์ปค๋ฐ‹ID] # working๋””๋ ‰ํ† ๋ฆฌ/staging ๋ชจ๋‘ ๊ทธ ๋•Œ๋กœ ๋ฐ”๊ฟˆ
18
19
20
# ์ปค๋ฐ‹์„ ์‚ญ์ œํ•˜์ง€์•Š๊ณ  ์ด์ „ ์ปค๋ฐ‹์„ ์ƒˆ๋กœ ๋ณต์‚ฌ ์ถ”๊ฐ€ํ•˜๋Š” ์‹์œผ๋กœ ๋กค๋ฐฑ
21
$ git revert [์ปค๋ฐ‹ ํ•ด์‹œ] # ํ•ด๋‹น ์ปค๋ฐ‹ ์ด์ „์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค๋ผ๋Š” ๋ช…๋ น
22
23
24
# ์ปค๋ฐ‹ ์ˆ˜์ •ํ•˜๋Š” ๋ฒ•
25
# ... ํŒŒ์ผ ์ˆ˜์ • ํ•œ ๋’ค
26
$ git add .
27
$ git commit --amend # ์ตœ์‹  ์ปค๋ฐ‹ ์ˆ˜์ •

4. git ์ด๋ ฅ ํ™•์ธ

1
# ์ปค๋ฐ‹ ๋‚ด์—ญ ํ™•์ธ
2
$ git log # ์ „์ฒด ์ด๋ ฅ์„ ๋ณด์—ฌ์ค€๋‹ค.
3
$ git shortlog
4
$ git log --oneline # ์ปค๋ฐ‹๊ณผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์กฐํšŒ
5
6
$ git log -p # ์ด๋ ฅ์„ ๋ณด์—ฌ์ค„ ๋•Œ, ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋„ ๋ณด์—ฌ์ค€๋‹ค.
7
$ git log [filename] # ํŠน์ • ํŒŒ์ผ์— ๋Œ€ํ•œ ์ด๋ ฅ์„ ๋ณด์—ฌ์ค€๋‹ค.
8
$ git log -p [filename] # ํŠน์ • ํŒŒ์ผ์˜ ์ด๋ ฅ๊ณผ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
9
10
$ git log --stat # ์ปค๋ฐ‹๋งˆ๋‹ค ํŒŒ์ผ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๋œ ํ†ต๊ณ„๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์คŒ
11
$ git log --graph # ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ ๋ฐ ๋ณ‘ํ•ฉ๋‚ด์šฉ์„ ์•„์Šคํ‚ค ๊ทธ๋ž˜ํ”„๋กœ ๋ณด์—ฌ์คŒ
12
13
14
# ํŠน์ • ์ปค๋ฐ‹ ๋‚ด์—ญ ํ™•์ธ
15
$ git show [์ปค๋ฐ‹ id]
16
17
18
# ์ตœ๊ทผ ๋ฒ„์ „๊ณผ ์ž‘์—… ํด๋”์˜ ์ˆ˜์ • ํŒŒ์ผ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ์ถœ๋ ฅ
19
$ git diff # modified ์ƒํƒœ์˜ file๊ณผ ๋งˆ์ง€๋ง‰ commit ๋น„๊ต
20
$ git diff --staged # staged ์ƒํƒœ์˜ file๊ณผ ๋งˆ์ง€๋ง‰ commit ๋น„๊ต
21
$ git diff --color-words # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ color ํ’€ํ•˜๊ฒŒ ๋น„๊ต
22
$ git diff [๋ธŒ๋žœ์น˜์ด๋ฆ„] # ํ˜„์žฌ๋ธŒ๋žœ์น˜์™€ ์„ ํƒ๋œ ๋ธŒ๋žœ์น˜์™€ ์ฐจ์ด์  ๋น„๊ต
23
$ git diff [์ด์ „์ปค๋ฐ‹ id] [์ดํ›„์ปค๋ฐ‹ id] # ์ปค๋ฐ‹ ๋น„๊ต
git log ๋ช…๋ น์–ด ์˜ˆ์‹œ์„ค๋ช…
git logHEAD์™€ ๊ด€๋ จ๋œ commit๋“ค์ด ์ž์„ธํ•˜๊ฒŒ ๋‚˜์˜ด
git log โ€”oneline๊ฐ„๋‹จํžˆ commit ํ•ด์‹œ์™€ ์ œ๋ชฉ๋งŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ
git log โ€”oneline โ€”graph โ€”decorateHEAD์™€ ๊ด€๋ จ๋œ commit๋“ค์„ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ
git log โ€”oneline โ€”graph โ€”all โ€”decorate๋ชจ๋“  branch๋“ค์„ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด
git log โ€”oneline -n7๋‚ด branch์˜ ์ตœ์‹  commit์„ 7๊ฐœ๋งŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

5. ์›๊ฒฉ ์ €์žฅ์†Œ

1
# ์›๊ฒฉ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ
2
$ git remote add origin [github ๋ ˆํฌ์ง€ ์ฃผ์†Œ]
3
4
# ์˜ต์…˜ ์ข…๋ฅ˜ ๋ณด๊ธฐ
5
$ git remote --help
6
7
# ์ถ”๊ฐ€ํ•œ ์›๊ฒฉ์ €์žฅ์†Œ์˜ ๋ชฉ๋ก ํ™•์ธ
8
$ git remote
9
$ git remote -v # ์ƒ์„ธํžˆ
10
11
# ํŠน์ • ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
12
$ git remote show ์ด๋ฆ„
13
14
# ์›๊ฒฉ์ €์žฅ์†Œ ์ด๋ฆ„ ๋ณ€๊ฒฝ
15
$ git remote rename ๊ธฐ์กด์ด๋ฆ„ ๋ณ€๊ฒฝํ• ์ด๋ฆ„
16
17
# ์›๊ฒฉ์ €์žฅ์†Œ๋ฅผ ์ œ๊ฑฐ
18
$ git remote rm ์ด๋ฆ„
1
# ์ง€์—ญ ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹์„ ๋งจ ์ฒ˜์Œ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ
2
$ git push -u origin master
3
4
# -u๋กœ ๋“ฑ๋กํ•œ ํ›„์— ์ง€์—ญ ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹์„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ(์—…๋กœ๋“œ)
5
$ git push
6
$ git push origin master
7
8
9
# ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹์„ ์ง€์—ญ ์ €์žฅ์†Œ๋กœ ๊ฐ€์ ธ์˜ด
10
$ git pull origin master
11
12
# ์›๊ฒฉ ์ €์žฅ์†Œ ๋ณต์ œํ•˜๊ธฐ
13
$ git clone [์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ]
14
15
# ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ปค๋ฐ‹์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๊ณ  mergeํ•˜์ง€ ์•Š๋Š”๋‹ค
16
$ git fetch
17
# ์ดํ›„์—” diff ๋กœ ๋น„๊ต
18
$ git diff test origin/test # ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ด test์ผ ๊ฒฝ์šฐ ์˜ˆ์‹œ
19
20
# ์›๊ฒฉ์ €์žฅ์†Œ ์‚ญ์ œ(๋Š๊ธฐ)
21
$ git remote remove origin

6. ์ €์žฅ์†Œ ํŒŒ์ผ ์‚ญ์ œ

1
# ๋กœ์ปฌ์ €์žฅ์†Œ ์›๊ฒฉ์ €์žฅ์†Œ ๋‘˜๋‹ค ํŒŒ์ผ ์‚ญ์ œ
2
$ git rm [filename]
3
4
# ์›๊ฒฉ์ €์žฅ์†Œ ํŒŒ์ผ๋งŒ ์‚ญ์ œ. ๋กœ์ปฌ์ €์žฅ์†Œ ํŒŒ์ผ์€ ๋ƒ…๋‘ 
5
$ git rm --cached [filename]

7. git branch

1
# ๋ธŒ๋žœ์น˜ ํ™•์ธ
2
$ git branch
3
4
# ๋ธŒ๋žœ์น˜ ์ถ”๊ฐ€ / ์‚ญ์ œ
5
$ git branch [branch name]
6
$ git branch -d [branch name] # -delete
7
8
# ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
9
$ git switch [branch name]
10
$ git checkout [branch name]
11
12
# ๋ธŒ๋žœ์น˜ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐ”๋กœ ์ด๋™
13
$ git switch -c [branch name]
14
$ git checkout -b [branch name]
15
16
17
# ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ merge
18
$ git merge [branch name]

8. git cherry-pick

1
# ๋งŒ์ผ ๋‚ด๊ฐ€ X ๋ธŒ๋žœ์น˜์— ์žˆ๊ณ 
2
# ๋ธŒ๋žœ์น˜ Y์˜ ์ปค๋ฐ‹ ์ค‘ 76ae30ef์™€ 13af32cc๋งŒ ๊ณจ๋ผ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์ธ X์— ์ ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ
3
$ git cherry-pick 76ae30ef 13af32cc

9. git stash

1
# staged, modified ์ƒํƒœ์˜ ํŒŒ์ผ์„ ์ €์žฅ
2
$ git stash
3
4
# stash๋กœ ์ €์žฅํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ
5
$ git stash list
6
7
# ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅํ•œ stash๋ฅผ ๋ฐ˜์˜
8
$ git stash apply
9
$ git stash apply stash@{1} # ์ง€์ •ํ•œ stash๋ฅผ ๋ฐ˜์˜
10
11
# ์ง€์ •ํ•œ stash๋ฅผ ์‚ญ์ œ
12
$ git stash drop stash@{1}
13
14
# stash๋ฅผ ๋ฐ˜์˜ํ•˜๊ณ  ์ž๋™ ์‚ญ์ œ
15
$ git stash pop

10. git tag

  • light weight ํƒœ๊ทธ : ๋‹จ์ˆœ ์ปค๋ฐ‹ ํƒœ๊ทธ์šฉ. ์ปค๋ฐ‹์„ ๋ฐ”๋กœ ๊ฐ€๋ฆฌํ‚ด
  • annotated ํƒœ๊ทธ : ํƒœ๊ทธ ๋ฉ”์„ธ์ง€๋„ ์ฒจ๋ถ€ํ• ์ˆ˜ ์žˆ์–ด ์ž์ฒด ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง. ^์ด ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ด
1
# ํƒœ๊ทธ ์ถ”๊ฐ€
2
$ git tag [ํƒœ๊ทธ์ด๋ฆ„]
3
$ git tag [ํƒœ๊ทธ์ด๋ฆ„] [์ปค๋ฐ‹๋ฒˆํ˜ธ] # ํŠน์ • ํ•ด์‰ฌ์— ํƒœ๊ทธ ์ถ”๊ฐ€
4
$ git tag -a [ํƒœ๊ทธ์ด๋ฆ„] [์ปค๋ฐ‹๋ฒˆํ˜ธ] # ํŠน์ • ํ•ด์‰ฌ์— annotated ํƒœ๊ทธ ์ถ”๊ฐ€
5
6
7
# ํƒœ๊ทธ ์กฐํšŒ
8
$ git tag
9
$ git tag -l 'v1.*' # ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์œผ๋กœ ๊ฒ€์ƒ‰์กฐํšŒ
10
$ git show [ํƒœ๊ทธ์ด๋ฆ„] # ํŠน์ • ํƒœ๊ทธ ์กฐํšŒ
11
$ git show-ref --tags # ํ•ด์‰ฌ๊ฐ’๊ณผ ํƒœ๊ทธ ์กฐํšŒ

11. git blame

1
# git ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋ˆ„๊ฐ€ ์ˆ˜์ •ํ–ˆ๋Š”์ง€, ์–ด๋–ค commit์œผ๋กœ ์ˆ˜์ •์ด ๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•  ๋•Œ
2
3
# ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ˆ˜์ • ๋‚ด์—ญ
4
$ git blame <ํŒŒ์ผ๋ช…>
5
6
# author name๊ณผ timestamp๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ.
7
$ git blame -s <ํŒŒ์ผ๋ช…>
8
9
# description๊ณผ ์ˆ˜์ •์‚ฌํ•ญ์„ ๋ณด์—ฌ์คŒ
10
$ git show <์ปค๋ฐ‹๋ฒˆํ˜ธ>
11
12
# ํŒŒ์ผ๋‚ด์šฉ์„ start๋ถ€ํ„ฐ end ๋ผ์ธ๊นŒ์ง€์˜ ์ˆ˜์ • ๋‚ด์—ญ๋งŒ ๋ณด์—ฌ์คŒ
13
$ git blame -L <start,end> <ํŒŒ์ผ๋ช…>

12. ๊ธฐํƒ€

1
$ git checkout -b "MCB-##-task-name"
2
3
# ์ด ์ „์— ์ž‘์—…ํ•˜๊ณ  ์žˆ๋˜ ๊ฒƒ๋“ค์„ git add . git commit -m ...
4
$ git checkout main
5
$ git pull origin main
6
$ git checkout MDB-๋ธŒ๋žœ์น˜๋ช…
7
$ git merge main

13. ์ปค๋ฐ‹๋ฉ”์‹œ์ง€ ๊ทœ์น™

  • Feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • Fix : ๋ฒ„๊ทธ ์ˆ˜์ •
  • Style : ์ฝ”๋“œ ์–‘์‹ ๋ณ€๊ฒฝ
  • Refactor : ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
  • Test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •
  • Docs : ๋ฌธ์„œ ์ˆ˜์ •