Git Branch

1. branch ๊ด€๋ จ ๋ช…๋ น์–ด

Git ๋ธŒ๋žœ์น˜๋ฅผ ์œ„ํ•ด root-commit์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์ง„ํ–‰ํ•˜์„ธ์š”.

  1. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

    (master) $ git branch {๋ธŒ๋žœ์น˜๋ช…}
  2. ๋ธŒ๋žœ์น˜ ์ด๋™

    (master) $ git checkout {๋ธŒ๋žœ์น˜๋ช…}
  3. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ด๋™

    (master) $ git checkout -b {๋ธŒ๋žœ์น˜๋ช…}
  4. ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

    (master) $ git branch -d {๋ธŒ๋žœ์น˜๋ช…}
  5. ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก

    (master) $ git branch
  6. ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ

    (master) $ git merge {๋ธŒ๋žœ์น˜๋ช…}
  • master ๋ธŒ๋žœ์น˜์—์„œ {๋ธŒ๋žœ์น˜๋ช…}์„ ๋ณ‘ํ•ฉ

2. branch ๋ณ‘ํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค

branch ๊ด€๋ จ๋œ ๋ช…๋ น์–ด๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์†์—์„œ ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ  ์ž์œ ๋กญ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ƒํ™ฉ 1. fast-foward

fast-foward๋Š” feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๋œ ์ดํ›„ master ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š” ์ƒํ™ฉ

  1. feature/crud branch ์ƒ์„ฑ ๋ฐ ์ด๋™

    git branch feature/crud
    git checkout feature/crud
    • ํ˜น์€

    git checkout -b feature/crud
  2. ์ž‘์—… ์™„๋ฃŒ ํ›„ commit

    • ์ž„์˜์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , commit

    • add , commit

  3. master ์ด๋™

    (feature/crud) $ git checkout master
    Switched to branch 'master'
    (master) $
  4. master์— ๋ณ‘ํ•ฉ

    $ git merge feature/crud
    Updating d66ff92..f219c8c
    # Fast-forward!!!
    Fast-forward
     crud.html | 0
     urls.py   | 1 +
     views.py  | 1 +
     3 files changed, 2 insertions(+)
     create mode 100644 crud.html
     create mode 100644 urls.py
     create mode 100644 views.py
    
  5. ๊ฒฐ๊ณผ -> fast-foward

    $ git log --oneline
    f219c8c (HEAD -> master, feature/crud) Complete CRUD)
    d66ff92 Init
  6. branch ์‚ญ์ œ

    git branch -d feature/crud

์ƒํ™ฉ 2. merge commit

์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ ฅ(commit)์„ ๋ณ‘ํ•ฉ(merge)ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ

git์ด auto merging์„ ์ง„ํ–‰ํ•˜๊ณ , commit์ด ๋ฐœ์ƒ๋œ๋‹ค.

  1. feature/signout branch ์ƒ์„ฑ ๋ฐ ์ด๋™

    (master)
    $ git checkout -b feature/signout
    Switched to a new branch 'feature/signout'
    (feature/signout) $
  2. ์ž‘์—… ์™„๋ฃŒ ํ›„ commit

    touch signout.txt
    git add .
    git commit -m 'Complete'
  3. master ์ด๋™

    (feature/signout)
    $ git checkout master
    Switched to branch 'master'
    (master) $
  4. master์— ์ถ”๊ฐ€ commit ์ด ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ!!

    • ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ˆ˜์ • ํ˜น์€ ์ƒ์„ฑํ•˜์„ธ์š”!

  5. master์— ๋ณ‘ํ•ฉ

    $ git merge feature/signout
    Merge made by the 'recursive' strategy.
     signout.txt | 0
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 signout.txt
  6. ๊ฒฐ๊ณผ -> ์ž๋™์œผ๋กœ merge commit ๋ฐœ์ƒ

  7. ๊ทธ๋ž˜ํ”„ ํ™•์ธํ•˜๊ธฐ

    $ git log --oneline --graph
    *   2125d5b (HEAD -> master) Merge branch 'feature/signout'
    |\
    | * fb74094 (feature/signout) Complete signout
    * | 75f0abd README @ master
    |/
    * f219c8c Complete CRUD)
    * d66ff92 Init
    $ git log -1 --oneline
    2125d5b (HEAD -> master) Merge branch 'feature/signout'
  8. branch ์‚ญ์ œ

    $ git branch -d feature/signout
    Deleted branch feature/signout (was fb74094).


