github

Haks.ยท2024๋…„ 12์›” 5์ผ
0

How to use

๋ชฉ๋ก ๋ณด๊ธฐ
1/32

Git

Git์€ ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DVCS, Distributed Version Control System)์œผ๋กœ, ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ถ”์ ํ•˜๊ณ  ํ˜‘์—…์„ ์ง€์›ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Linus Torvalds๊ฐ€ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฐ ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“– Github


    * github ๋“ฑ๋ก
        1. ์ €์žฅ์†Œ ์ƒ์„ฑ (github ์‚ฌ์ดํŠธ)
        2. git remote add origin 0000(์ฃผ์†Œ)
        ์ด๋ฏธ ๋“ฑ๋ก ๋˜ ์žˆ์œผ๋ฉด git remote remove origin 
        3. git push -u origin main

        # pullํ•  ๊ฒƒ์ด ์žˆ์„๋•Œ psuh ํ•˜๋ ค๋ฉด?
            git pull --rebase(ํ˜‘์—…์‹œ ์ฃผ๋กœ์‚ฌ์šฉ) -> git push
            git pull --no-rebase(merge๋ฐฉ์‹) -> git push

    * ๊ธฐ๋ณธ์„ค์ • 
        1. ํ„ฐ๋ฏธ๋„์— pwd๋ฅผ ์ž…๋ ฅํ•ด ํ˜„์žฌ ์œ„์น˜๋ฅผ ํŒŒ์•…ํ•œ๋‹ค
        2. ํ˜„์žฌ์œ„์น˜๊ฐ€ ์›ํ•˜๋Š” ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ๋ฉด cd 000(ํŒŒ์ผ๋ช…)์„ ํ†ตํ•ด ํŒŒ์ผ๋กœ ์ด๋™ํ•œ๋‹ค
        3. git init ์œผ๋กœ ํŒŒ์ผ์„ .git ํŒŒ์ผ๋กœ ๋งŒ๋“ ๋‹ค
        4. git config user.name "--"
        5. git config user.email "--"
        
    * ์ปค๋ฐ‹ ์ˆœ์„œ
        1. git add .
        2. git commit -m "--"
        or
        1. git commit -am "--" (์ด๋ฏธ ์ถ”์ ์ด ๋˜์žˆ๋Š” ํŒŒ์ผ์„ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์ปค๋ฐ‹ ํ•  ๊ฒฝ์šฐ)
        

๋ช…๋ น์–ด(ํ„ฐ๋ฏธ๋„)


    * pwd : ํ˜„์žฌ์œ„์น˜ ํŒŒ์•…
    * cd 000 : ์œ„์น˜ ์ด๋™ 
    * mkdir 0000 : ํด๋”์ƒ์„ฑ
    

