깃 정리 -02

시작하기에 앞서

저번 깃 정리의 이어서 이번엔 Git을 좀 더 효율적으로 관리하는 git flow 에 대해 알아보고 다양한 상황에서의 해결을 보여주고자 한다.

Git flow

상황 1. fast-foward

fast-foward는 feature 브랜치 생성된 이후 master 브랜치에 변경 사항이 없는 상황

  1. feature/test branch 생성 및 이동

    $ git checkout -b feature/test
    Switched to a new branch 'feature/test'
    
    (feature/test) $
  2. 작업 완료 후 commit

    $ touch test.txt
    $ git add text.txt
    $ git commit -m "Complete test"
    
    [feature/test c6a0e86] Complete test
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt
  3. master 이동

    $ git checkout master
    Switched to branch 'master'
  4. master에 병합

    (master) $ git merge feature/test
    Updating c08aa0a..c6a0e86
    Fast-forward
    test.txt | 0
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt
  5. 결과 -> fast-foward (단순히 HEAD를 이동)
  6. branch 삭제

상황 2. merge commit

서로 다른 이력(commit)을 병합(merge)하는 과정에서 다른 파일이 수정되어 있는 상황

git이 auto merging을 진행하고, commit이 발생된다.

  1. feature/signout branch 생성 및 이동

    $ git checkout -b feature/signout
    Switched to a new branch 'feature/signout'
  2. 작업 완료 후 commit

    $ git add signout
    $ git commit -m "Add:signout"
    [feature/signout 1c3facd] Add:signout
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 signout
    $ git checkout master
    Switched to branch 'master'
    (master)
    $ git log --oneline
    1c3facd (HEAD -> feature/signout) Add:signout
    c6a0e86 (master) Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD
  3. master 이동

    $ git checkout master
    Switched to branch 'master'
    $ git log --oneline
    c6a0e86 (HEAD -> master) Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD
  4. master에 추가 commit 이 발생시키기!!

    • 다른 파일을 수정 혹은 생성하세요!
    $ touch hotfix.txt
    $ git add .
    $ git commit -m "hotfix on master"
    [master 28d7a84] hotfix on master
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 hotfix.txt
    
    $ git log --oneline
    28d7a84 (HEAD -> master) hotfix on master
    c6a0e86 Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD
  5. master에 병합

    (master) $ git merge feature/signout
  6. 결과 -> 자동으로 merge commit 발생

    • vim 편집기 화면이 나타납니다.
    • 자동으로 작성된 커밋 메시지를 확인하고, esc를 누른 후 :wq를 입력하여 저장 및 종료를 합니다.
    • w : write
    • q : quit
    • 커밋이 확인 해봅시다.
    $ git merge feature/signout
    Merge made by the 'recursive' strategy.
    signout | 0
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 signout
  7. 그래프 확인하기

    $ git log --oneline
    5b87e65 (HEAD -> master) Merge branch 'feature/signout'
    28d7a84 hotfix on master
    1c3facd (feature/signout) Add:signout
    c6a0e86 Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD
  8. branch 삭제

상황 3. merge commit 충돌

서로 다른 이력(commit)을 병합(merge)하는 과정에서 동일 파일이 수정되어 있는 상황

git이 auto merging을 하지 못하고, 해당 파일의 위치에 라벨링을 해준다.

원하는 형태의 코드로 직접 수정을 하고 merge commit을 발생 시켜야 한다.

  1. feature/board branch 생성 및 이동

    $ git checkout -b feature/board
  2. 작업 완료 후 commit

    (board) $ touch board.html
    # README.md 수정
    $ git add .
    $ git commit -m "Complete board & update README.md"
    
    $ git log --oneline
    5b87e65 (HEAD -> feature/board, master) Merge branch 'feature/signout'
    28d7a84 hotfix on master
    1c3facd Add:signout
    c6a0e86 Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD
  3. master 이동

    $ git checkout master
  4. master에 추가 commit 이 발생시키기!!

    $ git add .
    $ git commit -m "add:board and board branch"
    • 동일 파일을 수정 혹은 생성하세요!

    README.md 파일 수정

  5. master에 병합

    $ git merge feature/boarding
    Auto-merging README.md
    CONFLICT (content): Merge conflict in README.md
    Automatic merge failed; fix conflicts and then commit the result
    
    (master|MERGING)
  6. 결과 -> merge conflict발생
  7. 충돌 확인 및 해결

    visual code 에서 확인후에 고쳐나감.

  8. merge commit 진행

    $ git commit
    • vim 편집기 화면이 나타납니다.
    Merge branch 'feature/boarding'
    
    # Conflicts:
    #       README.md
    #
    # It looks like you may be committing a merge.
    # If this is not correct, please remove the file
    #       .git/MERGE_HEAD
    # and try again.
    
    
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # On branch master
    # All conflicts fixed but you are still merging.
    #
    # Changes to be committed:
    #       modified:   README.md
    #       new file:   boarding.html
    #
    ~
    • 자동으로 작성된 커밋 메시지를 확인하고, esc를 누른 후 :wq를 입력하여 저장 및 종료를 합니다.
    • w : write
    • q : quit
    • 커밋이 확인 해봅시다.
    [master d8b8c95] Merge branch 'feature/boarding'
  9. 그래프 확인하기

    $ git log --oneline
    d8b8c95 (HEAD -> master) Merge branch 'feature/boarding'
    3bcec90 Update:README.md
    3c365ef (feature/boarding) update:README.md
    3275a17 Complete boarding
    48b58ea add:board
    dbc3d10 add:board and board branch
    5b87e65 Merge branch 'feature/signout'
    28d7a84 hotfix on master
    1c3facd Add:signout
    c6a0e86 Complete test
    c08aa0a Add:aaa.txt
    fe93429 Add README.MD

    중간에 이것저것 하느라 조금 지저분하다.

  10. branch 삭제
© 2020 JunhoBaik, Built with Gatsby