시작하기에 앞서
저번 깃 정리의 이어서 이번엔 Git을 좀 더 효율적으로 관리하는 git flow 에 대해 알아보고 다양한 상황에서의 해결을 보여주고자 한다.
Git flow
상황 1. fast-foward
fast-foward는 feature 브랜치 생성된 이후 master 브랜치에 변경 사항이 없는 상황
-
feature/test branch 생성 및 이동
$ git checkout -b feature/test Switched to a new branch 'feature/test' (feature/test) $
-
작업 완료 후 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
-
master 이동
$ git checkout master Switched to branch 'master'
-
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
- 결과 -> fast-foward (단순히 HEAD를 이동)
- branch 삭제
상황 2. merge commit
서로 다른 이력(commit)을 병합(merge)하는 과정에서 다른 파일이 수정되어 있는 상황
git이 auto merging을 진행하고, commit이 발생된다.
-
feature/signout branch 생성 및 이동
$ git checkout -b feature/signout Switched to a new branch 'feature/signout'
-
작업 완료 후 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
-
master 이동
$ git checkout master Switched to branch 'master' $ git log --oneline c6a0e86 (HEAD -> master) Complete test c08aa0a Add:aaa.txt fe93429 Add README.MD
-
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
-
master에 병합
(master) $ git merge feature/signout
-
결과 -> 자동으로 merge commit 발생
- vim 편집기 화면이 나타납니다.
- 자동으로 작성된 커밋 메시지를 확인하고,
esc
를 누른 후:wq
를 입력하여 저장 및 종료를 합니다. w
: writeq
: quit- 커밋이 확인 해봅시다.
$ git merge feature/signout Merge made by the 'recursive' strategy. signout | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 signout
-
그래프 확인하기
$ 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
- branch 삭제
상황 3. merge commit 충돌
서로 다른 이력(commit)을 병합(merge)하는 과정에서 동일 파일이 수정되어 있는 상황
git이 auto merging을 하지 못하고, 해당 파일의 위치에 라벨링을 해준다.
원하는 형태의 코드로 직접 수정을 하고 merge commit을 발생 시켜야 한다.
-
feature/board branch 생성 및 이동
$ git checkout -b feature/board
-
작업 완료 후 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
-
master 이동
$ git checkout master
-
master에 추가 commit 이 발생시키기!!
$ git add . $ git commit -m "add:board and board branch"
- 동일 파일을 수정 혹은 생성하세요!
README.md 파일 수정
-
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)
- 결과 -> merge conflict발생
-
충돌 확인 및 해결
visual code
에서 확인후에 고쳐나감. -
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
: writeq
: quit- 커밋이 확인 해봅시다.
[master d8b8c95] Merge branch 'feature/boarding'
-
그래프 확인하기
$ 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
중간에 이것저것 하느라 조금 지저분하다.
- branch 삭제