[Git] You have divergent branches and need to specify how to reconcile them.

Seaniiio·2024년 2월 20일

목록 보기
1/1
git push origin main


알고리즘 문제를 풀고 평소처럼 커밋하고 push하려 하니 이런 오류가 떴다.
확인해보니 "백준허브"를 통해 문제를 풀 때 자동 커밋이 되었고, 내 로컬에는 그 커밋 기록이 없어서 생긴 문제로 이해했다.
그럼 main branch로부터 pull을 하면 될까?

git pull origin main


이런 오류가 떴는데, 대충 pull하기 전에 저기 보이는 3가지 옵션 중 하나를 선택하라는 내용이다.
각 옵션이 어떤 기능을 하는지 확인해보자.

git pull

가장 기본적인 pull방법으로, 원격 저장소의 최신 커밋을 가져온다. 원격 저장소에만 새로운 커밋이 있을 때는 해당 명령어가 동작할 것이다.

git pull --rebase

원격 저장소의 최신 커밋에 로컬 저장소의 최신 커밋을 merge한다.
merge하고자 하는 두 브랜치의 커밋 이력을 모두 관리할 수 있다.

서로 충돌(conflict)이 발생할 수 있다.

git config pull.rebase true

위의 명령어를 통해 rebase merge 방식을 병합 기준으로 설정할 수 있다.

git pull --ff-only

pull 하려는 원격저장소의 브랜치와 로컬저장소의 브랜치가 fast-forward 관계일 때만 pull을 허용한다.

fast-forward?

  • 로컬 저장소에 새로운 커밋이 있고, 원격 저장소에는 새로운 커밋이 없을 때
  • 원격 저장소에 새로운 커밋이 있고, 로컬 저장소에는 새로운 커밋이 없을 때
    -> 즉, 분기한 브랜치의 커밋 히스토리가 기존 브랜치의 커밋 히스토리를 포함하고 있을 때 fast-forward 관계를 갖는다고 한다.
git config pull.ff only

위의 명령어를 통해 fast-forward merge 방식을 병합 기준으로 설정할 수 있다.


나의 경우는 로컬, 원격 저장소에 모두 새로운 커밋이 있는 상황이어서 rebase를 이용했다.

백준허브의 원격 저장소 커밋들 위에 로컬 저장소의 커밋 내용이 생긴 것을 확인할 수 있다. 이제 정상적으로 원격 저장소에 push할 수 있다.

0개의 댓글