๋ช…๋ น์–ด(git)


  • git remote -v : ์ฃผ์†Œํ™•์ธ

  • git config : ์„ค์ •๊ฐ’

  • git config global : ์ปดํ“จํ„ฐ ํŒŒ์ผ ์ „์ฒด์— ์„ค์ •๊ฐ’ ์„ค์ •

  • git add 00 : ํŒŒ์ผ์„ ์ถ”์  ํ•ด์คŒ

  • git add . : ๋ชจ๋“  ํŒŒ์ผ์„ ์ถ”์ 

  • git re --cached.00 : ์ถ”์ ์—์„œ ์ œ์™ธ

  • git status : ํŒŒ์ผ ์ƒํƒœ ํ™•์ธ -> ์ถ”์ ์ƒํƒœ

  • git commit -m "--" : ์ฃผ์„ ๋‹ฌ๊ธฐ

  • git log : ์ฃผ์„ ํ™•์ธ

  • git log --oneline : ํ•œ์ค„ํ˜•ํƒœ์˜ ์ฃผ์„ ํ™•์ธ

  • git log --all --decorate --oneline --grapgh : ๋ชจ๋“  ๋ธŒ๋žœ์น˜์˜ ๋กœ๊ณ  ๋ณด๊ธฐ

  • git checkout --(ํ•ด์‹œ) : ๊ทธ ๋‹น์‹œ ์ปค๋ฐ‹์˜ ์‹œ์ ์œผ๋กœ ๋„˜์–ด๊ฐ ํŒŒ์ผ๋“ค๋„ ํฌํ•จ
    ->git checkout main (๋Œ์•„์˜ค๊ธฐ)

  • git reset : git reset --mixed

  • git reset --hard ํ•ด์‹œ๊ฐ’ : ํ•ด๋‹น ํ•ด์‹œ๊ฐ’ ์ดํ›„์— ๋ฐœ์ƒํ•œ commit ์ „๋ถ€ ์‚ญ์ œ
    git reset --mixed ํ•ด์‹œ๊ฐ’ : ํ•ด๋‹น ํ•ด์‹œ๊ฐ’ ์ดํ›„๋กœ ์‚ญ์ œํ•˜์ง€๋งŒ ํŒŒ์ผ๋“ค์€ ๋‚จ๊น€ ๋‹ค์‹œ ์ปค๋ฐ‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” add ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•จ
    git reset --soft ํ•ด์‹œ๊ฐ’ : commit ๋‚ด์šฉ๋งŒ ์‚ญ์ œ ๋‹ค์‹œ commit ํ•˜๋ฉด ์‚ฌ์šฉ๊ฐ€๋Šฅ

  • git reflog : ๋‚ ์•„๊ฐ„ commit ์ด๋ ฅ๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

  • git reset --hard ํ•ด์‹œ๊ฐ’ : commit ๋“ค ๋‹ค์‹œ ๋ณต๊ตฌ
    (reset ์‹œํ‚จ ํ›„ ๋ณ€๋™ ๋˜์žˆ๋Š”๊ฑฐ ์ผ์ผํžˆ ์ˆ˜์ •ํ•ด์•ผ ํ•จ , ๋ณต๊ตฌ์‹œ ํŒŒ์ผ์„ ์™„์ „ํžˆ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด ์•ˆ์— ๋‚ด์šฉ์€ ๋ณต๊ตฌ ๋ถˆ๊ฐ€ ์ปค๋ฐ‹ ์ด๋ ฅ๋งŒ ๋Œ์•„์˜ด)

  • git revert ํ•ด์‹œ๊ฐ’ : ํ•ด์‹œ๊ฐ’์˜ commit ๋œ ๋‚ด์šฉ๋“ค ๊ทธ์ „ ์ƒํƒœ๋กœ ์ „ํ™˜ ,revert ๋ผ๋Š” ์ด๋ ฅ ๋‚จ์Œ (์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ git revert --continue -> git revert --no-commit)

  • git status : ํ˜„์žฌ Git์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด, ์ถ”์ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ, ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ, ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ํŒŒ์ผ์„ ๋ณด์—ฌ์คŒ

  • git rebase: ๋ธŒ๋žœ์น˜ ๊ธฐ๋ฐ˜์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์ตœ์‹  ์ปค๋ฐ‹์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์žฌ์ •๋ ฌ ํ•˜๋Š” ๋ช…๋ น์–ด, ํ•œ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ ์œ„์— ๋‹ค์‹œ ์ ์šฉ ํ•˜๋Š” ๋ฐฉ์‹

  • git stash : ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž„์‹œ ์ €์žฅํ•˜๊ณ , ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊บ ๋—ํ•œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๋ช…๋ น์–ด

  • git cherry-pick : ํ•„์š”ํ•œ ์ปค๋ฐ‹๋งŒ ๊ณจ๋ผ์„œ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

  • git pull request : Git์—์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฉ”์ธ ์ €์žฅ์†Œ(Repository)์— ๋ณ‘ํ•ฉ(Merge) ์š”์ฒญํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
    ์ผ๋ฐ˜์ ์œผ๋กœ GitHub, GitLab, Bitbucket ๋“ฑ์˜ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค

  • git revert vs git reset:

    • git revert : ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด ๋˜๋Œ๋ฆฐ๋‹ค.
      • ์›๋ž˜์˜ ์ปค๋ฐ‹ ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํŠน์ • ์ปค๋ฐ‹์„ ๋˜๋Œ๋ฆด๋–„ ์‚ฌ์šฉ
      • ํ˜‘์—… ์ค‘ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • git reset : ์ปค๋ฐ‹์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋˜๋Œ๋ฆฐ๋‹ค
      • ์ปค๋ฐ‹ ๊ธฐ๋ก ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ƒํƒœ๋กœ ์ด๋™ํ•  ๋–„ ์‚ฌ์šฉ
      • ๋กœ์ปฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•œ ๊ฒฝ์šฐ ์‹ ์ค‘ํžˆ ์‚ฌ์šฉ
  • git tag <ํƒœ๊ทธ๋ช…> : ์ฐธ์กฐ

    • git tag <ํƒœ๊ทธ๋ช…> -m "ํƒœ๊ทธ ์„ค๋ช…"

