팀프로젝트를 하는동안 팀원들이 작업한 파일이 pull request, merge 가 완료된 후 내 로컬에서 pull 을 하는 과정에서 오류가 발생했다.
현재 로컬과 원격 간의 커밋 반영 상황이 다른 경우 이를 동기화 하기 위해 아래 세가지 방법 중 하나를 선택하라는 경고 메세지이다.
☀︎ git config pull.rebase false : merge 형식으로 받아오도록 설정
☀︎ git config pull.rebase true : rebase 형식으로 받아오도록 설정
☀︎ git config pull.ff only : fast-forward only 으로 받아오도록 설정
■ 발생 배경
원격 브랜치 dev : 커밋 A → 커밋 B
로컬 브랜치 mypage : 커밋 A → 커밋 C
커밋 A 까지 반영된 원격 브랜치 dev 를 로컬에 가져와 새 브랜치 mypage 를 파서 커밋 C를 만들었고,
원격 dev 에는 새로운 커밋 B가 생겨서 해당 커밋을 로컬 mypage 에 가져오려고 하니 발생한 상황
■ 내가 선택한 방법
☀︎ git config pull.rebase false
git pull 실행 시 원격 dev 의 커밋 B 가 로컬 mypage 로 가져와지고 병합된 커밋 D 가 생성됨.
병합 커밋 D : Merge branch 'dev' into mypage
결과(로컬 기준) : A → C → B → D
■ 다른 방법
☀︎ git config pull.rebase true
git pull 실행 시 로컬 mypage의 커밋 C가 원격 dev의 커밋 B 뒤로 재배치 됨
결과(로컬 기준) : A → B → C'(C' 리베이스된 새 커밋)
☀︎ git config pull.ff only
이 경우 로컬 브랜치가 원격 브랜치의 직접적인 부모 관계일 때만 가능
B가 로컬에 반영되어 있지 않아서 이 방법은 실행 불가
* fast-forward 란?
2개의 커밋 A와 B가 있을때에 커밋A에 따른 히스토리가 커밋B에 따른 히스토리에 전부 포함되어 있는 경우,2개의 커밋은 fast-forward관계이다 라던지 커밋A는 커밋B에 fast-forward한다라고 말한다.
fast-forward인 관계
참고
git config pull.rebase false 으로 선택해서 pull 을 하니 아래와 같이 왜 이 merge가 필요한지 커밋메세지를 입력하라는 말이 나왔다.
이때 키보드 눌러봐도 변화가 없어서 나는 :wq 를 입력해서 빠져나왔었다. 궁금해서 검색해보니 아래 순서대로 진행하면 된다고 한다.
- press i (i for insert)
- write your merge message
- press esc (escape)
- write :wq (write & quit)
- then press enter
☀︎ 이후부터 원격브랜치를 내 로컬브랜치에 가져올 때 원격의 브랜치와 로컬 브랜치가 동일하지 않으면 절대 pull 을 하지 않는것을 원칙으로 하게 되었다.
dev(원격) -> dev(로컬) 원격과 로컬의 브랜치가 동일한 상태에서 pull 을 받아와 로컬브랜치 mypage 로 다시 이동해서 로컬에서 merge 시킨 후 원격에 push 및 pr 을 생성하도록 하였고 이후부터는 위와같은 문제가 전혀 발생하지 않았다.
'TIL' 카테고리의 다른 글
개인과제 - MBTI 성격 유형 테스트 ① (0) | 2024.09.09 |
---|---|
Axios, TanStack Query, Zustand, 인증/인가 (1) | 2024.09.06 |
뉴스피드 팀 프로젝트 ⑤ - 마무리, 회고 (1) | 2024.09.04 |
뉴스피드 팀 프로젝트 ④ - 기능구현(비밀번호 변경) (3) | 2024.09.03 |
뉴스피드 팀 프로젝트 ③ - 기능구현(내가 작성한 게시물) (0) | 2024.09.02 |