jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

기타

[Git] 원격에서 변경 사항 발생 시 로컬에서 당겨오고 병합하기

2023. 9. 5. 00:14

원격 저장소에서 readme.md 내용을 추가했다.

로컬에 이 변경 사항을 가져와서 병합해야 하는 상황

힌트: You have divergent branches and need to specify how to reconcile them.
힌트: You can do so by running one of the following commands sometime before
힌트: your next pull:
힌트: 
힌트:   git config pull.rebase false  # merge
힌트:   git config pull.rebase true   # rebase
힌트:   git config pull.ff only       # fast-forward only
힌트: 
힌트: You can replace "git config" with "git config --global" to set a default
힌트: preference for all repositories. You can also pass --rebase, --no-rebase,
힌트: or --ff-only on the command line to override the configured default per
힌트: invocation.
fatal: Need to specify how to reconcile divergent branches.

git pull origin main을 했는데 위 힌트가 출력됐다.

로컬의 메인 브랜치와 원격 저장소의 메인 브랜치가 divergent 상태라고 한다.

각각 다른 커밋을 가지고 있기 때문에 발생하는 문제이다. 두 브랜치가 서로 다른 방향으로 나아가고 있어서 단순히 pull만으로는 어떤 것이 우선인지 판단할 수 없기에, 명시적으로 밝혀줘야 한다. 

 

1. 머지를 사용해 로컬과 원격을 병합

git fetch origin main # 원격의 main 브랜치를 가져온다
git merge origin/main # 원격의 main 브랜치와 로컬의 현재 브랜치를 병합한다

 

2. 리베이스를 사용해 로컬 변경 사항을 원격 위에 적용

git fetch origin main # 원격의 main 브랜치를 가져온다
git rebase origin/main # 로컬의 변경사항을 원격 브랜치 위에 적용한다

 

3. 로컬 브랜치를 원격 저장소 버전으로 덮어쓰기

git reset --hard origin/main

요 명령은 로컬의 변경사항을 모두 삭제하고 원격 브랜치와 동일하게 만든다. 변경사항을 백업해 두지 않았다면 모든 로컬 변경사항이 사라진다. 예전에 잘 모르고 이 명령을 날렸다가 작업한 내용을 날렸다가 복구한 경험이 있다.. 주의해서 날려야하는 명령이다. 

    '기타' 카테고리의 다른 글
    • 안녕 나의 첫 서비스! 1인 개발, 배포, 운영부터 서비스 종료까지의 회고록
    • sudo apt-get update 시 NO_PUBKEY 에러 해결 방법
    • [Git] 명령어 정리: 커밋 이후의 저장소 반영 내용 수정부터 원격 저장소와 로컬 연결 및 병합까지
    • [Git] 명령어 정리: 설치 및 초기 설정, 저장소 생성, 파일 추가와 커밋, 원격 저장소 업로드 + 에러 해결

    티스토리툴바