์„œ๋ธŒ๋ชจ๋“ˆ

Git ์„œ๋ธŒ๋ชจ๋“ˆ(Git Submodule)์€ ํ•˜๋‚˜์˜ Git ์ €์žฅ์†Œ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ Git ์ €์žฅ์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
์ฆ‰, ๋‹ค๋ฅธ ์ €์žฅ์†Œ(repository)๋ฅผ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ํฌํ•จํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • git submodule add <์„œ๋ธŒ๋ชจ๋“ˆ_์ €์žฅ์†Œ_URL> <์„œ๋ธŒ๋ชจ๋“ˆ_๋””๋ ‰ํ† ๋ฆฌ>

Commit


    * commit์€ ์–ธ์ œ๋“  ์ƒ์„ฑํ•˜๊ณ  ๊ทธ๊ณณ์œผ๋กœ ์ด๋™ ์žˆ์œผ๋‚˜ ํ˜‘์—… ์‹œ ์ค‘์š”ํ•œ ๊ณณ์—๋งŒ ์ปค๋ฐ‹์„ ๋‚จ๊น€

branch


    * ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…์„ ์‹œํ–‰ ํ•  ๋•Œ ์ƒ์„ฑ 
    * ๋ช…๋ น์–ด 
        - git branch : ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ํ™•์ธ
        - git branch 000(๋ธŒ๋žœ์น˜๋ช…) : ๋ธŒ๋žœ์น˜์ƒ์„ฑ
        - git switch 000 : ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
        - git switch -c 000 : ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๋ธŒ๋žœ์น˜๋กœ ์ด๋™
        - git branch -d 000 : ํ•ด๋‹น ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
        - git branch -m 000(๊ธฐ์กด์ด๋ฆ„) 000(๋ณ€๊ฒฝํ• ์ด๋ฆ„) : ๋ธŒ๋žœ์น˜๋ช… ๋ณ€๊ฒฝ
        - git merge 000(ํ•ฉ์น˜๊ณ ์žํ•˜๋Š” ๋ธŒ๋žœ์น˜) : branch ์ด๋ ฅ์„ ์œ ์ง€ํ•œ์ฒด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๋Š”๊ฒƒ, ์ด๋ ฅ ๋‚จ์Œ 
            1. git switch main
            2. git merge 000
            3. git log (ํ™•์ธ)
            4. git branch -d 000(์—†์•ค ๋ธŒ๋žœ์น˜๋ช…) : mergeํ›„ ํ•ฉ์นœ ๋ธŒ๋žœ์น˜๋ช… ์‚ญ์ œ
            * 2๊ฐ€์ง€ merge ๋ฐฉ์‹
                1. 3-way-merge
                ๋ฉ”์ธ์ด ๋‚˜์•„๊ฐ€๊ณ  ๋ฉ”์ธ ์ด์ „์— ํŒŒ์ƒ๋œ ๋ธŒ๋žœ์น˜์—์„œ ๋ฉ”์ธ์ด๋ž‘ ํ•ฉ์ณ์ง€๋Š” ๊ฒƒ
                ๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜์˜ ์ปค๋ฐ‹ ์ด๋ ฅ๊ณผ merge ๋œ ๋ธŒ๋žœ์น˜ ์ด๋ ฅ์ด ์•ˆ๋‚จ์Œ ๋‹ค์Œ ์ปค๋ฐ‹์— ๋ชจ๋“ ๋‚ด์šฉ ์ง‘์–ด๋„ฃ๋Š”๊ฒƒ
                2. fast forward 
                git merge --no -f 0000( ์ด๋ฐฉ์‹ ์‚ฌ์šฉ x)
            5. git merge --squash 000 : commit ์ด๋ ฅ๊ณผ merge๋œ ๋ธŒ๋žœ์น˜ ์ด๋ ฅ๋„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ 
            ์ƒˆ๋กœ์šด commit์— ์ƒ๋Œ€ ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง‘์–ด๋„ฃ์Œ ,์ž๋™ ์ปค๋ฐ‹๋˜์ง€ ์•Š์•„ ๋ณ„๋„์˜ ์ปค๋ฐ‹์š”๊ตฌ
        - git rebase :
            ๋ธŒ๋žœ์น˜์˜ ์ด๋ ฅ์„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์™€ ์—ฐ๊ฑธ์ง€์–ด ํ•˜๋‚˜์˜ ์ด๋ ฅ์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ
            ๊ธฐ์กด ๋ธŒ๋žœ์น˜์˜ ์ด๋ ฅ์ด ์‚ฌ๋ผ์ง€๋ฏ€๋กœ ๊นจ๋—ํ•œ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ด
            ํ•˜๋‚˜์˜ ์ด๋ ฅ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ๋ชจ๋“  ์ปค๋ฐ‹์€ ์žฌ์ •๋ ฌ ๋˜๊ณ  ๊ธฐ์กด ๋กœ๊ทธ์˜ ํ•ด์‹œ๊ฐ’์ด ๋ณ€๋™๋˜์–ด ์ถฉ๋Œ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐ
            1. git switch 0000
            2. git rebase main
            3. git switch main
            4. git merge 0000
            5. git branch -d 0000
        - git cherry-pick 0000(ํ•ด์‹œ๊ฐ’) : ๋ธŒ๋žœ์น˜์—์„œ ์›ํ•˜๋Š” commit ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ 
        ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๊ธฐ์— ๋ธŒ๋žœ์น˜์˜ commit์— ์˜ํ–ฅ ์—†์Œ
        - git --reapply-cherry-pics 0000 : ๋˜๋Œ๋ฆฌ๊ธฐ
        * ๋ฌธ์ œ ๋ฐœ์ƒ *
            1. merge ๊ณผ์ •์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ
            ๊ทธ ๊ฐ’์ค‘ ๋ฌด์Šจ ๊ฐ’์„ ์„ ํƒํ• ์ง€ ํด๋ฆญ ํ•œ ํ›„ ์ €์žฅ -> git add . -> git commit
            2. rebase ๊ณผ์ •์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๊ฐ’์ด ์ถฉ๋Œํ•  ๊ฒฝ์šฐ
            ์œ„์™€ ๊ฐ™์ด ์„ ํƒ ํ›„ -> ํŒŒ์ผ์ €์žฅ -> git add. -> git rebase --continue
            
            

Tip

--

    * .gitignore : ํด๋”์•ˆ์— .gitignore ํŒŒ์ผ๋ช… ์ƒ์„ฑํ›„ ๊ทธ์•ˆ์— ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํŒŒ์ผ๋ช…์„ ์ƒ์„ฑํ•˜๋ฉด ๊ทธํŒŒ์ผ์€ ์ปค๋ฐ‹๋˜์ง€ ์•Š๋Š”๋‹ค. 
    (ex) admin_info.yaml < ์ด ํŒŒ์ผ์€ ์ปค๋ฐ‹๋˜์ง€ ์•Š๋Š”๋‹ค
    * vim ํŽธ์ง‘๊ธฐ : commit์‹œ ๋‚˜์˜ฌ์ˆ˜ ์žˆ์Œ ์‰ฌํ”„ํŠธ i or i + :wq(์ €์žฅํ›„ ์ข…๋ฃŒ) q, esc(์ž…๋ ฅ์ข…๋ฃŒ) ์ด์ •๋„๋งŒ ์•Œ๋ฉด ๋  ๋“ฏ
    

     

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด