inblog logo
|
eunmouse
    git

    [Git] 3-way merge

    Git 병합 방법
    Aug 27, 2024
    [Git] 3-way merge
    Contents
    3-way merge 기타

    3-way merge

     
    3-way merge 는 소프트웨어 개발에서 주로 사용하는 버전 관리 시스템(Git, SVN 등)에서 발생하는 병합(merge) 기법 중 하나이다.
     
    github 협업에 앞서, 발생 할 수 있는 merge 충돌을 막기 위해 간단하게 예행 연습을 해보자.
    VS Code 를 사용한다.
     
    VS Code download 및 설치
    code.visualstudio.com
    https://code.visualstudio.com/download
     
    메뉴바 File > Open Folder 에서 로컬 저장소 gitwork 폴더 만들어서 진행
     
    notion image
     
    test01 폴더 바로 만들고, 폴더선택 클릭
     
    notion image
     
    메뉴바 Terminal > New Terminal 클릭
     
    notion image
     
    git init 으로 작업환경 만들기
     
    notion image
     
    만약 현재 컴퓨터 환경에서 작업이 처음이라면 아래와 같이 user 등록을 꼭 해줘야 한다.
     
    notion image
     
    회원가입.txt 파일 만들기
    만들고 반드시 ctrl + s (저장) 해주어야 나중에 commit 이 된다. (저장 안한 상태로는 커밋 시도할 때, 막힘)
     
    notion image
     
    git add . 으로, 변경사항 저장하고
    git commit -m “회원가입” 으로 커밋한다.
     
    notion image
     
    로그인.txt 파일도 동일하게 만들기
    ctrl + s
    git add . 으로, 변경사항 저장하고
    git commit -m “로그인” 으로 커밋한다.
     
    git log 로 확인
     
    notion image
     
    지금까지 master 브랜치에 만들어왔음.
     
    git checkout -b topic 하면, 브랜치 생성하고 체크아웃까지 같이 된다. (이걸 많이 씀)
     
    notion image
     
    이제 topic 브랜치로 넘어 온 상태.
    topic 브랜치에서 아이디중복체크.txt 파일 만들어주고 동일하게
    git add . 으로, 변경사항 저장하고
    git commit -m “아이디중복체크” 으로 커밋한다.
     
    git log 로 확인
     
    notion image
     
    회원가입 - 로그인 (master) / master 에서 git log 했을 때
    회원가입 - 로그인 (master) - 아이디중복체크 (topic) / topic 에서 git log 했을 때
     
    branch 는 헤더를 가리키는 포인터다.
    가지로 봤을 때는 연결되어있으니, 가지는 1개이다.
     
    (만약 여기서 가지를 병합하고 싶다면
    git merge topic
    바로 Fast-forward merge 된다.)
     
    지금은 아래와 같은 상태

    회원가입 - 로그인 (master) - 아이디중복체크 (topic)

     
    git checkout master
    여기서 master 로 넘어와서 글쓰기.txt 파일을 만들고 커밋해보자.
    양쪽에서 개발이 들어왔을 때 분기한다.
     
    회원가입 - 로그인 - 글쓰기 (master) / master 에서 git log 했을 때
    회원가입 - 로그인 - 아이디중복체크 (topic) / topic 에서 git log 했을 때
     
    형상이 달라진 두 가지를 병합하려면,
    merge 점이 하나 생겨야 한다.
    서로의 branch 포인터가 머지포인터로 이동해야한다.
    이렇게 합쳐져야 한다.

    회원가입 - 로그인 - 아이디중복체크 (topic) - 글쓰기 (master)

    글쓰기가 쏙 들어옴, 3way merge
     
    notion image
     
    master 에서
    git merge topic
    아래와 같은 화면이 나오면 shift + : 누르고 wq 누른다.
     
    notion image
     
    그럼 빠져나올 수 있다.
    그래프로 보면 아래와 같은 가지 모양새
     
    notion image
     
    notion image
     
    병합한 두 branch 에서 아이디중복체크.txt 라는 하나의 파일을 각자 수정해서 커밋 할 경우, 충돌이 생긴다.
    master 가지에서 아이디중복체크.txt 안의 내용을 수정/add . / commit -m “~~수정”
    topic 가지에서도 아이디중복체크.txt 안의 내용을 수정/add . / commit -m “~!~3수정” 해서
    master 에서
    git merge topic 으로 병합하는 경우, 같은 파일의 내용을 수정했기 때문에 아래와 같이 충돌이 생긴다.
    순서를 바꾸든.. 내가 직접 충돌을 해결하고 다시 병합해야 한다.
     
    notion image
     
    위의 빨간 박스 <<<< ==== >>>> 부분 다 지우고,
    직접 충돌을 고쳐야하니 파일을 수정한 동료와 내용 순서를 정하고 편집한 내용으로 합쳐서
    다시 저장, 커밋 하고
    git merge topic
     
    notion image
     
    이것이 3way merge
     
     

    기타

    1. reset 은 hard 만 사용

     
    reset 은 hard 만 쓰자
    git reset —hard 4d83 하면 예쁜태양만 남고 노을은 사라짐
     
    notion image
     
    .git 폴더안에 모든 형상 기록들이 데이터베이스로 다 남아있다. 그것이 reflog
    git reflog
     
    notion image
     

    2. branch 생성 / 확인 / checkout 가지 이동

     
    git branch topic → topic 이라는 이름 만들고
    git branch → 로 확인
    git checkout topic → topic 가지로 왔음
     
    (git checkout -b topic → 브랜치 생성하고 체크아웃까지 해줌, 이걸 많이 씀)
     
    notion image
     
    아이디 중복체크.txt 파일 만들고
    git add .
    git commit -m “아이디중복체크”
     
    git checkout master 로 브랜치 전환
     
    notion image
     

    3. branch 삭제

     
    git branch -D topic 하면 → topic 가지를 날려버리는 것
    git branch 하면 master만 남아 있을 것
     
     
     
    Share article
    Contents
    3-way merge 기타

    eunmouse

    RSS·Powered by Inblog