3-way merge
3-way merge 는 소프트웨어 개발에서 주로 사용하는 버전 관리 시스템(Git, SVN 등)에서 발생하는 병합(merge) 기법 중 하나이다.
github 협업에 앞서, 발생 할 수 있는 merge 충돌을 막기 위해 간단하게 예행 연습을 해보자.
VS Code 를 사용한다.
VS Code download 및 설치
메뉴바 File > Open Folder 에서 로컬 저장소 gitwork 폴더 만들어서 진행

test01 폴더 바로 만들고, 폴더선택 클릭

메뉴바 Terminal > New Terminal 클릭

git init 으로 작업환경 만들기

만약 현재 컴퓨터 환경에서 작업이 처음이라면 아래와 같이 user 등록을 꼭 해줘야 한다.

회원가입.txt 파일 만들기
만들고 반드시 ctrl + s (저장) 해주어야 나중에 commit 이 된다. (저장 안한 상태로는 커밋 시도할 때, 막힘)

git add . 으로, 변경사항 저장하고
git commit -m “회원가입” 으로 커밋한다.

로그인.txt 파일도 동일하게 만들기
ctrl + s
git add . 으로, 변경사항 저장하고
git commit -m “로그인” 으로 커밋한다.
git log 로 확인

지금까지 master 브랜치에 만들어왔음.
git checkout -b topic 하면, 브랜치 생성하고 체크아웃까지 같이 된다. (이걸 많이 씀)

이제 topic 브랜치로 넘어 온 상태.
topic 브랜치에서 아이디중복체크.txt 파일 만들어주고 동일하게
git add . 으로, 변경사항 저장하고
git commit -m “아이디중복체크” 으로 커밋한다.
git log 로 확인

회원가입 - 로그인 (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

master 에서
git merge topic
아래와 같은 화면이 나오면 shift + : 누르고 wq 누른다.

그럼 빠져나올 수 있다.
그래프로 보면 아래와 같은 가지 모양새


병합한 두 branch 에서 아이디중복체크.txt 라는 하나의 파일을 각자 수정해서 커밋 할 경우, 충돌이 생긴다.
master 가지에서 아이디중복체크.txt 안의 내용을 수정/add . / commit -m “~~수정”
topic 가지에서도 아이디중복체크.txt 안의 내용을 수정/add . / commit -m “~!~3수정” 해서
master 에서
git merge topic 으로 병합하는 경우, 같은 파일의 내용을 수정했기 때문에 아래와 같이 충돌이 생긴다.
순서를 바꾸든.. 내가 직접 충돌을 해결하고 다시 병합해야 한다.

위의 빨간 박스 <<<< ==== >>>> 부분 다 지우고,
직접 충돌을 고쳐야하니 파일을 수정한 동료와 내용 순서를 정하고 편집한 내용으로 합쳐서
다시 저장, 커밋 하고
git merge topic

이것이 3way merge
기타
1. reset 은 hard 만 사용
reset 은 hard 만 쓰자
git reset —hard 4d83 하면 예쁜태양만 남고 노을은 사라짐

.git 폴더안에 모든 형상 기록들이 데이터베이스로 다 남아있다. 그것이 reflog
git reflog

2. branch 생성 / 확인 / checkout 가지 이동
git branch topic → topic 이라는 이름 만들고
git branch → 로 확인
git checkout topic → topic 가지로 왔음
(git checkout -b topic → 브랜치 생성하고 체크아웃까지 해줌, 이걸 많이 씀)

아이디 중복체크.txt 파일 만들고
git add .
git commit -m “아이디중복체크”
git checkout master 로 브랜치 전환

3. branch 삭제
git branch -D topic 하면 → topic 가지를 날려버리는 것
git branch 하면 master만 남아 있을 것
Share article