์ƒํ™ฉ 3. merge commit ์ถฉ๋Œ

์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ ฅ(commit)์„ ๋ณ‘ํ•ฉ(merge)ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ™์€ ํŒŒ์ผ์˜ ๋™์ผํ•œ ๋ถ€๋ถ„์ด ์ˆ˜์ •๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ

git์ด auto merging์„ ํ•˜์ง€ ๋ชปํ•˜๊ณ , ์ถฉ๋Œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œฌ๋‹ค.

ํ•ด๋‹น ํŒŒ์ผ์˜ ์œ„์น˜์— ํ‘œ์ค€ํ˜•์‹์— ๋”ฐ๋ผ ํ‘œ์‹œ ํ•ด์ค€๋‹ค.

์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์ˆ˜์ •์„ ํ•˜๊ณ  ์ง์ ‘ commit์„ ๋ฐœ์ƒ ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

  1. feature/signup branch ์ƒ์„ฑ ๋ฐ ์ด๋™

    (master)
    $ git checkout -b feature/signup
    Switched to a new branch 'feature/signup'
  2. ์ž‘์—… ์™„๋ฃŒ ํ›„ commit

    • add, commit

  3. master ์ด๋™

    (feature/signup)
    $ git checkout master
    Switched to branch 'master'
  4. master์— ์ถ”๊ฐ€ commit ์ด ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ!!

    • ๋™์ผ ํŒŒ์ผ์„ ์ˆ˜์ • ํ˜น์€ ์ƒ์„ฑํ•˜์„ธ์š”!

   $ git log --oneline
   3c81134 (HEAD -> master) Hotfix signout urls.py
   2125d5b Merge branch 'feature/signout'
   75f0abd README @ master
   fb74094 Complete signout
   f219c8c Complete CRUD)
   d66ff92 Init
  1. master์— ๋ณ‘ํ•ฉ

    (master)
    $ git merge feature/signup
    Auto-merging urls.py
    CONFLICT (content): Merge conflict in urls.py
    Automatic merge failed; fix conflicts and then commit the result.
    
    (master|MERGING)
  2. ๊ฒฐ๊ณผ -> merge conflict๋ฐœ์ƒ

    git status ๋ช…๋ น์–ด๋กœ ์ถฉ๋Œ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

    (master|MERGING)
    $ git status
    On branch master
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Changes to be committed:
            new file:   signup.txt
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
            both modified:   urls.py
  3. ์ถฉ๋Œ ํ™•์ธ ๋ฐ ํ•ด๊ฒฐ

    <<<<<<< HEAD
    # signout
    =======
    # signup
    >>>>>>> feature/signup
  4. merge commit ์ง„ํ–‰

    git commit
    • vim ํŽธ์ง‘๊ธฐ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

    • ์ž๋™์œผ๋กœ ์ž‘์„ฑ๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , esc๋ฅผ ๋ˆ„๋ฅธ ํ›„ :wq๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ €์žฅ ๋ฐ ์ข…๋ฃŒ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

      • w : write

      • q : quit

    • ์ปค๋ฐ‹์ด ํ™•์ธ ํ•ด๋ด…์‹œ๋‹ค.

  5. ๊ทธ๋ž˜ํ”„ ํ™•์ธํ•˜๊ธฐ

    (master)
    $ git log --oneline --graph
    *   4e55ba7 (HEAD -> master) Merge branch 'feature/signup'
    |\
    | * fc7f0d8 (feature/signup) Complete signup
    * | 3c81134 Hotfix signout urls.py
    |/
    *   2125d5b Merge branch 'feature/signout'
    |\
    | * fb74094 Complete signout
    * | 75f0abd README @ master
    |/
    * f219c8c Complete CRUD)
    * d66ff92 Init
    
  6. branch ์‚ญ์ œ

    git branch -d feature/signup

Last updated

Was this helpful?