[Git] 3-way merge

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

3-way merge

 
3-way merge 는 소프트웨어 개발에서 주로 사용하는 버전 관리 시스템(Git, SVN 등)에서 발생하는 병합(merge) 기법 중 하나이다.
 
github 협업에 앞서, 발생 할 수 있는 merge 충돌을 막기 위해 간단하게 예행 연습을 해보자.
VS Code 를 사용한다.
 
VS Code 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

eunmouse